t、 当分配给列表对象时,R中的测试会给出奇怪的结果

t、 当分配给列表对象时,R中的测试会给出奇怪的结果,r,statistics,R,Statistics,我定义了两个明显不同的向量: > x1 = c(3, 4, 3, 4) > x2 = c(9, 8, 9, 7) 如果我使用t.test执行t-test,而不将其分配给对象名,则会得到预期的结果。例如: > 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 a

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

> x1 = c(3, 4, 3, 4)
> x2 = c(9, 8, 9, 7)
如果我使用t.test执行t-test,而不将其分配给对象名,则会得到预期的结果。例如:

> 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-test,以通过以下方式创建列表对象:

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作为例子


请问我的代码有什么问题导致了这个问题?谢谢您的帮助。

您得到的结果与作业无关:它是由参数
mu=mean.diff
引起的

根据
?t.test
,mu为

一个数字,指示平均值的真实值(如果您正在执行两个样本测试,则表示平均值的差异)


由于您将其设置为均值差异的实际值,因此结果t将始终等于零。

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

,因此总结一下,在这种情况下,不应使用
mu
,因此取默认值0?然后
t.test
测试
x1
x2
的平均值之间的差异是否不同于
mu=0
?这很有道理,谢谢你的回答@GMSL“所以总结一下,在这种情况下,不应该使用mu”嗯,它总是取决于您正在测试什么。如果要测试两个样本均值是否不同
mu1!=mu2
您将使用形式为
t检验(x1,x2)
的双面双样本t检验;如果要测试样本平均值中的差异是否不同于预先指定的差异
mu1-mu2!=mu
您将使用形式为
t.test(x1,x2,mu=mu)
的双面双样本t检验。