查找统计模型的拟合值和预测值

机器算法验证 r
2022-02-03 09:50:45

假设我有以下数据并且正在运行回归模型:

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 模型来预测 won 变量:

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个回答

您必须对 R 中的模型对象有点小心。例如,虽然在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