R:在成对因子之间进行t检验

时间:2015-01-13 20:26:45

标签: r

我有一个R数据框,其中包含8个级别的因子变量(有序)。我想在1级和1级之间进行t检验。 2,3和& 4,5& 6和7& 8.虽然我可以将数据子集化以提取每对类别,但我想知道是否有更简单的方法来实现它。想不通。试过以下,但它抱怨不同的长度(每个级别有不同的观察数量):

t.test(var1 ~ levels(factorvar)[1:2], data = mydf)

2 个答案:

答案 0 :(得分:2)

我认为错误可能是因为levels(factorvar)[1:2]只返回两个值“1”和“2”,但t.test期望~两边的向量长度为是相同的。换句话说,这并不是每个因素水平都有不同数量的观察结果的问题。相反,例如,如果var1 = 1的factorvar值为var1,而factorvar = 2的值为~,那么您需要一个长度向量在t.test(var1 ~ factorvar, data=mydf[mydf$factorvar %in% c(1,2),]) 的两侧都有90。

请改为尝试:

# 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))

您还可以创建一个函数,这样就不必为每个因子组合键入所有代码:

$p.value

如果要为每对因子级别(而不仅仅是p值)返回t检验的整个输出,则从上面的函数中删除mapply并运行SIMPLIFY=FALSE添加了{{1}}。

这是一个编码网站,而不是统计建议网站,但也要注意multiple comparisons

答案 1 :(得分:2)

pairs <- list( c(1, 2), c(3, 4), c(5, 6), c(7, 8) )
lapply(pairs, function(pr) {
       t.test( var1 ~ factorvar, 
               data=dat[dat$factorvar %in$ pr, c("var1", "factorvar")] )
                          }
       )

我没有额外(无代表性)级别会导致t.test.formula出现问题,因为这些因素会被强制为mumeric。也可以试试:

lapply(pairs, function(pr) {
         t.test( var1 ~ factorvar, 
                 data=dat[ , c("var1", "factorvar")],
                 subset= factorvar %in% pr)
                          } )

注意:经过测试:

dat <- data.frame(var1=rnorm(100), 
                  factorvar=factor(sample(1:8, 100, rep=TRUE)))

示例输出:

[[1]]

    Welch Two Sample t-test

data:  var1 by factorvar
t = -1.2077, df = 8.419, p-value = 0.26
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.3597432  0.4197142
sample estimates:
mean in group 1 mean in group 2 
     -0.1819342       0.2880802 


[[2]]

    Welch Two Sample t-test

data:  var1 by factorvar
t = -0.8141, df = 20.676, p-value = 0.4249
#--------- rest of output snipped-------