我需要找到我在R中绘制的图形的二次方程项。当我在excel中这样做时,该项出现在图表上的文本框中,但我不确定如何将其移动到单元格中以供后续使用(以应用于需要校准的值),或者实际上如何在R中请求它。如果它在R中是可调用的,它是否可以作为对象保存以用于将来的计算?
这在R中看起来应该是一个简单的请求,但我找不到任何类似的问题。非常感谢任何人在这方面能提供的任何帮助。
发布于 2010-11-05 00:24:16
所有的答案都提供了你想要做的事情的方方面面,但到目前为止没有把所有的事情都放在一起。让我们考虑一下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 *距离)+ (-0.001528367 *距离^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()和fitted()实际上是一组完整的函数。有针对lm()模型、针对glm()模型等的版本。它们被称为泛型函数,具有针对几种不同类型对象的方法(如果您喜欢,可以使用不同版本)。您,即用户,通常只需要记住使用fitted()或predict()等,而R则负责为您提供的拟合模型类型使用正确的方法。以下是base R中可用于fitted()泛型函数的一些方法:
> methods(fitted)
[1] fitted.default* fitted.isoreg* fitted.nls*
[4] fitted.smooth.spline*
Non-visible functions are asterisked根据您加载的其他包,您可能会得到更多。*只是意味着你不能直接引用这些函数,你必须使用fitted(),R会决定使用哪个函数。注意,lm()对象没有一个方法。这种类型的对象不需要特殊的方法,因此使用default方法是合适的。
发布于 2010-11-04 23:31:44
您可以在lm的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要从该使用中获取系数,请执行以下操作:
coef(fit2)发布于 2010-11-04 23:51:02
我认为这在Excel中是不可能的,因为它们只提供了获得线性回归系数(SLOPE,INTERCEPT,LINEST)或指数回归系数(GROWTH,LOGEST)的函数,尽管使用Visual Basic可能会更幸运。
对于R,您可以使用coef函数提取模型系数:
mdl <- lm(y ~ poly(x,2,raw=T))
coef(mdl) # all coefficients
coef(mdl)[3] # only the 2nd order coefficienthttps://stackoverflow.com/questions/4097831
复制相似问题