¿Qué son las pruebas de fragmentos?

13

En respuesta a una pregunta sobre la selección de modelos en presencia de multicolinealidad , Frank Harrell sugirió :

Ponga todas las variables en el modelo pero no pruebe el efecto de una variable ajustada por los efectos de las variables competidoras ... Las pruebas fragmentarias de las variables competidoras son poderosas porque las variables colineales unen fuerzas en la prueba general de asociación de grado múltiple de libertad, en lugar de compitiendo uno contra el otro como cuando pruebas variables individualmente.

¿Qué son las pruebas de fragmentos ? ¿Puedes dar un ejemplo de su aplicación en r?

fmark
fuente
3
Me imagino que esto se refiere a probar bloques de variables a la vez, donde toda la colinealidad potencial ocurre dentro de un bloque, lo que no afecta las pruebas generales como la prueba o la prueba de razón de probabilidad, pero nunca he escuchado el término " prueba de trozos ". F
Macro
2
Una situación que los he visto sugeridos (y los he hecho yo mismo) es cuando tiene una serie de muchas variables ficticias mutuamente excluyentes (por ejemplo, una variable independiente nominal con muchas categorías potenciales). Una prueba de cualquier coeficiente individual asociado con una sola variable ficticia no es muy interesante, ya que prueba un contraste particular con lo que elija como línea de base. Por lo tanto, una prueba más informativa es la prueba de razón de probabilidad del modelo restringido que omite todas las variables ficticias.
Andy W
2
Paging @FrankHarrell ...
fmark
Eso no funciona, fmark. :)
cardenal
1
La vergüenza, debería :)
fmark

Respuestas:

13

@ mark999 proporcionó una excelente respuesta. Además de probar conjuntamente los términos polinómicos, puede probar conjuntamente ("prueba fragmentaria") cualquier conjunto de variables. Suponga que tiene un modelo con variables colineales en competencia circunferencia de tríceps, cintura, circunferencia de cadera, todas las medidas del tamaño del cuerpo. Para obtener una prueba general del tamaño del cuerpo, puede hacer

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

Puede obtener la misma prueba ajustando un modelo que contenga solo la edad (si no hay NAs tricep, waist, hip) y haciendo la "diferencia en la prueba ". Estas pruebas equivalentes no sufren incluso una colinealidad extrema entre las tres variables.R2

Frank Harrell
fuente
1
Gracias por señalar eso Frank. No sabía que podías hacer eso.
mark999
12

El comentario de Macro es correcto, como el de Andy. Aquí hay un ejemplo.

> 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              

En lugar de considerar los términos x2y por x2^2separado, la "prueba fragmentaria" es la prueba 2-df que prueba la hipótesis nula de que los coeficientes de esos términos son ambos cero (creo que comúnmente se llama algo así como una "prueba F lineal general" ) El valor p para esa prueba es 0.0037 dado por anova(ols1).

Tenga en cuenta que en el rmspaquete, debe especificar los x2términos pol(x2, 2)para anova.rms()saber que deben probarse juntos.

anova.rms()realizará pruebas similares para variables predictoras que se representan como splines cúbicas restringidas utilizando, por ejemplo rcs(x2, 3), y para variables predictoras categóricas. También incluirá términos de interacción en los "fragmentos".

Si quisiera hacer una prueba fragmentaria para variables predictoras "competidoras" generales, como se menciona en la cita, creo que tendría que hacerlo manualmente ajustando los dos modelos por separado y luego usándolos anova(model1, model2). [Editar: esto es incorrecto - ver la respuesta de Frank Harrell.]

mark999
fuente
2
Xcor(X,X2)=0
En aras de la claridad, creo que me enseñaron esto como una "Prueba F parcial" en la que se prueban 2 o más variables para determinar la importancia conjunta. O si un subconjunto de variables en su modelo mejora sobre el modelo más restringido (al igual que una prueba de razón de probabilidad). ¿Estoy en lo correcto?
C. Pieters
@ C.Pieters No sé si tienes razón, pero suena razonable.
mark999