Modelo linear: comparando o poder preditivo de dois métodos diferentes de medição

9

Estou interessado em prever Ye estou estudando diferentes duas técnicas de medição X1e X2. Pode ser, por exemplo, que eu quero prever o sabor de uma banana, medindo quanto tempo ela está sobre a mesa ou medindo o número de manchas marrons na banana.

Quero saber qual das técnicas de medição é melhor, devo escolher executar apenas uma.

Eu posso criar um modelo linear em R:

m1 = lm(Y ~ X1)
m2 = lm(Y ~ X2)

Agora, digamos que X1é um preditor superior do sabor da banana do que X2. Ao calcular o dos dois modelos, o do modelo é claramente maior que o modelo . Antes de escrever um artigo sobre como o método é melhor do que , quero ter algum tipo de indicação de que a diferença não é por acaso, possivelmente na forma de um valor-p.R 2R2R2m1m2X1X2

Como alguém faria isso? Como fazer isso quando estou usando diferentes marcas de banana e mudar para um modelo Linear Mixed Effect que incorpora a marca de banana como um efeito aleatório?

Rodin
fonte
Você poderia esclarecer por que não pode incluir os dois preditores no modelo? No seu caso, X1e X2provavelmente estaria correlacionado, pois as manchas marrons provavelmente aumentam com o aumento do tempo na mesa.
COOLSerdash
Eu sou interessante em testar se X1 ou X2 é o melhor método de medição. Se a inclusão de ambos em um modelo puder responder a essa pergunta, não há problema em fazer isso. Obviamente, ambos estão correlacionados, pois medem a mesma coisa.
Rodin
Eu gostaria de dizer: ao tentar medir o sabor da banana, medir quanto tempo está deitado sobre a mesa é uma maneira melhor de determinar isso do que contar o número de manchas marrons (p <0,05).
Rodin

Respostas:

7

Mais tarde

Uma coisa que quero acrescentar depois de ouvir que você tem modelos lineares de efeito misto: o e o ainda podem ser usados ​​para comparar os modelos. Veja este documento , por exemplo. De outras perguntas semelhantes no site, parece que este documento é crucial. B I CAIC,AICcBIC


Resposta original

O que você basicamente quer é comparar dois modelos não aninhados. A seleção do modelo de Burnham e Anderson e a inferência multimodal discutem isso e recomendam o uso do , ou etc., pois o teste de razão de verossimilhança tradicional é aplicável apenas em modelos aninhados. Eles afirmam explicitamente que os critérios teóricos da informação como etc. não são testes e que a palavra "significativo" deve ser evitada ao relatar os resultados.A I C c B I C A I C , A I C c , B I CAICAICcBICAIC,AICc,BIC

Baseado no presente e este respostas, eu recomendo estas abordagens:

  1. Faça uma matriz de dispersão (SPLOM) do conjunto de dados incluindo smoothers: pairs(Y~X1+X2, panel = panel.smooth, lwd = 2, cex = 1.5, col = "steelblue", pch=16). Verifique se as linhas (os smoothers) são compatíveis com um relacionamento linear. Refine o modelo, se necessário.
  2. Calcule os modelos m1e m2. Faça algumas verificações de modelo (resíduos etc.): plot(m1)e plot(m2).
  3. Calcule o ( corrigido para tamanhos de amostra pequenos) para ambos os modelos e calcule a diferença absoluta entre os dois s. O pacote fornece a função para isso: . Se essa diferença absoluta for menor que 2, os dois modelos são basicamente indistinguíveis. Caso contrário, prefira o modelo com o mais . A I C A I C c A I C cAICcAICAICcR psclAICcabs(AICc(m1)-AICc(m2))AICc
  4. Calcular testes de razão de verossimilhança para modelos não aninhados. O R pacotelmtest possui as funções coxtest(teste de Cox), jtest( teste Davidson-MacKinnon J) e encomptest(teste abrangente de Davidson & MacKinnon).

Algumas reflexões: se as duas medidas de banana são realmente a mesma coisa, ambas podem ser igualmente adequadas para previsão e pode não haver um "melhor" modelo.

Este documento também pode ser útil.

Aqui está um exemplo em R:

#==============================================================================
# Generate correlated variables
#==============================================================================

set.seed(123)

R <- matrix(cbind(
  1   , 0.8 , 0.2,
  0.8 , 1   , 0.4,
  0.2 , 0.4 , 1),nrow=3) # correlation matrix
U <- t(chol(R))
nvars <- dim(U)[1]
numobs <- 500
set.seed(1)
random.normal <- matrix(rnorm(nvars*numobs,0,1), nrow=nvars, ncol=numobs);
X <- U %*% random.normal
newX <- t(X)
raw <- as.data.frame(newX)
names(raw) <- c("response","predictor1","predictor2")

#==============================================================================
# Check the graphic
#==============================================================================

