我目前正在尝试在数据框上运行方差分析,其格式如下:
ethnicity sampleID batch gender gene1 gene2 gene3 ...
..最多2,000个基因,该表中填有基因表达值。
下面是我用来为每个基因运行方差分析以发现种族差异的代码:
# here, 'merge' is the dataframe as described above
# set ethnicity to categorical
merge$ethnicity <- factor(merge$ethnicity, levels=c("Chinese","Malay","Indian"))
# parametric anova for each gene
baseformula <- " ~ ethnicity"
for (i in 5:ncol(merge))
{
p <- anova(lm(colnames(merge)[i] ~ ethnicity, data=merge)) # variable lengths differ??
}
当我尝试运行此代码时,出现以下错误:
model.frame.default(formula = colnames(merge)[i]〜种族, :可变长度有所不同(基于“种族”)
我检查了我的“种族”列的长度,该长度与我的“ gene1”列的长度相同。我也曾尝试对na.omit()
使用merge$ethnicity
命令,但仍然会出现相同的错误。
有人对这个问题有什么建议吗?
谢谢!
编辑:这是我的数据框的前五行:
这是我的数据框的前五行和前五列:
ethnicity sample.id Batch Gender X7896759
1 1 H60903 B6 1 6.19649
2 1 H61603 B2 1 6.74464
3 1 H61608 B7 2 6.20268
4 1 H62204 B4 1 6.71395
5 1 H62901 B7 2 6.59963
使用代码:
for (i in 5:ncol(merge))
{
print(colnames(merge)[i])
print(summary(aov(merge[,i] ~ merge$ethnicity)))
}
似乎给了我以下错误:
levels(x)[x]中的错误:负下标只能混合0 另外:警告消息:1:在model.response(mf,“ numeric”)中:
在因子响应中使用type =“ numeric”将被忽略2:在 Ops.factor(y,z $ residuals):“-”对因子没有意义
答案 0 :(得分:0)
我产生了一个例子。 df
包含变量etnicity
,具有三个组,并且有两个基因。 etnicity
是您的预测变量。 loop
打印与aov
相关的每个基因的etnicity
摘要结果。
set.seed(1); df <- data.frame(etnicity=c('A', 'B', 'C','A', 'B', 'C','A', 'B', 'C'), gene1=rnorm(9), gene2=rnorm(9))
for(i in 2:ncol(df)){
print(colnames(df)[i])
print( summary( aov(df[,i] ~ df$etnicity) ) )
}
[1] "gene1"
Df Sum Sq Mean Sq F value Pr(>F)
df$etnicity 2 1.324 0.6619 1.006 0.42
Residuals 6 3.947 0.6579
[1] "gene2"
Df Sum Sq Mean Sq F value Pr(>F)
df$etnicity 2 2.436 1.218 0.977 0.429
Residuals 6 7.478 1.246
将其应用于类似于OP的数据母马。
df <- read.table(text="ethnicity sample.id Batch Gender X7896759
1 1 H60903 B6 1 6.19649
2 1 H61603 B2 1 6.74464
3 2 H61608 B7 2 6.20268
4 2 H62204 B4 1 6.71395
5 3 H62901 B7 2 6.59963", header=T, stringsAsFactors=F)
for(i in 5:ncol(df)){
print(colnames(df)[i])
print(summary(aov(df[,i]~df$ethnicity)))
}
[1] "X7896759"
Df Sum Sq Mean Sq F value Pr(>F)
df$ethnicity 1 0.00803 0.00803 0.084 0.791
Residuals 3 0.28767 0.09589