Modèle linéaire: comparer la puissance prédictive de deux méthodes de mesure différentes

9

Je m'intéresse à la prévision Yet j'étudie deux techniques de mesure X1et X2. Il se pourrait, par exemple, que je veuille prédire la saveur d'une banane, soit en mesurant depuis combien de temps elle repose sur la table, soit en mesurant le nombre de taches brunes sur la banane.

Je veux savoir laquelle des techniques de mesure est la meilleure, si je choisis d'en effectuer une seule.

Je peux créer un modèle linéaire dans R:

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

Maintenant, disons que X1c'est un prédicteur supérieur de la saveur de la banane X2. Lors du calcul de laR2 des deux modèles, le R2du modèle m1est nettement supérieur au modèle m2. Avant d'écrire un article sur la façon dont la méthode X1est meilleure que X2, je veux avoir une sorte d'indication que la différence n'est pas par hasard, peut-être sous la forme d'une valeur de p.

Comment procéder? Comment le faire lorsque j'utilise différentes marques de bananes et passer à un modèle à effet mixte linéaire qui incorpore la marque de banane comme un effet aléatoire?

Rodin
la source
Pourriez-vous expliquer pourquoi vous ne pouvez pas inclure les deux prédicteurs dans le modèle? Dans votre cas, X1et X2serait probablement corrélé, car les taches brunes augmentent probablement avec l'augmentation du temps allongé sur la table.
COOLSerdash
Je suis intéressant de tester si X1 ou X2 est la meilleure méthode de mesure. Si les inclure dans un même modèle peut répondre à cette question, cela ne pose aucun problème. De toute évidence, ils sont tous deux corrélés car ils mesurent la même chose.
Rodin
Je voudrais dire: lorsque vous essayez de mesurer le goût de la banane, mesurer depuis combien de temps elle repose sur la table est une meilleure façon de déterminer cela que de compter le nombre de taches brunes (p <0,05).
Rodin

Réponses:

7

Plus tard

Une chose que je veux ajouter après avoir entendu que vous avez des modèles d'effets mixtes linéaires: AIC,AICc et BICpeut encore être utilisé pour comparer les modèles. Voir cet article , par exemple. D'après d'autres questions similaires sur le site, il semble que ce document est crucial.


Réponse originale

Ce que vous voulez essentiellement, c'est comparer deux modèles non imbriqués. Burnham and Anderson Model selection and multimodel inference discuter this and recommend using theAIC, AICc ou BICetc., car le test traditionnel du rapport de vraisemblance ne s'applique qu'aux modèles imbriqués. Ils déclarent explicitement que les critères théoriques de l’information tels queAIC,AICc,BICetc. ne sont pas des tests et que le mot «significatif» doit être évité lors de la communication des résultats.

Sur la base de cela et de ces réponses, je recommande ces approches:

  1. Faire une matrice de nuages de points (de SPLOM) de votre ensemble de données , y compris lisseurs: pairs(Y~X1+X2, panel = panel.smooth, lwd = 2, cex = 1.5, col = "steelblue", pch=16). Vérifiez si les lignes (les lissoirs) sont compatibles avec une relation linéaire. Affinez le modèle si nécessaire.
  2. Calculez les modèles m1et m2. Faites quelques vérifications du modèle (résidus, etc.): plot(m1)et plot(m2).
  3. Calculez le AICc (AIC corrigé pour les petits échantillons) pour les deux modèles et calculer la différence absolue entre les deux AICcs. Le R packagepscl fournit la fonction AICcpour cela: abs(AICc(m1)-AICc(m2)). Si cette différence absolue est inférieure à 2, les deux modèles sont fondamentalement indiscernables. Sinon, préférez le modèle avec le plus basAICc.
  4. Calculer les tests de rapport de vraisemblance pour les modèles non imbriqués. Le R packagelmtest a les fonctions coxtest(test Cox), jtest( test Davidson-MacKinnon J) et encomptest(test englobant Davidson & MacKinnon).

Quelques réflexions: Si les deux mesures de la banane mesurent vraiment la même chose, elles peuvent toutes deux être également adaptées à la prédiction et il pourrait ne pas y avoir de "meilleur" modèle.

Ce document pourrait également être utile.

En voici un exemple 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

Les lissoirs confirment les relations linéaires. C'était prévu, bien sûr.

#==============================================================================
# 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 ***

le AICcdu premier modèle m1est nettement plus faible et laR2 est beaucoup plus élevé.

