Co to są testy porcji?

13

W odpowiedzi na pytanie o wybór modelu w obecności Współliniowość , Frank Harrell zaproponował :

Umieść wszystkie zmienne w modelu, ale nie testuj wpływu jednej zmiennej skorygowanej o skutki zmiennych konkurujących ... Testy fragmentów zmiennych konkurencyjnych są potężne, ponieważ zmienne współliniowe łączą siły w ogólnym teście asocjacji wielokrotnego stopnia swobody zamiast konkurując ze sobą, tak jak przy testowaniu zmiennych indywidualnie.

Co to są testy porcji ? Czy możesz podać przykład ich zastosowania r?

fmark
źródło
3
Wyobrażam sobie, że odnosi się to do testowania bloków zmiennych w tym samym czasie, w którym cała potencjalna kolinearność zachodzi w obrębie bloku, co nie wpływa na testy omnibus, takie jak test lub test prawdopodobieństwa, ale nigdy nie słyszałem terminu „ test fragmentu ". F
Makro
2
Jedną z sytuacji, w których widziałem je zasugerowane (i zrobiłem to sam), jest szereg wielu wzajemnie wykluczających się zmiennych zastępczych (np. Nominalna zmienna niezależna z wieloma potencjalnymi kategoriami). Test dowolnego indywidualnego współczynnika związanego z dowolną zmienną fikcyjną nie jest bardzo interesujący, ponieważ testuje określony kontrast z tym, co wybierzesz jako linię bazową. Dlatego bardziej pouczającym testem jest test współczynnika prawdopodobieństwa modelu ograniczonego, pomijając wszystkie zmienne obojętne.
Andy W
2
Stronicowanie @FrankHarrell ...
fmark
To nie działa, Fmark. :)
kardynał
1
Szkoda, że ​​powinno :)
fmark

Odpowiedzi:

13

@ mark999 dostarczył doskonałą odpowiedź. Oprócz wspólnego testowania warunków wielomianowych, możesz wspólnie testować („test fragmentu”) dowolny zestaw zmiennych. Załóżmy, że masz model z konkurującymi zmiennymi współliniowymi obwód tricep, obwód talii, obwód bioder, wszystkie pomiary wielkości ciała. Aby uzyskać ogólny test na wielkość ciała, możesz zrobić

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

Możesz uzyskać ten sam test, dopasowując model zawierający tylko wiek (jeśli nie ma żadnych NAliter tricep, waist, hip) i wykonując „różnicę w teście ”. Te równoważne testy nie wykazują nawet skrajnej kolinearności między trzema zmiennymi.R2

Frank Harrell
źródło
1
Dzięki za wskazanie tego Franka. Nie wiedziałem, że możesz to zrobić.
mark999
12

Komentarz Makro jest poprawny, podobnie jak Andy. Oto przykład.

> 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              

Zamiast osobnego rozpatrywania terminów x2i x2^2„test fragmentu” jest testem 2-df, który testuje hipotezę zerową, że współczynniki tych terminów są równe zeru (uważam, że jest to częściej nazywane „ogólnym liniowym testem F” ). Wartość p dla tego testu wynosi 0,0037 podane przez anova(ols1).

Zauważ, że w rmspakiecie, musisz określić x2warunki jak pol(x2, 2)dla anova.rms()wiedzieć, że mają one być badane razem.

anova.rms()wykona podobne testy dla zmiennych predykcyjnych, które są reprezentowane jako ograniczone splajny sześcienne, używając, na przykład rcs(x2, 3), i dla zmiennych predykcyjnych jakościowych. Będzie także zawierać warunki interakcji w „fragmentach”.

Jeśli chciałbyś wykonać test porcji dla ogólnych „konkurencyjnych” zmiennych predykcyjnych, jak wspomniano w cytacie, uważam, że musiałbyś to zrobić ręcznie, dopasowując oba modele osobno, a następnie używając anova(model1, model2). [Edycja: to jest niepoprawne - patrz odpowiedź Franka Harrella.]

mark999
źródło
2
Xcor(X,X2)=0
Dla jasności uważam, że nauczono mnie tego jako „częściowego testu F”, w którym testuje się 2 lub więcej zmiennych pod kątem istotności wspólnej. Lub czy podzbiór zmiennych w twoim modelu poprawia się w porównaniu z bardziej ograniczonym modelem (podobnie jak test współczynnika prawdopodobieństwa). Mam rację?
C. Pieters
@ C. Peters Nie wiem, czy masz rację, ale brzmi rozsądnie.
mark999