Was sind Blocktests?

13

Als Antwort auf eine Frage zur Modellauswahl in Gegenwart von Multikollinearität schlug Frank Harrell vor :

Fügen Sie alle Variablen in das Modell ein, testen Sie jedoch nicht die Auswirkung einer Variablen, die für die Auswirkung konkurrierender Variablen angepasst ist ... Blocktests konkurrierender Variablen sind sehr leistungsfähig, da kollineare Variablen sich im allgemeinen Assoziationstest mit mehreren Freiheitsgraden zusammenschließen gegeneinander antreten, als würden Sie Variablen einzeln testen.

Was sind Blocktests ? Können Sie ein Beispiel für ihre Anwendung in geben r?

fmark
quelle
3
Ich würde mir vorstellen, dass sich dies auf das Testen von Variablenblöcken zu einem Zeitpunkt bezieht, bei dem die gesamte potenzielle Kollinearität innerhalb eines Blocks auftritt, was keine Auswirkungen auf Omnibus-Tests wie den F Test oder den Likelihood-Ratio-Test hat, aber ich habe den Begriff noch nie gehört. Blocktest ".
Makro
2
Eine Situation, in der ich gesehen habe, wie sie vorgeschlagen wurden (und die ich selbst gemacht habe), ist, wenn Sie eine Reihe von sich gegenseitig ausschließenden Dummy-Variablen haben (z. B. eine nominelle unabhängige Variable mit vielen potenziellen Kategorien). Ein Test eines einzelnen Koeffizienten, der mit einer einzelnen Dummy-Variablen verknüpft ist, ist nicht sehr interessant, da er einen bestimmten Kontrast mit dem testet, was Sie als Grundlinie auswählen. Ein aussagekräftigerer Test ist daher der Likelihood-Ratio-Test des eingeschränkten Modells, bei dem alle Dummy-Variablen weggelassen werden.
Andy W
2
Paging @FrankHarrell ...
fmark
Das geht nicht, fmark. :)
Kardinal
1
Schade

Antworten:

13

@ mark999 lieferte eine hervorragende Antwort. Zusätzlich zum gemeinsamen Testen von Polynomausdrücken können Sie einen beliebigen Satz von Variablen gemeinsam testen ("Blocktest"). Angenommen, Sie hätten ein Modell mit konkurrierenden kollinearen Variablen Trizepsumfang, Taille, Hüftumfang und allen Körpermaßen. Um einen Gesamtkörpergrößentest zu erhalten, können Sie dies tun

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
quelle
1
Vielen Dank, dass Sie Frank darauf hingewiesen haben. Ich wusste nicht, dass du das kannst.
mark999
12

Macros Kommentar ist korrekt, genau wie Andys. Hier ist ein Beispiel.

> 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              

Anstatt die Begriffe x2und x2^2getrennt zu betrachten, ist der "Chunk-Test" der 2-df-Test, der die Nullhypothese testet, dass die Koeffizienten dieser Begriffe beide Null sind (ich glaube, er wird allgemeiner als "allgemeiner linearer F-Test" bezeichnet). ). Der p-Wert für diesen Test ist der von gegebene Wert von 0,0037 anova(ols1).

Beachten Sie, dass in dem rmsPaket, Sie angeben müssen x2Bedingungen wie pol(x2, 2)für anova.rms()wissen , dass sie zusammen getestet werden.

anova.rms()führt ähnliche Tests für Prädiktorvariablen durch, die beispielsweise als eingeschränkte kubische Splines dargestellt werden rcs(x2, 3), und für kategoriale Prädiktorvariablen. Es werden auch Interaktionsbegriffe in die "Chunks" aufgenommen.

Wenn Sie einen Blocktest für allgemeine "konkurrierende" Prädiktorvariablen durchführen möchten, wie im Zitat erwähnt, müssten Sie dies meines Erachtens manuell tun, indem Sie die beiden Modelle separat anpassen und dann verwenden anova(model1, model2). [Edit: das ist falsch - siehe Frank Harrells Antwort.]

mark999
quelle
2
Xcor(X,X2)=0
Der Klarheit halber wurde mir dies als "partieller F-Test" beigebracht, bei dem Sie 2 oder mehr Variablen auf gemeinsame Signifikanz testen. Oder ob sich eine Teilmenge von Variablen in Ihrem Modell gegenüber dem eingeschränkteren Modell verbessert (genau wie bei einem Likelihood-Ratio-Test). Hab ich recht?
C. Pieters
@ C.Pieters Ich weiß nicht, ob du richtig bist, aber es klingt vernünftig.
mark999