Допустим, у меня есть следующие данные и я использую модель регрессии:
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))
С одной стороны, я использую линейную модель для прогнозирования доходов:
md1 = lm(income ~ age + home + home, data=df)
Во-вторых, я запускаю модель logit для прогнозирования выигрышной переменной:
md2 = glm(factor(won) ~ age + home, data=df, family=binomial(link="logit"))
Для обеих моделей мне интересно, как я могу сгенерировать таблицу или фрейм данных с категорией ответа предиктора, подогнанным значением и прогнозируемым значением модели.
Так что для линейной модели что-то вроде:
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
Или, возможно, это должно быть для каждой точки данных. Таким образом, для точки данных x_i подогнанные и прогнозируемые значения:
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
С точки зрения статистики, полезно ли такое начинание? Почему или почему нет?
Как это можно сделать в R? (посмотрел на имена (md1) и нашел то, что я могу извлечь из модели, но не прошел дальше)
Спасибо!
residuals
команду вR
. Используйте,cbind
чтобы присоединить их к исходному фрейму данных.Ответы:
Вы должны быть немного осторожнее с объектами модели в R. Например, хотя подогнанные значения и прогнозы обучающих данных должны быть одинаковыми в
glm()
модельном случае, они не совпадают, когда вы используете правильные функции экстрактора:Это связано с тем, что по умолчанию для
predict.glm()
возвращаются прогнозы в масштабе линейного предиктора. Чтобы получить подогнанные значения, мы хотим применить обратную функцию связи к этим значениям.fitted()
делает это для нас, и мы можем получить правильные значения, используяpredict()
также:Аналогично с
residuals()
(илиresid()
); значения , хранящиеся вmd2$residuals
являются рабочими невязки вряд ли то , что вы хотите. Этотresid()
метод позволяет указать желаемый тип остатка и имеет полезное значение по умолчанию.Для
glm()
модели будет примерно так:Нечто подобное можно сделать для
lm()
модели:источник