par(bg="white", cex=1.2)
pairs(response~predictor1+predictor2, data=raw, panel = panel.smooth,
      lwd = 2, cex = 1.5, col = "steelblue", pch=16, las=1)

SPLOM

As mães confirmam os relacionamentos lineares. Isso foi planejado, é claro.

#==============================================================================
# Calculate the regression models and AICcs
#==============================================================================

library(pscl)

m1 <- lm(response~predictor1, data=raw)
m2 <- lm(response~predictor2, data=raw)

summary(m1)

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.004332   0.027292  -0.159    0.874    
predictor1   0.820150   0.026677  30.743   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.6102 on 498 degrees of freedom
Multiple R-squared:  0.6549,    Adjusted R-squared:  0.6542 
F-statistic: 945.2 on 1 and 498 DF,  p-value: < 2.2e-16

summary(m2)

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.01650    0.04567  -0.361    0.718    
predictor2   0.18282    0.04406   4.150 3.91e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.021 on 498 degrees of freedom
Multiple R-squared:  0.03342,   Adjusted R-squared:  0.03148 
F-statistic: 17.22 on 1 and 498 DF,  p-value: 3.913e-05

AICc(m1)
[1] 928.9961

AICc(m2)
[1] 1443.994

abs(AICc(m1)-AICc(m2))
[1] 514.9977

#==============================================================================
# Calculate the Cox test and Davidson-MacKinnon J test
#==============================================================================

library(lmtest)

coxtest(m1, m2)

Cox test

Model 1: response ~ predictor1
Model 2: response ~ predictor2
                Estimate Std. Error   z value  Pr(>|z|)    
fitted(M1) ~ M2   17.102     4.1890    4.0826 4.454e-05 ***
fitted(M2) ~ M1 -264.753     1.4368 -184.2652 < 2.2e-16 ***

jtest(m1, m2)

J test

Model 1: response ~ predictor1
Model 2: response ~ predictor2
                Estimate Std. Error t value  Pr(>|t|)    
M1 + fitted(M2)  -0.8298   0.151702  -5.470 7.143e-08 ***
M2 + fitted(M1)   1.0723   0.034271  31.288 < 2.2e-16 ***

AICcm1R2

R2,AICBICR2

COOLSerdash
fonte
R2AICc
R2,AICBICR2AICc
Você não precisa se desculpar; Vejo isso como uma boa notícia sempre que diferentes métodos sensíveis implicam a mesma conclusão!
Nick Cox
Excelente. O teste de Cox é exatamente o que eu queria. Infelizmente, meus modelos são modelos lineares de efeito misto equipados com o pacote lme4, que não são suportados diretamente pelo lmtestpacote. Antes de mergulhar na literatura escrita sobre testes cox-like com LMEs, alguém conhece um pacote R prontamente disponível para fazer isso?
Rodin
@ Rodin Não, eu não conheço nenhum Rpacote que possa fazer isso. Talvez este post possa fornecer mais orientações.
COOLSerdash
3

R2

O exemplo da banana é presumivelmente ridículo aqui, mas eu não esperaria que os ajustes lineares funcionassem bem ...

A maquinaria inferencial transportada por outras pessoas em resposta é algo de beleza intelectual, mas às vezes você não precisa de uma marreta de última geração para quebrar uma noz. Às vezes, parece que qualquer pessoa que publique naquela noite é mais escura que o dia sempre terá alguém perguntando "Você testou isso formalmente? Qual é o seu valor-P?".

Nick Cox
fonte
AIC
1
É sempre bom dar um passo para trás e lembrar isso para marcar com +1, mas estou pensando se isso pode ser apenas o caso estranho, onde isso não é particularmente útil. É realmente muito provável que um modelo seja claramente melhor que o outro quando os dois preditores experimentais são medidas diferentes da mesma coisa, em oposição a variáveis ​​substancialmente diferentes? Deixando as bananas de lado por um minuto, pense em questionários ligeiramente diferentes ou em uma régua versus um telêmetro a laser. Uma medida deve ser extremamente deficiente para que a não linearidade apareça em um caso, mas não no outro.
Gala
2
R2
Concordo que a melhor maneira é apresentar claramente os dados e os ajustes dos modelos. Dessa forma, o leitor pode decidir por si próprio se aceita alguma afirmação sobre alguém ser melhor ou não. No entanto, receio que os revisores exijam um teste de significância, puramente por uma reação brusca. O comentário de Gaël sobre noite e dia não está tão distante.
Rodin
1
Isso me foi noite e dia ....
Nick Cox
2

Faça um teste de Cox para modelos não aninhados.

y <- rnorm( 10 )
x1 <- y + rnorm( 10 ) / 2
x2 <- y + rnorm( 10 )

lm1 <- lm( y ~ x1 )
lm2 <- lm( y ~ x2 )

library( lmtest )

coxtest( lm1, lm2 )
?coxtest

(você encontrará referências para outro teste).

Veja também este comentário e esta pergunta . Em especial, considere usar o AIC / BIC.

janeiro
fonte