Disons que j'ai les données suivantes et que j'utilise un modèle de régression:
df=data.frame(income=c(5,3,47,8,6,5),
won=c(0,0,1,1,1,0),
age=c(18,18,23,50,19,39),
home=c(0,0,1,0,0,1))
D'une part, je lance un modèle linéaire pour prédire le revenu:
md1 = lm(income ~ age + home + home, data=df)
Deuxièmement, je lance un modèle logit pour prédire la variable won:
md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))
Pour les deux modèles, je me demande comment générer un tableau ou un bloc de données avec la catégorie de réponse du prédicteur, la valeur ajustée et la valeur prédite du modèle.
Donc, pour le modèle linéaire, quelque chose comme:
age fitted_income predicted_income
18 3 5
23 3 3
50 4 2
19 5 5
39 6 4
home fitted_income predicted_income
0 5 6
1 3 9
Ou peut-être que cela devrait être pour chaque point de données. Ainsi, pour le point de données x_i, les valeurs ajustées et prédites sont:
id age fitted_income predicted_income
1 18 3 5
2 23 3 3
3 50 4 2
4 19 5 5
5 39 6 4
D'un point de vue statistique, une telle entreprise est-elle utile? Pourquoi ou pourquoi pas?
Comment cela peut-il être fait dans R? (regarda les noms (md1) et trouva ce que je pouvais tirer du modèle, mais je ne suis pas allé au-delà)
Merci!
residuals
commande dansR
. Utilisez-lescbind
pour les joindre à la trame de données d'origine.Réponses:
Vous devez être un peu prudent avec les objets du modèle dans R. Par exemple, alors que les valeurs ajustées et les prédictions des données d'apprentissage doivent être les mêmes dans le
glm()
cas du modèle, elles ne sont pas les mêmes lorsque vous utilisez les fonctions d'extraction correctes:En effet, la valeur par défaut de
predict.glm()
est de renvoyer des prédictions à l'échelle du prédicteur linéaire. Pour obtenir les valeurs ajustées, nous voulons appliquer l'inverse de la fonction de lien à ces valeurs.fitted()
fait cela pour nous, et nous pouvons également obtenir les valeurs correctes en utilisantpredict()
:De même avec
residuals()
(ouresid()
); les valeurs stockées dansmd2$residuals
sont les résidus de travail ne sont probablement pas ce que vous voulez. Laresid()
méthode vous permet de spécifier le type de résidu que vous souhaitez et possède une valeur par défaut utile.Pour le
glm()
modèle, quelque chose comme ça suffira:Quelque chose de similaire peut être fait pour le
lm()
modèle:la source