R

相當於 GLS 框架中的 Welch t 檢驗

  • March 21, 2015

Welch 的 t 檢驗如何表示為廣義最小二乘模型?

標準獨立樣本 t 檢驗(假設被比較的樣本來自方差相等的總體)可以表示如下:

在哪裡是結果和是對應於組成員資格的二元變量。顯著性檢驗將產生與標準獨立樣本 t 檢驗相同的 t 統計量。因此,下面的兩個命令產生相同的統計數據(具有相同的自由度):

t.test(extra~group, data = sleep, var.equal = TRUE)
lm(extra~group, data = sleep)

因為 Welch 的 t 檢驗允許被比較的樣本之間的方差不相等,所以我的猜測是它等同於廣義最小二乘法。那麼問題是,什麼調用gls(如果這確實是概念化問題的正確方法)會產生與以下相同的結果(包括自由度):

t.test(extra~group, data = sleep, var.equal = FALSE)

這是一個有趣的問題。需要注意的一件事是,允許不等方差只會改變-如果組的大小不相等,則統計。如果兩組大小相等(即,),然後是韋爾奇的-測試(表示) 和學生的-測試(表示) 給出相同的檢驗統計量,因為

我指出這一點是因為您在帖子中提供的睡眠研究示例涉及相同的組大小,這就是運行您的示例返回相同的原因-所有情況下的統計數據。 無論如何,要回答您的問題,可以nlme::gls()通過使用weightsnlme::varIdent(). 下面我生成了一些具有不等組大小和不等方差的數據,然後展示如何使用 t.test 和回歸函數(lm 或 gls)來擬合假設或不假設等方差的模型:

# generate data with unequal group sizes and unequal variances
set.seed(497203)
dat <- data.frame(group=rep.int(c("A","B"), c(10,20)),
 y = rnorm(30, mean=rep.int(c(0,1), c(10,20)), sd=rep.int(c(1,2),c(10,20))))

# the t-statistic assuming equal variances
t.test(y ~ group, data = dat, var.equal = TRUE)
summary(lm(y ~ group, data = dat))

# the t-statistic not assuming equal variances
t.test(y ~ group, data = dat, var.equal = FALSE)
library(nlme)
summary(gls(y ~ group, data = dat, weights=varIdent(form = ~ 1 | group)))

# a hack to achieve the same thing in lmer
# (lmerControl options are needed to prevent lmer from complaining
# about too many levels of the grouping variable)
dat <- transform(dat,
                obs=factor(1:nrow(dat)),
                dummy=as.numeric(group=="B"))
library('lme4')
summary(lmer(y ~ group + (dummy-1|obs), data=dat,      
            control=lmerControl(check.nobs.vs.nlev = "ignore",
                                check.nobs.vs.nRE  = "ignore")))

您還詢問了獲得相同的自由度。自由度基於Satterthwaite 近似,並t.test默認應用該近似,因為這是 Welch 描述的解決方案的一部分。但gls不這樣做。理論上這是可以做到的,我相信會這樣做,所以你應該能夠PROC MIXED在. 也許(可能)有一些 R 包可以很容易地為一般回歸模型(具有連續預測器)獲得 Satterthwaite DF,但我不知道它是什麼。SAS``PROC MIXED

@amoeba 更新: Satterthwaite 近似值作為包中的默認值實現lmerTest,因此要獲得-value 與 Welch 的 t 檢驗完全匹配,可以運行:

library('lmerTest')
summary(lmer(y ~ group + (dummy-1|obs), data=dat,      
            control=lmerControl(check.nobs.vs.nlev = "ignore",
                                check.nobs.vs.nRE  = "ignore")))

引用自:https://stats.stackexchange.com/questions/142685

comments powered by Disqus