所有的答案都提供了你想要做的事情的方方面面,但到目前为止还没有将它们全部结合在一起.让我们来看看Tom Liptrot的答案示例:
fit <- lm(speed ~ dist + I(dist^2), cars)
Run Code Online (Sandbox Code Playgroud)
这给了我们一个拟合的线性模型,其变量具有二次方程dist.我们使用coef()提取器函数提取模型系数:
> coef(fit)
(Intercept) dist I(dist^2)
5.143960960 0.327454437 -0.001528367
Run Code Online (Sandbox Code Playgroud)
所以您的拟合方程(由于打印而变圆):
\ hat {speed} = 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)
}
Run Code Online (Sandbox Code Playgroud)
我们可以像这样应用这个函数:
> 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
Run Code Online (Sandbox Code Playgroud)
对于distance(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
Run Code Online (Sandbox Code Playgroud)
如果您想将模型方程应用于一些不适合模型的新数据值,那么我们需要从模型中获得预测.这是使用该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
Run Code Online (Sandbox Code Playgroud)
首先,我们创建一个新的数据框"dist",其中包含一个名为的组件,其中包含我们希望从模型中获取预测的新距离.值得注意的是,我们在此数据框中包含一个变量,该变量与我们创建拟合模型时使用的变量具有相同的名称.这个新数据框必须包含用于拟合模型的所有变量,但在这种情况下,我们只有一个变量,dist.另请注意,我们不需要包含有关dist^ 2的任何内容.R将为我们处理.
然后我们使用predict()函数,给它我们拟合的模型并提供刚创建的新数据框作为参数'newdata',给出我们新的预测值,这些值与我们之前手工完成的值相匹配.
我掩盖的东西是,predict()并且fitted()实际上是一整套功能.有lm()模型的版本,glm()模型等.它们被称为通用函数,有几种不同类型的对象的方法(如果你喜欢的版本).用户通常只需要记住使用fitted()或predict()等等,而R负责使用您提供的适合型号的正确方法.以下是基本R中可用于fitted()泛型函数的一些方法:
> methods(fitted)
[1] fitted.default* fitted.isoreg* fitted.nls*
[4] fitted.smooth.spline*
Non-visible functions are asterisked
Run Code Online (Sandbox Code Playgroud)
根据您加载的其他软件包,您可能会得到更多.该*只是意味着你不能直接引用这些功能,你必须使用fitted()和R工程以使用的那些.请注意,没有lm()对象的方法.这种类型的对象不需要特殊的方法,因此该default方法将被使用并且是合适的.
你可以在lum的forumla中添加一个二次项,以获得你想要的拟合.你需要在你想要平方的术语周围使用I(),如下例所示:
plot(speed ~ dist, cars)
fit1 = lm(speed ~ dist, cars) #fits a linear model
abline(fit1) #puts line on plot
fit2 = lm(speed ~ I(dist^2) + dist, cars) #fits a model with a quadratic term
fit2line = predict(fit2, data.frame(dist = -10:130))
lines(-10:130 ,fit2line, col=2) #puts line on plot
Run Code Online (Sandbox Code Playgroud)
要从这个用途中获得系数:
coef(fit2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5894 次 |
| 最近记录: |