Comment calculer manuellement les dfbetas

8

Je suis en train de reproduire ce que la fonction dfbetas()fait dans R .

dfbeta() n'est pas un problème ... Voici un ensemble de vecteurs:

x <- c(0.512, 0.166, -0.142, -0.614, 12.72)
y <- c(0.545, -0.02, -0.137, -0.751, 1.344)

Si j'adapte deux modèles de régression comme suit:

fit1 <- lm(y ~ x)
fit2 <- lm(y[-5] ~ x[-5])

Je vois que l'élimination du dernier point entraîne une pente très différente (ligne bleue - plus raide):

entrez la description de l'image ici

Cela se reflète dans le changement de pente:

fit1$coeff[2] - fit2$coeff[2]
-0.9754245

qui coïncide avec dfbeta(fit1)la cinquième valeur:

   (Intercept)            x
1  0.182291949 -0.011780253
2  0.020129324 -0.001482465
3 -0.006317008  0.000513419
4 -0.207849024  0.019182219
5 -0.032139356 -0.975424544

Maintenant, si je veux standardiser ce changement de pente (obtenir des dfbetas ) et je recourt à:

Williams, DA (1987) Diagnostic de modèle linéaire généralisé utilisant la déviance et les suppressions de cas unique. Statistiques appliquées 36, 181–191

qui je pense peut être une des références dans la documentation R sous le package {stats} . Là, la formule pour dfbetas est:

dfbetas(i,fit)=(b^b^i)SEb^i

Cela pourrait être facilement calculé dans R:

(fit1$coef[2] - fit2$coef[2])/summary(fit2)$coef[4]

rendement: -6.79799

La question est pourquoi je n'obtiens pas la cinquième valeur pour la pente dans:

dfbetas(fit1)

  (Intercept)            x
1  1.06199661  -0.39123009
2  0.06925319  -0.02907481
3 -0.02165967   0.01003539
4 -1.24491242   0.65495527
5 -0.54223793 -93.81415653!

Quelle est la bonne équation pour passer de dfbeta à dfbetas ?

Antoni Parellada
la source

Réponses:

10

DFBETASk(i) est calculé par:

bkbk(i)MSE(i)ckk , pour = 1, 2,. . . , .kp

où est le ème coefficient de régression qui utilise toutes les données et est le même coefficient avec le ème cas supprimé. voici l'erreur quadratique moyenne de la régression où le cas est supprimé et est le ème élément diagonal de la matrice de covariance non mise à l'échelle . bkkbk(i)iMSE(i)ickkk(XX)1

Vous pouvez donc calculer manuellement avec le code R suivant:DFBETASk(i)

numerator<-(fit1$coef[2] - fit2$coef[2])
denominator<-sqrt((summary(fit2)$sigma^2)*diag(summary(fit1)$cov.unscaled)[2])
DFBETAS<-numerator/denominator
DFBETAS
        x 
-93.81416 
StatsStudent
la source
si ce n'est pas évident, p est le nombre de paramètres de régression ou de coefficients. Désolé pour la notation bâclée. ;-)
StatsStudent