两次样本t检验的功效


10

我试图了解两个独立样本t检验(不假设方差相等,因此我使用Satterthwaite)的功效计算。

这是我发现可以帮助您理解该过程的图表:

在此处输入图片说明

因此,我假定给定以下两个总体,并给出样本量:

mu1<-5
mu2<-6
sd1<-3
sd2<-2
n1<-20
n2<-20

我可以计算零下的临界值,该临界值与0.05的上尾概率有关:

df<-(((sd1^2/n1)+(sd2^2/n2)^2)^2) / ( ((sd1^2/n1)^2)/(n1-1) + ((sd2^2/n2)^2)/(n2-1)  )
CV<- qt(0.95,df) #equals 1.730018

然后计算替代假设(对于这种情况,我了解到的是“非中心t分布”)。我使用上图中的非中心分布和临界值在上图中计算了beta。这是R中的完整脚本:

#under alternative
mu1<-5
mu2<-6
sd1<-3
sd2<-2
n1<-20
n2<-20


#Under null
Sp<-sqrt(((n1-1)*sd1^2+(n2-1)*sd2^2)/(n1+n2-2))
df<-(((sd1^2/n1)+(sd2^2/n2)^2)^2) / ( ((sd1^2/n1)^2)/(n1-1) + ((sd2^2/n2)^2)/(n2-1)  )
CV<- qt(0.95,df)


#under alternative
diff<-mu1-mu2
t<-(diff)/sqrt((sd1^2/n1)+ (sd2^2/n2))
ncp<-(diff/sqrt((sd1^2/n1)+(sd2^2/n2)))


#power
1-pt(t, df, ncp)

得出的幂值为0.4935132。

这是正确的方法吗?我发现如果我使用其他功率计算软件(例如SAS,我认为我已经对下面的问题进行了等效设置),则会得到另一个答案(从SAS到0.33)。

SAS代码:

proc power;
      twosamplemeans test=diff_satt
         meandiff = 1
         groupstddevs = 3 | 2
         groupweights = (1 1)
         ntotal = 40
         power = .
        sides=1;
   run;

最终,我希望获得一种理解,使我能够对更复杂的过程进行仿真。

编辑:我发现了我的错误。本来应该

1-pt(CV,df,ncp)不是1-pt(t,df,ncp)

Answers:


8

您接近了,但是需要一些小的更改:

  • 平均值的真正差异通常取为,而不是相反。μ2-μ1个
  • G *电源用途作为自由度为的在这种情况下-配送(不同的方差,同一组大小),从以下科恩的建议所解释这里tñ1个+ñ2-2Ť
  • SAS可能使用Welch公式或Satterthwaite公式来计算给定不等方差的df(在您引用的pdf中找到)-结果中只有2个有效数字无法分辨(请参阅下文)

随着n1, n2, mu1, mu2, sd1, sd2在你的问题中定义:

> alpha   <- 0.05
> dfGP    <- n1+n2 - 2                     # degrees of freedom (used by G*Power)
> cvGP    <- qt(1-alpha, dfGP)             # crit. value for one-sided test (under the null)
> muDiff  <- mu2-mu1                       # true difference in means
> sigDiff <- sqrt((sd1^2/n1) + (sd2^2/n2)) # true SD for difference in empirical means
> ncp     <- muDiff / sigDiff              # noncentrality parameter (under alternative)
> 1-pt(cvGP, dfGP, ncp)                    # power
[1] 0.3348385

这与G * Power的结果相匹配,这是针对这些问题的出色程序。它还显示df,临界值和ncp,因此您可以分别检查所有这些计算。

在此处输入图片说明

编辑:使用Satterthwaite的公式或Welch的公式变化不大(仍为0.33 *):

# Satterthwaite's formula
> var1  <- sd1^2
> var2  <- sd2^2
> num   <- (var1/n1 + var2/n2)^2
> denST <- var1^2/((n1-1)*n1^2) + var2^2/((n2-1)*n2^2)
> (dfST <- num/denST)
[1] 33.10309

> cvST <- qt(1-alpha, dfST)
> 1-pt(cvST, dfST, ncp)
[1] 0.3336495

# Welch's formula
> denW <- var1^2/((n1+1)*n1^2) + var2^2/((n2+1)*n2^2)
> (dfW <- (num/denW) - 2)
[1] 34.58763

> cvW   <- qt(1-alpha, dfW)
> 1-pt(cvW, dfW, ncp)
[1] 0.3340453

(请注意,我稍微改变了一些变量名称tdfdiff也的内置功能,也请注意,你的代码的分子名字df是错误的,它有一个放错了地方^2,和一个^2太多了,它应该是((sd1^2/n1) + (sd2^2/n2))^2


谢谢!一件事是,这个df公式不是假设总体标准偏差相等吗?请参阅下面的第3页(我在那获得了Satterthwaite df):stata-journal.com/sjpdf.html?articlenum=st0062。据说,SAS在我发布的proc中使用了这种近似值。
B_Miner

我发现了错误,并在问题中进行了调整。再次感谢!
B_Miner 2011年

1
@B_Miner我已经更新了我的答案以解决您的问题。
caracal

1

如果您主要对计算能力感兴趣(而不是通过手工学习来学习),并且已经在使用R,则请查看pwr软件包以及pwr.t.testor pwr.t2n.test函数。(即使您亲自学习也可以很好地验证您的结果)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.