分配给列表对象时,R中的t.test给出奇怪的结果

时间:2018-08-29 08:31:54

标签: r statistics

我定义了两个明显不同的向量:

> x1 = c(3, 4, 3, 4)
> x2 = c(9, 8, 9, 7)

如果我使用 t.test 执行t检验而不将其分配给对象名称,则会得到预期的结果。如:

> t.test(x1, x2)

# Gives the console output:

    Welch Two Sample t-test

data:  x1 and x2
t = -8.4971, df = 4.927, p-value = 0.000399
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -6.193426 -3.306574
sample estimates:
mean of x mean of y 
     3.50      8.25 

这给出了一个大的t值和一个小的p值,表明两个向量具有不同的均值。但是,如果我将t检验分配给对象名称以通过以下方式创建列表对象:

mean.diff = mean(x1) - mean(x2)
ttst = t.test(
   x = x1,
   y = x2,
   alternative = "two.sided",
   mu = mean.diff,
   paired = FALSE,
   var.equal = FALSE,
   conf.level = 0.95
)

结果总是 t值为零,p值为1,这表明两个向量是相同的。无论矢量如何,这种情况都会发生,我只是选择了x1和x2作为示例。

请问导致我的代码出了什么问题?感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

在第二个示例中,您正在测试均值差异是否不同于mean.diff;由于您将mean.diff计算为x1x2mean.diff = mean(x1) - mean(x2))的均值之差,因此t统计量正好为0,相应的p值最大(即等于1)。因此,我们不能拒绝零假设H0,其中H0对应于均值之差等于mean.diff

答案 1 :(得分:1)

您获得的结果与赋值无关:它是由参数mu = mean.diff引起的。

根据?t.test,mu是

  

一个数字,表示平均值的真实值(或者,如果您正在执行两个样本检验,则表示均值之差)。

由于将其设置为均值之差的实际值,因此所得的t将始终等于零。