Digamos que tengo los siguientes datos y estoy ejecutando un modelo de regresión:
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))
Por un lado, ejecuto un modelo lineal para predecir los ingresos:
md1 = lm(income ~ age + home + home, data=df)
En segundo lugar, ejecuto un modelo logit para predecir la variable ganada:
md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))
Para ambos modelos, me pregunto cómo puedo generar una tabla o marco de datos con la categoría de respuesta del predictor, el valor ajustado y el valor predicho del modelo.
Entonces, para el modelo lineal, algo como:
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
O tal vez debería ser para cada punto de datos. Entonces, para el punto de datos x_i, los valores ajustados y predichos son:
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
Desde un punto de vista estadístico, ¿es útil esta tarea? ¿Por qué o por qué no?
¿Cómo se puede hacer esto en R? (miré los nombres (md1) y encontré lo que puedo extraer del modelo, pero no he pasado de eso)
¡Gracias!
residuals
comando enR
. Usecbind
para unirlos al marco de datos original.Respuestas:
Debe tener un poco de cuidado con los objetos del modelo en R. Por ejemplo, aunque los valores ajustados y las predicciones de los datos de entrenamiento deben ser los mismos en el
glm()
caso del modelo, no son los mismos cuando utiliza las funciones de extracción correctas:Esto se debe a que el valor predeterminado para
predict.glm()
es devolver predicciones en la escala del predictor lineal. Para obtener los valores ajustados, queremos aplicar la inversa de la función de enlace a esos valores.fitted()
hace eso por nosotros, y también podemos obtener los valores correctos usandopredict()
:Del mismo modo con
residuals()
(oresid()
); es poco probable que los valores almacenados enmd2$residuals
los residuos de trabajo sean lo que desea. Elresid()
método le permite especificar el tipo de residuo que desea y tiene un valor predeterminado útil.Para el
glm()
modelo, algo como esto será suficiente:Algo similar se puede hacer para el
lm()
modelo:fuente