在R中获得图的二次方程项

我需要find在R中绘制的graphics的二次方程项。当我在Excel中执行此操作时,该术语出现在图表上的文本框中,但我不确定如何将其移至单元格供以后使用(适用于需要校准的值)或者实际上如何在R中请求它。如果它在R中是可传递的,那么作为未来计算的对象是否可以存储?

这似乎应该是一个简单的请求,但我找不到任何类似的问题。 非常感谢任何人可以提供这方面的帮助。

所有的答案都提供了你想要做的事情的方面,但是到目前为止,还没有把它整合在一起。 让我们考虑Tom Liptrot的答案:

fit <- lm(speed ~ dist + I(dist^2), cars) 

这给了我们一个在variablesdist具有二次方程的拟合线性模型。 我们使用coef()提取函数提取模型系数:

 > coef(fit) (Intercept) dist I(dist^2) 5.143960960 0.327454437 -0.001528367 

所以你的拟合方程(由于印刷是四舍五入的):

\ 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) } 

我们可以像这样应用这个函数:

 > 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中拟合的所有不同types模型的预测值?

在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 

首先,我们创build一个名为"dist"的组件的新数据框架,其中包含我们想要从模型中获得预测的新距离。 值得注意的是,我们在这个数据框中包含一个与我们创build拟合模型时使用的variables名称相同的variables。 这个新的数据框必须包含所有用来拟合模型的variables,但在这种情况下,我们只有一个variablesdist 。 还要注意的是,我们不需要包含任何关于dist ^ 2的内容。 R会为我们处理。

然后我们使用predict()函数,为它提供我们的拟合模型,并提供刚创build的新数据框架作为参数'newdata' ,给我们新的预测值,这些值与我们之前手工完成的匹配。

我掩饰的是, predict()fitted()实际上是一组函数。 glm()模型等有lm()模型的版本。它们被称为generics函数,其中有几种不同types的对象的方法 (如果你喜欢的话)。 用户通常只需要记住使用fitted()predict()等,而R照顾使用正确的方法为您提供的拟合模型的types。 下面是一些基于R的适用于fitted()generics函数的方法:

 > methods(fitted) [1] fitted.default* fitted.isoreg* fitted.nls* [4] fitted.smooth.spline* Non-visible functions are asterisked 

你可能会得到更多这取决于你已经加载了什么其他的软件包。 *仅仅意味着你不能直接引用这些函数,你必须使用fitted() ,R可以使用那些函数。 请注意,没有lm()对象的方法。 这种types的对象不需要特殊的方法,因此default方法将被使用并且是合适的。

您可以在lm中的forumla中添加一个二次项,以获得您之后的适合度。 你需要围绕你想要的angular度使用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) 

我不认为这是可能的在Excel中,因为他们只提供函数来获得线性回归( SLOPEINTERCEPTLINEST )或指数( GROWTHLOGEST )的系数,虽然你可能有更多的运气通过使用Visual Basic。

至于R你可以使用coef函数提取模型系数:

 mdl <- lm(y ~ poly(x,2,raw=T)) coef(mdl) # all coefficients coef(mdl)[3] # only the 2nd order coefficient 

我想你的意思是你在Excel或R中绘制X和Y值,在Excel中使用“添加趋势线”function。 在R中,可以使用lm函数来为数据拟合一个线性函数,这也给了你“r平方”的条件(参见链接页面中的例子)。

Interesting Posts