什么是块测试?

机器算法验证 假设检验 分类数据 模型选择 多重共线性 块测试
2022-02-02 01:30:24

在回答存在多重共线性时模型选择的问题时,Frank Harrell 建议

将所有变量放入模型中,但不测试针对竞争变量的影响调整的一个变量的影响......竞争变量的块测试很强大,因为共线变量在整体多自由度关联测试中联合起来,而不是相互竞争,就像您单独测试变量时一样。

什么是块测试你能举例说明他们在 R 中的应用吗?

2个回答

@mark999 提供了一个很好的答案。除了联合测试多项式项之外,您还可以联合测试(“块测试”)任何一组变量。假设您有一个模型,其中包含相互竞争的共线变量三头肌周长、腰围、臀围以及所有身体尺寸的测量值。要获得整体身体大小块测试,您可以这样做

    require(rms)
    f <- ols(y ~ age + tricep + waist + pol(hip, 2))
    anova(f, tricep, waist, hip)  # 4 d.f. test

您可以通过拟合仅包含年龄的模型(如果没有NAs in tricep, waist, hip)并进行“差异R2测试”。这些等效测试在三个变量之间甚至不会受到极端共线性的影响。

宏的评论是正确的,安迪的评论也是正确的。这是一个例子。

> library(rms)
> 
> set.seed(1)
> d <- data.frame(x1 = rnorm(50), x2 = rnorm(50))
> d <- within(d, y <- 1 + 2*x1 + 0.3*x2 + 0.2*x2^2 + rnorm(50))
> 
> ols1 <- ols(y ~ x1 + pol(x2, 2), data=d) # pol(x2, 2) means include x2 and x2^2 terms
> ols1

Linear Regression Model

ols(formula = y ~ x1 + pol(x2, 2), data = d)

                Model Likelihood     Discrimination    
                   Ratio Test           Indexes        
Obs       50    LR chi2     79.86    R2       0.798    
sigma 0.9278    d.f.            3    R2 adj   0.784    
d.f.      46    Pr(> chi2) 0.0000    g        1.962    

Residuals

    Min      1Q  Median      3Q     Max 
-1.7463 -0.4789 -0.1221  0.4465  2.2054 

          Coef   S.E.   t     Pr(>|t|)
Intercept 0.8238 0.1654  4.98 <0.0001 
x1        2.0214 0.1633 12.38 <0.0001 
x2        0.2915 0.1500  1.94 0.0581  
x2^2      0.2242 0.1163  1.93 0.0602  


> anova(ols1)
                Analysis of Variance          Response: y 

 Factor     d.f. Partial SS MS          F      P     
 x1          1   131.894215 131.8942148 153.20 <.0001
 x2          2    10.900163   5.4500816   6.33 0.0037
  Nonlinear  1     3.196552   3.1965524   3.71 0.0602
 REGRESSION  3   156.011447  52.0038157  60.41 <.0001
 ERROR      46    39.601647   0.8609054              

“块检验”不是单独考虑x2x2^2项,而是 2-df 检验,它检验这些项的系数都为零的零假设(我相信它通常被称为“一般线性 F 检验” )。该检验的 p 值为 0.0037,由 给出anova(ols1)

请注意,在rms包中,您必须指定x2术语,pol(x2, 2)以便anova.rms()知道它们将一起测试。

anova.rms()将对预测变量进行类似的测试,这些变量使用例如 和 表示为受限三次样条曲线,rcs(x2, 3)并对分类预测变量进行类似的测试。它还将在“块”中包含交互术语。

如果您想对一般的“竞争”预测变量进行块测试,如引用中所述,我相信您必须通过分别拟合两个模型然后使用anova(model1, model2). [编辑:这是不正确的 - 请参阅 Frank Harrell 的回答。]