Important: dans les modèles linéaires de complexité égale et de distribution d'erreur gaussienne ,R2,AIC et BICdevrait donner les mêmes réponses (voir cet article ). Dans les modèles non linéaires , l'utilisation deR2pour les performances du modèle (qualité de l'ajustement) et la sélection du modèle doivent être évitées: voir cet article et ce document , par exemple.

COOLSerdash
la source
Il s'agit d'une réponse pratique détaillée qui explique bien ce qui pourrait être fait. Ce qui aurait été encore plus frappant aurait été un exemple dans lequel les diagrammes de dispersion,R2 et AICcconduire à des réponses différentes .
Nick Cox
@NickCox Ce serait en effet intéressant! Si les modèles sont linéaires et de complexité égale, et que les erreurs ont une distribution gaussienne,R2,AIC et BICdevrait donner les mêmes réponses. La vérité est que je ne sais pas comment produire un exemple ad hoc où les nuages ​​de points,R2 et AICcconduire à des réponses différentes (peut-être que quelqu'un pourrait m'aider?). Désolé.
COOLSerdash
Vous n'avez pas besoin de vous excuser; Je vois cela comme une bonne nouvelle chaque fois que différentes méthodes sensées impliquent la même conclusion!
Nick Cox
Excellent. Le test de Cox est exactement ce que je voulais. Malheureusement, mes modèles sont des modèles à effets mixtes linéaires équipés du package lme4, qui ne sont pas directement pris en charge par le lmtestpackage. Avant de me plonger dans la littérature écrite sur les tests de type cox avec les LME, quelqu'un connaît-il un package R facilement disponible pour le faire?
Rodin
@Rodin Non, je ne connais aucun Rpaquet qui pourrait faire ça. Peut - être que ce post peut vous donner des conseils supplémentaires.
COOLSerdash
3

Il y a une bonne réponse du 19ème siècle en risque de négligence. Pour comparer deux ajustements linéaires différents, tracez les données et les lignes ajustées et réfléchissez à ce que vous voyez. Il est fort probable qu'un modèle sera nettement meilleur, et cela ne signifie pas nécessairement plusR2. Par exemple, il est possible qu'un modèle linéaire soit qualitativement erroné dans l'un ou l'autre cas. Encore mieux, les données et l'ajustement peuvent suggérer un meilleur modèle. Si les deux modèles semblent à peu près bons ou mauvais, c'est une autre réponse.

L'exemple de la banane est vraisemblablement facétieux ici, mais je ne m'attendrais pas du tout à ce que les ajustements en ligne fonctionnent bien ...

La machinerie inférentielle déployée par d'autres en réponse est une chose de beauté intellectuelle, mais parfois vous n'avez pas besoin d'un marteau de pointe pour casser une noix. Parfois, il semble que quiconque publie ce soir-là est plus sombre que le jour aurait toujours quelqu'un demander "Avez-vous testé cela formellement? Quelle est votre valeur P?".

Nick Cox
la source
+1, bons points. J'ai explicitement déclaré qu'il ne fallait pas utiliser de tests de signification pour traiterAICet pareil.
COOLSerdash
1
Il est toujours bon de prendre du recul et de s'en souvenir, alors +1, mais je me demande si cela pourrait en fait être le cas étrange où cela n'est pas particulièrement utile. Est-il vraiment très probable qu'un modèle soit nettement meilleur que l'autre lorsque les deux prédicteurs provisoires sont des mesures différentes de la même chose par opposition à des variables substantiellement différentes? Laissant de côté les bananes pendant une minute, pensez à des questionnaires légèrement différents ou à une règle par rapport à un télémètre laser. Une mesure doit être extrêmement déficiente pour que la non-linéarité apparaisse dans un cas mais pas dans l'autre.
Gala du
2
Je suis d' accord, mais je suis heureux d'étendre ma réponse à des parcelles résiduelles, etc. De manière plus générale, aucune façon de juger cela pourrait courir dans la même objection, par exemple , les tests de signification pourrait ne pas rejeter des performances égales,R2 pourrait être pratiquement identique. Ayant publié sur la comparaison de différentes méthodes de mesure avec des données réelles, j'affirme que le choix de la méthode trouvera généralement la meilleure méthode, mais si deux méthodes semblent à peu près aussi bonnes, alors c'est la réponse, pas un problème insoluble conduisant à une angoisse méthodologique.
Nick Cox
Je suis d'accord que la meilleure façon est de présenter clairement les données et les ajustements par les modèles. De cette façon, le lecteur peut décider lui-même d'accepter ou non une déclaration selon laquelle une personne est meilleure. Cependant, je crains que les examinateurs ne demandent un test de signification, purement par réaction instinctive. Le commentaire de Gaël sur la nuit et le jour n'est pas si loin.
Rodin
1
C'était moi nuit et jour ....
Nick Cox
2

Faites un test de Cox pour les modèles non imbriqués.

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

(vous trouverez des références à d'autres tests).

Voir aussi ce commentaire et cette question . En particulier, pensez à utiliser AIC / BIC.

janvier
la source