J'utilise rlm dans le package R MASS pour régresser un modèle linéaire multivarié. Cela fonctionne bien pour un certain nombre d'échantillons, mais j'obtiens des coefficients quasi nuls pour un modèle particulier:
Call: rlm(formula = Y ~ X1 + X2 + X3 + X4, data = mymodel, maxit = 50, na.action = na.omit)
Residuals:
Min 1Q Median 3Q Max
-7.981e+01 -6.022e-03 -1.696e-04 8.458e-03 7.706e+01
Coefficients:
Value Std. Error t value
(Intercept) 0.0002 0.0001 1.8418
X1 0.0004 0.0000 13.4478
X2 -0.0004 0.0000 -23.1100
X3 -0.0001 0.0002 -0.5511
X4 0.0006 0.0001 8.1489
Residual standard error: 0.01086 on 49052 degrees of freedom
(83 observations deleted due to missingness)
A titre de comparaison, ce sont les coefficients calculés par lm ():
Call:
lm(formula = Y ~ X1 + X2 + X3 + X4, data = mymodel, na.action = na.omit)
Residuals:
Min 1Q Median 3Q Max
-76.784 -0.459 0.017 0.538 78.665
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.016633 0.011622 -1.431 0.152
X1 0.046897 0.004172 11.240 < 2e-16 ***
X2 -0.054944 0.002184 -25.155 < 2e-16 ***
X3 0.022627 0.019496 1.161 0.246
X4 0.051336 0.009952 5.159 2.5e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 2.574 on 49052 degrees of freedom
(83 observations deleted due to missingness)
Multiple R-squared: 0.0182, Adjusted R-squared: 0.01812
F-statistic: 227.3 on 4 and 49052 DF, p-value: < 2.2e-16
L'intrigue lm ne montre aucune valeur aberrante particulièrement élevée, telle que mesurée par la distance de Cook:
ÉDITER
Pour référence et après confirmation des résultats sur la base de la réponse fournie par Macro, la commande R pour définir le paramètre de réglage k
, dans l'estimateur Huber est ( k=100
dans ce cas):
rlm(y ~ x, psi = psi.huber, k = 100)
r
multiple-regression
robust
Robert Kubrick
la source
la source
rlm
fonction de pondération rejette presque toutes les observations. Êtes-vous sûr que c'est le même Y dans les deux régressions? (Juste vérification ...) Essayezmethod="MM"
votrerlm
appel, puis essayez (si cela échoue)psi=psi.huber(k=2.5)
(2.5 est arbitraire, juste plus grand que le 1.345 par défaut) qui répartit lalm
région semblable à la fonction de poids.Réponses:
La différence est qu'elleM
rlm()
s'adapte aux modèles en utilisant votre choix d'un certain nombre d' estimateurs différents , tout en utilisant des moindres carrés ordinaires.lm()
en fonction de , où est la ème réponse, et est les prédicteurs de l'individu . Les moindres carrés en sont un cas particulier où Cependant, le paramètre par défaut pour lequel vous semblez utiliser est l' estimateur Huber , qui utiliseβ Yi i Xi i
rlm()
où est une constante. La valeur par défaut est . Ces deux estimateurs minimisent des critères différents, il n'est donc pas surprenant que les estimations soient différentes.k k=1.345
rlm()
Edit: D'après le tracé QQ montré ci-dessus, il semble que vous ayez une distribution d'erreur très longue. C'est le genre de situation pour laquelle l'estimateur M de Huber est conçu et, dans cette situation, peut donner des estimations très différentes:
Lorsque les erreurs sont normalement distribuées, les estimations seront assez similaires car, sous la distribution normale, la plupart de la fonction de Huber tombera dans la situation , ce qui équivaut aux moindres carrés. Dans la situation à longue queue que vous avez, beaucoup tombent dans la situation , qui est une dérogation à l'OLS, ce qui expliquerait l'écart.ρ |x|<k |x|>k
la source
psi.huber
lm
rlm