Que sont les tests de blocs?

13

En réponse à une question sur la sélection des modèles en présence de multicolinéarité , Frank Harrell a suggéré :

Mettez toutes les variables dans le modèle mais ne testez pas l'effet d'une variable ajustée pour les effets des variables concurrentes ... en compétition les uns contre les autres comme lorsque vous testez des variables individuellement.

Que sont les tests de blocs ? Pouvez-vous donner un exemple de leur application dans r?

fmark
la source
3
J'imagine que cela fait référence au test de blocs de variables à la fois, où toute la colinéarité potentielle se produit au sein d'un bloc, ce qui n'affecte pas les tests omnibus comme le test ou le test du rapport de vraisemblance, mais je n'ai jamais entendu le terme " chunk test ". F
Macro
2
Une situation que j'ai vue suggérée (et que j'ai faite moi-même) est lorsque vous avez une série de nombreuses variables muettes mutuellement exclusives (par exemple une variable indépendante nominale avec de nombreuses catégories potentielles). Un test de tout coefficient individuel associé à une variable fictive unique n'est pas très intéressant, car il teste un contraste particulier avec tout ce que vous choisissez comme ligne de base. Par conséquent, un test plus informatif est le test du rapport de vraisemblance du modèle restreint en omettant toutes les variables muettes.
Andy W
2
Paging @FrankHarrell ...
fmark
Ça ne marche pas, fmark. :)
cardinal
1
Dommage, ça devrait :)
fmark

Réponses:

13

@ mark999 a fourni une excellente réponse. En plus de tester conjointement des termes polynomiaux, vous pouvez tester conjointement ("test de bloc") n'importe quel ensemble de variables. Supposons que vous disposiez d'un modèle avec des variables colinéaires concurrentes: circonférence du triceps, taille, circonférence des hanches, toutes les mesures de la taille du corps. Pour obtenir un test global de la taille du corps, vous pouvez faire

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

NAtricep, waist, hipR2

Frank Harrell
la source
1
Merci d'avoir signalé cela Frank. Je ne savais pas que tu pouvais faire ça.
mark999
12

Le commentaire de Macro est correct, tout comme Andy. Voici un exemple.

> 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              

Au lieu de considérer les termes x2et x2^2séparément, le "test de bloc" est le test à 2 df qui teste l'hypothèse nulle selon laquelle les coefficients de ces termes sont tous deux nuls (je crois qu'il est plus communément appelé quelque chose comme un "test F linéaire général" ). La valeur de p pour ce test est le 0,0037 donné par anova(ols1).

Notez que dans le rmspackage, vous devez spécifier les x2termes que pol(x2, 2)pour anova.rms()savoir qu'ils doivent être testés ensemble.

anova.rms()effectuera des tests similaires pour les variables prédictives qui sont représentées comme des splines cubiques restreintes en utilisant, par exemple rcs(x2, 3), et pour les variables prédictives catégorielles. Il inclura également des termes d'interaction dans les "morceaux".

Si vous vouliez faire un test en bloc pour les variables prédictives «concurrentes» générales, comme mentionné dans la citation, je pense que vous devriez le faire manuellement en ajustant les deux modèles séparément puis en les utilisant anova(model1, model2). [Modifier: c'est incorrect - voir la réponse de Frank Harrell.]

mark999
la source
2
Xcor(X,X2)=0
Par souci de clarté, je pense que cela m'a été enseigné comme un "test F partiel" où vous testez 2 variables ou plus pour la signification conjointe. Ou si un sous-ensemble de variables de votre modèle s'améliore par rapport au modèle plus restreint (tout comme un test de rapport de vraisemblance). Ai-je raison?
C. Pieters
@ C.Pieters Je ne sais pas si vous avez raison, mais cela semble raisonnable.
mark999