Cosa sono i chunk test?


13

In risposta a una domanda sulla selezione del modello in presenza di multicollinearità , Frank Harrell ha suggerito :

Inserisci tutte le variabili nel modello ma non testare l'effetto di una variabile aggiustata per gli effetti delle variabili concorrenti ... I test di blocco delle variabili concorrenti sono potenti perché le variabili collineari uniscono le forze nel test di associazione a più gradi di libertà globale, invece di competere l'uno contro l'altro come quando si verificano le variabili singolarmente.

Cosa sono i chunk test ? Puoi fare un esempio della loro applicazione in r?


3
Immagino che questo si riferisca al test di blocchi di variabili alla volta, in cui tutta la potenziale collinearità si verifica all'interno di un blocco, il che non influisce sui test omnibus come il test test o il rapporto di verosimiglianza, ma non ho mai sentito il termine " test del pezzo ". F
Macro

2
Una situazione che li ho visti suggeriti (e li ho fatti da solo) è quando hai una serie di molte variabili fittizie reciprocamente esclusive (ad esempio una variabile nominale indipendente con molte potenziali categorie). Un test di ogni singolo coefficiente associato a una singola variabile fittizia non è molto interessante, in quanto verifica un contrasto particolare con qualsiasi cosa tu scelga come base. Quindi un test più informativo è il test del rapporto di verosimiglianza del modello limitato omettendo tutte le variabili fittizie.
Andy W

2
Paging @FrankHarrell ...
fmark

Non funziona, Mark. :)
cardinale

1
Peccato, dovrebbe :)
fmark

Risposte:


13

@ mark999 ha fornito un'ottima risposta. Oltre a testare congiuntamente i termini polinomiali, è possibile testare congiuntamente ("chunk test") qualsiasi set di variabili. Supponiamo di avere un modello con variabili collineari concorrenti circonferenza tricipite, vita, circonferenza dell'anca, tutte le misurazioni della dimensione corporea. Per ottenere un test di blocco di dimensioni corporee complessive, è possibile farlo

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

NAtricep, waist, hipR2


1
Grazie per averlo segnalato Frank. Non sapevo che potessi farlo.
mark999,

12

Il commento di Macro è corretto, così come Andy. Ecco un esempio

> 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              

Invece di considerare separatamente i termini x2e x2^2, il "chunk test" è il test 2-df che verifica l'ipotesi nulla che i coefficienti di questi termini siano entrambi zero (credo che sia più comunemente chiamato qualcosa come un "test F lineare generale" ). Il valore p per quel test è lo 0,0037 fornito da anova(ols1).

Si noti che nel rmspacchetto, è necessario specificare i x2termini pol(x2, 2)per anova.rms()sapere che devono essere testati insieme.

anova.rms()eseguirà test simili per variabili predittive che sono rappresentate come spline cubiche limitate utilizzando, ad esempio rcs(x2, 3), e per variabili predittive categoriali. Includerà anche termini di interazione nei "blocchi".

Se volessi fare un test di blocco per variabili predittive "concorrenti" generali, come menzionato nella citazione, credo che dovresti farlo manualmente montando i due modelli separatamente e quindi usando anova(model1, model2). [Modifica: questo non è corretto - vedi la risposta di Frank Harrell.]


2
Xcor(X,X2)=0

Per motivi di chiarezza, penso che mi sia stato insegnato questo come un "test F parziale" in cui testate 2 o più variabili per il significato comune. O se un sottoinsieme di variabili nel modello migliora rispetto al modello più limitato (proprio come un test del rapporto di verosimiglianza). Ho ragione?
C. Pieters,

@ C.Pieters Non so se hai ragione, ma sembra ragionevole.
mark999,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.