Що таке тести на шматки?


13

Відповідаючи на запитання щодо вибору моделі за наявності мультиколінеарності , Френк Харрелл запропонував :

Помістіть усі змінні в модель, але не перевіряйте ефект однієї змінної, скоригованої на ефекти конкуруючих змінних ... Тести блоку конкуруючих змінних є потужними, оскільки колінеарні змінні об'єднують сили в загальний тест на асоціацію множинного ступеня свободи, а не на конкуруючи один з одним, як при тестуванні змінних індивідуально.

Що таке тести на шматки ? Чи можете ви навести приклад їх застосування r?


3
Я б міг уявити, що це стосується тестування блоків змінних в той час, коли вся потенційна колінеарність відбувається в блоці, що не впливає на тести омнібусів, як тест або тест на ймовірність, але термін я ніколи не чув " тест шматка ". F
Макрос

2
Одна з ситуацій, яку я бачив, як вони запропонували (і я це зробив сам), - це коли у вас є ряд безлічі взаємовиключних змінних змінних (наприклад, номінальна незалежна змінна з багатьма потенційними категоріями). Тест будь-якого індивідуального коефіцієнта, пов'язаного з будь-якою змінною манекена, не дуже цікавий, оскільки він перевіряє певний контраст із тим, що ви обираєте в якості базової лінії. Отже, більш інформативним є тест на коефіцієнт ймовірності обмеженої моделі, опускаючи всі фіктивні змінні.
Енді Ш

2
Paging @FrankHarrell ...
відмітка

Це не працює, позначте. :)
кардинал

1
Сором, варто було б :)
відзначте

Відповіді:


13

@ mark999 дав чудову відповідь. Окрім спільного тестування поліномних термінів, ви можете спільно протестувати ("тест фрагмента") будь-якого набору змінних. Припустимо, у вас була модель з конкуруючими колінеарними змінними окружністю трицепса, талії, окружності стегна, усі вимірювання розміру тіла. Щоб отримати загальний тест розміру тіла, ви можете зробити

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

NAtricep, waist, hipR2


1
Дякую за те, що вказав на Френка. Я не знав, що ти можеш це зробити.
mar999

12

Коментар Макрона правильний, як і Енді. Ось приклад.

> 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              

Замість того, щоб розглядати терміни x2та x2^2терміни окремо, "тест фрагмента" - це тест на 2 df, який перевіряє нульову гіпотезу про те, що коефіцієнти цих термінів є і нульовими (я вважаю, що це частіше називають чимось на кшталт "загального лінійного F-тесту" ). Значення р для цього тесту - 0,0037, задане anova(ols1).

Зверніть увагу , що в rmsпакеті, ви повинні визначити x2умови , як pol(x2, 2)для , anova.rms()щоб знати , що вони повинні бути перевірені разом.

anova.rms()зроблять аналогічні тести для змінних предиктора, які представлені у вигляді обмежених кубічних сплайнів, використовуючи, наприклад rcs(x2, 3), та для категоричних змінних провісника. Він також буде включати терміни взаємодії в "шматки".

Якщо ви хотіли зробити тестовий фрагмент для загальних "конкуруючих" змінних прогнозів, як згадується у цитаті, я вважаю, що вам доведеться зробити це вручну, встановивши дві моделі окремо, а потім використовуючи anova(model1, model2). [Редагувати: це неправильно - див. Відповідь Френка Гаррелла.]


2
Xcor(X,X2)=0

Для наочності я думаю, що мене це вчили як "частковий F-тест", де ви перевіряєте 2 чи більше змінних на спільну значимість. Чи покращиться підмножина змінних у вашій моделі порівняно з більш обмеженою моделлю (як і тест коефіцієнта ймовірності). Я прав?
C. Пітерс

@ C.Pieters Я не знаю, чи ти прав, але це звучить розумно.
mark999
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.