Пошук пристосованих та прогнозованих значень для статистичної моделі


12

Скажімо, у мене є такі дані та я використовую регресійну модель:

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
  1. З точки зору статистики, чи корисне таке підприємство? Чому чи чому б ні?

  2. Як це можна зробити в R? (переглянув імена (md1) і виявив, що я можу витягнути з моделі, але не продовжував цього)

Дякую!


1
Re # 2: stat.ethz.ch/R-manual/R-patched/library/stats/html / ... . Re # 1: корисний для чого? Що ви хочете досягти врешті-решт?
whuber

Корисно сказати, чи модель "передбачувальна" для кожної окремої точки даних. Я хочу переглянути будь-який рядок / id і зможу порівняти справжнє / придатне значення та передбачуване значення, щоб побачити, наскільки воно "правильне".
ATMathew

Якщо ви хочете відсканувати таблицю, щоб побачити, як змінюється фактична відповідь щодо коваріату, я вважаю, що це може бути корисним. Я не розумію вашої термінології. встановлене значення та передбачуване значення повинні бути однаковими. Що має відрізнятися - це спостережуване значення та встановлене значення.
Майкл Р. Черник

2
Можна спробувати щось на кшталт: x = cbind (df, md1 $ fitted.values) назви (x) = c (назви (df), "прогнозовано")
RioRaider

2
Різниці між спостережуваними та встановленими значеннями доступні через residualsкоманду в R. Використовуйте, cbindщоб приєднати їх до початкового фрейму даних.
whuber

Відповіді:


20

Ви повинні бути обережними з об'єктами моделі в Р. Наприклад, хоча пристосовані значення та прогнози даних тренувань повинні бути однаковими у glm()випадку моделі, вони не є однаковими при використанні правильних функцій екстрактора:

R> fitted(md2)
        1         2         3         4         5         6 
0.4208590 0.4208590 0.4193888 0.7274819 0.4308001 0.5806112 
R> predict(md2)
         1          2          3          4          5          6 
-0.3192480 -0.3192480 -0.3252830  0.9818840 -0.2785876  0.3252830

Це тому, що за замовчуванням для predict.glm()повернення прогнозів в масштабі лінійного прогноктора. Для отримання встановлених значень ми хочемо застосувати до цих значень зворотну функцію зв'язку. fitted()робить це для нас, і ми можемо отримати правильні значення також, використовуючи predict():

R> predict(md2, type = "response")
        1         2         3         4         5         6 
0.4208590 0.4208590 0.4193888 0.7274819 0.4308001 0.5806112

Аналогічно з residuals()(або resid()); значення , що зберігаються в md2$residualsє робочими невязки навряд чи то , що ви хочете. resid()Метод дозволяє вказати тип залишкових ви хочете , і має корисне по замовчуванням.

Для glm()моделі щось подібне буде достатньо:

R> data.frame(Age = df$age, Won = df$won, Fitted = fitted(md2))
  Age Won    Fitted
1  18   0 0.4208590
2  18   0 0.4208590
3  23   1 0.4193888
4  50   1 0.7274819
5  19   1 0.4308001
6  39   0 0.5806112

Щось подібне можна зробити для lm()моделі:

R> data.frame(Age = df$age, Income = df$income, Fitted = fitted(md1))
  Age Income    Fitted
1  18      5  7.893273
2  18      3  7.893273
3  23     47 28.320749
4  50      8 -1.389725
5  19      6  7.603179
6  39      5 23.679251
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.