O que são testes de chunk?

13

Em resposta a uma pergunta sobre seleção de modelos na presença de multicolinearidade , Frank Harrell sugeriu :

Coloque todas as variáveis ​​no modelo, mas não teste o efeito de uma variável ajustada para os efeitos das variáveis ​​concorrentes ... Os testes de chunk de variáveis ​​concorrentes são poderosos porque variáveis ​​colineares unem forças no teste geral de associação de vários graus de liberdade, em vez de competindo entre si como quando você testa variáveis ​​individualmente.

O que são testes de chunk ? Você pode dar um exemplo de sua aplicação r?

fmark
fonte
3
Eu imagino que isso se refira ao teste de blocos de variáveis ​​por vez, em que toda a colinearidade potencial ocorre dentro de um bloco, o que não afeta testes omnibus, como o teste ou o teste da razão de verossimilhança, mas nunca ouvi o termo " teste de bloco ". F
Macro
2
Uma situação que eu os vi sugerida (e já a fiz) é quando você tem uma série de muitas variáveis ​​dummy mutuamente exclusivas (por exemplo, uma variável independente nominal com muitas categorias potenciais). Um teste de qualquer coeficiente individual associado a uma única variável fictícia não é muito interessante, pois testa um contraste específico com o que você escolher como linha de base. Portanto, um teste mais informativo é o teste da razão de verossimilhança do modelo restrito, omitindo todas as variáveis ​​dummy.
Andy W
2
Paging @FrankHarrell ...
fmark
Isso não funciona, fmark. :)
cardeal
1
Vergonha, que deveria :)
fmark

Respostas:

13

@ mark999 forneceu uma excelente resposta. Além de testar conjuntamente termos polinomiais, você pode testar em conjunto ("teste de bloco") qualquer conjunto de variáveis. Suponha que você tenha um modelo com variáveis ​​colineares concorrentes: circunferência do tríceps, cintura, circunferência do quadril, todas as medidas do tamanho do corpo. Para fazer um teste geral de tamanho do corpo, você pode fazer

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
fonte
1
Obrigado por apontar isso, Frank. Eu não sabia que você poderia fazer isso.
mark999
12

O comentário da macro está correto, assim como o de Andy. Aqui está um exemplo.

> 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              

Em vez de considerar os termos x2e x2^2separadamente, o "teste de chunk" é o teste de 2 df que testa a hipótese nula de que os coeficientes desses termos são zero (acredito que é mais comumente chamado de "teste F linear geral" ) O valor de p para esse teste é o 0,0037 dado por anova(ols1).

Observe que no rmspacote, você precisa especificar os x2termos pol(x2, 2)para anova.rms()saber que eles devem ser testados juntos.

anova.rms()fará testes semelhantes para variáveis ​​preditivas que são representadas como splines cúbicos restritos usando, por exemplo rcs(x2, 3), e para variáveis ​​preditivas categóricas. Também incluirá termos de interação nos "chunks".

Se você quisesse fazer um teste de chunk para variáveis ​​preditivas gerais "concorrentes", como mencionado na citação, acredito que você precisaria fazê-lo manualmente, ajustando os dois modelos separadamente e depois usando anova(model1, model2). [Editar: isso está incorreto - veja a resposta de Frank Harrell.]

mark999
fonte
2
(+1) Também vale a pena notar que testar termos polinomiais individuais pode ser problemático porque, exceto em casos especiais (como quando o preditor,X, é simétrico em torno de zero, cor(X,X2)=0 0), eles são (geralmente muito altamente) colineares com os outros termos polinomiais.
macro
Por uma questão de clareza, acho que me ensinaram isso como um "Teste F Parcial", no qual você testa 2 ou mais variáveis ​​para obter o significado conjunto. Ou se um subconjunto de variáveis ​​em seu modelo melhora em relação ao modelo mais restrito (como um teste de razão de verossimilhança). Estou correcto?
C.Pieters
@ C.Pieters Não sei se você está correto, mas parece razoável.
mark999