我有一个 R 数据框,其中的因子变量有 8 个级别(已排序)。我想在级别 1 和 2、3 和 4、5 和 6 以及 7 和 8 之间进行 t 检验。虽然我可以对数据进行子集化以提取每对类别,但我想知道是否有更简单的方法它。想不通。尝试了以下方法,但它提示长度不同(每个级别有不同数量的观察值):
t.test(var1 ~ levels(factorvar)[1:2], data = mydf)
最佳答案
我认为该错误可能是因为 levels(factorvar)[1:2]
仅返回两个值“1”和“2”,但 t.test
期望~
两侧向量的长度相同。换句话说,这不是每个因子水平具有不同数量的观察值的问题。相反,例如,如果 factorvar
=1 有 40 个 var1
值,而 factorvar
有 50 个 var1
值code>=2,那么在~
两边就需要一个长度为90的向量。
试试这个:
t.test(var1 ~ factorvar, data=mydf[mydf$factorvar %in% c(1,2),])
您还可以创建一个函数,这样您就不必为每个因素组合键入所有代码:
# Function to return p-values from t-test between two factor levels
my.t = function(fac1, fac2){
t.test(mydf$var1[mydf$factorvar==fac1],
mydf$var1[mydf$factorvar==fac2])$p.value
}
# Run the function on factor levels 1 and 2
my.t(1,2)
# Do all four at once
mapply(my.t, seq(1,7,2), seq(2,8,2))
如果您想返回每对因子水平的 t 检验的整个输出(而不仅仅是 p 值),请从上面的函数中删除 $p.value
并运行添加了 SIMPLIFY=FALSE
的 mapply
。
这是一个编码网站,而不是一个统计建议网站,但也要小心multiple comparisons .
关于R:在因素对之间进行 t 检验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27930881/