【发布时间】:2015-05-04 16:02:11
【问题描述】:
我有一个格式与下面类似的大型数据框(运行到大约 200 个化合物)。
+-----------+----------+------------+
| Treatment | Compound | Proportion |
+-----------+----------+------------+
| A | wax | 0.095 |
| A | alcohol | 0.077 |
| A | ketone | 0.066 |
| B | wax | 0.067 |
| B | alcohol | 0.071 |
| B | ketone | 0.073 |
| C | wax | 0.051 |
| C | alcohol | 0.019 |
| C | ketone | 0.07 |
| D | wax | 0.033 |
| D | alcohol | 0.082 |
| D | ketone | 0.019 |
+-----------+----------+------------+
我在线性模型上运行了方差分析
lm(Proportion ~ Treatment)
使用 data.table 方法为每个化合物生成一个化合物列表,其中处理是一个重要因素,将我的数据子集到“t.df”。
我现在想使用 TukeyHSD 来确定每种化合物的哪些治疗方法彼此之间存在显着差异。我意识到 TukeyHSD 需要一个“aov”输出,我需要将它包含在我的代码中。我想我想要的是一种“tapply”方法来遍历我的化合物列表、应用模型、进行 anova 然后进行 Tukeys 测试并将格式保存在矩阵列表中。
我一直在尝试使用类似以下的方法,但没有成功:
mytest <- function(x) {
model<-lm(Proportion ~ Treatment, data=t.df)
aovmodel<-aov(model)
tuks<-TukeyHSD(aovmodel)
}
tapply((t.df[unique(t.df$Compound)]),mytest)
这会返回错误:
"Error in `[.data.frame`(t.df, unique(t.df$Compound)) :
undefined columns selected"
我认为这可能是我对这段代码最少的问题。
有没有什么方法可以提取每个测试化合物返回的 Tukey 的“p adj”值?我很想避免长期这样做,因为我的列表中有大量化合物,并预计在未来的几个数据集上使用不同的化合物名称进行类似的分析。
【问题讨论】:
-
尝试在
unique(...)之后加逗号。 -
这样做会产生另一个错误:“unique.default(x, nmax = nmax) 中的错误:unique() 仅适用于向量”我认为“t.df$Compound”有资格作为向量? #editing 原始代码从 Compound.No 到 Compound 以匹配示例数据框
-
示例代码中似乎存在一些问题,即:(1)在对lm的调用中,不应该将data设置为x(data = x),因为它看起来像 lm 在每次调用 mytest 时都应用于 t.df; (2) 原始数据框中没有“Compound.No”列。此外,还不清楚 t.df[unique(t,
-
@gvrocha:OP 修复了
Compound.No问题。 -
我不确定我是否理解
unique()的意图。您是否试图仅将其应用于独特的化合物?由于每个化合物有多个记录,因此您需要确定要专门选择哪些记录。