所有的答案都提供了您似乎想做的事情的各个方面,但到目前为止还没有将它们全部整合在一起。让我们考虑一下 Tom Liptrot 的答案示例:
fit <- lm(speed ~ dist + I(dist^2), cars)
这为我们提供了一个拟合线性模型,变量为二次dist
。我们使用以下方法提取模型系数coef()
提取器功能:
> coef(fit)
(Intercept) dist I(dist^2)
5.143960960 0.327454437 -0.001528367
所以你的拟合方程(由于打印而进行四舍五入):
\hat{速度} = 5.143960960 + (0.327454437 * dist) + (-0.001528367 * dist^2)
(其中 \hat{speed} 是响应速度的拟合值)。
如果您想将这个拟合方程应用于某些数据,那么我们可以编写自己的函数来完成它:
myfun <- function(newdist, model) {
coefs <- coef(model)
res <- coefs[1] + (coefs[2] * newdist) + (coefs[3] * newdist^2)
return(res)
}
我们可以像这样应用这个函数:
> myfun(c(21,3,4,5,78,34,23,54), fit)
[1] 11.346494 6.112569 6.429325 6.743024 21.386822 14.510619 11.866907
[8] 18.369782
对于一些新的距离值(dist
),这就是你想要从 Q 中做的事情。但是,在 R 中,我们通常不会做这样的事情,因为,为什么用户必须知道如何从所有不同类型形成拟合值或预测值可以在 R 中安装的模型吗?
在 R 中,我们使用标准方法和提取器函数。在这种情况下,如果您想将 Excel 显示的“方程”应用于所有数据以获得此回归的拟合值,在 R 中我们将使用fitted()
功能:
> fitted(fit)
1 2 3 4 5 6 7 8
5.792756 8.265669 6.429325 11.608229 9.991970 8.265669 10.542950 12.624600
9 10 11 12 13 14 15 16
14.510619 10.268988 13.114445 9.428763 11.081703 12.122528 13.114445 12.624600
17 18 19 20 21 22 23 24
14.510619 14.510619 16.972840 12.624600 14.951557 19.289106 21.558767 11.081703
25 26 27 28 29 30 31 32
12.624600 18.369782 14.057455 15.796751 14.057455 15.796751 17.695765 16.201008
33 34 35 36 37 38 39 40
18.688450 21.202650 21.865976 14.951557 16.972840 20.343693 14.057455 17.340416
41 42 43 44 45 46 47 48
18.038887 18.688450 19.840853 20.098387 18.369782 20.576773 22.333670 22.378377
49 50
22.430008 21.93513
如果您想将模型方程应用于一些未用于拟合模型的新数据值,那么我们需要从模型中获取预测。这是使用以下方法完成的predict()
功能。使用我插入的距离myfun
如上所述,这就是我们以更以 R 为中心的方式做到这一点的方式:
> newDists <- data.frame(dist = c(21,3,4,5,78,34,23,54))
> newDists
dist
1 21
2 3
3 4
4 5
5 78
6 34
7 23
8 54
> predict(fit, newdata = newDists)
1 2 3 4 5 6 7 8
11.346494 6.112569 6.429325 6.743024 21.386822 14.510619 11.866907 18.369782
首先,我们创建一个新的数据框,其组件名为"dist"
,包含我们想要从模型中获得预测的新距离。值得注意的是,我们在此数据框中包含一个与创建拟合模型时使用的变量同名的变量。这个新数据框必须包含用于拟合模型的所有变量,但在这种情况下我们只有一个变量,dist
。另请注意,我们不需要包含任何有关dist
^2。 R 将为我们处理这个问题。
然后我们使用predict()
函数,给它我们的拟合模型并提供刚刚创建的新数据框作为参数'newdata'
,为我们提供新的预测值,该值与我们之前手动预测的值相匹配。
我掩盖的一点是predict()
and fitted()
实际上是一整组函数。有以下版本lm()
模型,用于glm()
模型等。它们被称为generic函数,与methods(如果您愿意的话,可以提供版本)适用于几种不同类型的对象。你这个用户一般只需要记住使用fitted()
or predict()
等等,而 R 负责针对您提供的拟合模型类型使用正确的方法。以下是基本 R 中可用的一些方法fitted()
通用函数:
> methods(fitted)
[1] fitted.default* fitted.isoreg* fitted.nls*
[4] fitted.smooth.spline*
Non-visible functions are asterisked
根据您加载的其他软件包,您可能会获得更多。这*
只是意味着你不能直接引用这些函数,你必须使用fitted()
R 计算出要使用哪一个。请注意,没有方法lm()
对象。这种类型的对象不需要特殊的方法,因此default
方法将被使用并且是合适的。