多项式数据和R的glm()

时间:2014-02-12 19:26:36

标签: r glm

如何让R&#39的glm()匹配多项式数据?我已经尝试了几次#family; AAA =(link =" BBB")'但我似乎无法得到微不足道的预测。

例如,请帮助R&#39的glm匹配多项式数据

x=seq(-6,6,2)
y=x*x
parabola=data.frame(x,y)
plot(parabola)
model=glm(y~x,dat=parabola)
test=data.frame(x=seq(-5,5,2))
test$y=predict(model,test)
plot(test)

情节(抛物线)看起来像预期的那样,但我可以找到glm()的咒语,这将使情节(测试)看起来是抛物线的。

2 个答案:

答案 0 :(得分:8)

我认为您需要退后一步,开始考虑模型以及如何在R中表示。在您的示例中,yx的二次函数,因此您需要包括模型公式中的xx^2,即作为预测变量,您需要估算xx^2对给定数据的响应的影响。

如果y是高斯的,以模型为条件,那么您可以使用lm()

执行此操作
y ~ x + I(x^2)

y ~ poly(x, 2)

在第一个中,我们将二次项包装在I()中,因为^运算符在R模型公式中具有特殊含义(而不是数学运算符)。后一版本给出了正交多项式,因此xx^2项不会相关,这有助于拟合,但在某些情况下,使用poly()解释系数会比较棘手。

把它们放在一起我们有(注意我向y添加了一些随机错误,以便不能完美地预测它,因为我使用的例子在现实中更常见):

x <- seq(-6 ,6 ,2)
y <- x^2 + rnorm(length(x), sd = 2)
parabola <- data.frame(x = x, y = y)

mod <- lm(y ~ poly(x, 2), data = parabola)

plot(parabola)
lines(fitted(mod) ~ x, data = parabola, col = "red")

制作的情节是:

enter image description here

另一个问题是y是否为高斯?如果y不能为负(即计数),和/或是离散的,则使用lm()建模将是错误的。这就是glm()可能进入的地方,你可以在不需要x^2的情况下拟合曲线(尽管如果数据真的是抛物线,那么x本身就不适合响应),因为数据从线性预测器到响应规模的显式转换。

最好考虑数据的属性和您想要拟合的模型类型,然后在该建模框架内建立多项式的程度,而不是跳过尝试各种咒语来简单地曲线拟合数据

答案 1 :(得分:0)

这场比赛现在很完美。一个稍微有趣的抛物线:

x=seq(-16,16,2)
y= 4*x*x + 10*x + 6
parabola=data.frame(x,y)
plot(parabola)
model=lm(y~poly(x,2),dat=parabola)
summary(model)
test=data.frame(x=seq(-15,15,2))
test$y=predict(model,test)
points(test,pch=3)

业余爱好者(像我一样)可能期望模型的系数为(4,10,6)以匹配4 * x * x + 10 * x + 6

Call:
lm(formula = y ~ poly(x, 2), data = parabola)

Residuals:
       Min         1Q     Median         3Q        Max 
-3.646e-13 -8.748e-14 -3.691e-14  4.929e-14  6.387e-13 

Coefficients:
             Estimate Std. Error   t value Pr(>|t|)    
(Intercept) 3.900e+02  5.192e-14 7.511e+15   <2e-16 ***
poly(x, 2)1 4.040e+02  2.141e-13 1.887e+15   <2e-16 ***
poly(x, 2)2 1.409e+03  2.141e-13 6.581e+15   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.141e-13 on 14 degrees of freedom
Multiple R-squared:      1, Adjusted R-squared:      1 
F-statistic: 2.343e+31 on 2 and 14 DF,  p-value: < 2.2e-16

为什么系数为(390,404,1409)?