我试图根据我的多项式模型预测y变量的预测值。
lumber.predict.plm=lm(lumber.unemployment.women$lumber.1980.2000 ~
scale(lumber.unemployment.women$woman.1980.2000) +
I(scale(lumber.unemployment.women$woman.1980.2000)^2))
xmin=min(lumber.unemployment.women$woman.1980.2000)
xmax=max(lumber.unemployment.women$woman.1980.2000)
predicted.lumber.whole=data.frame(x=seq(xmin, xmax, length.out=500))
predicted.lumber.whole$lumber=predict(lumber.predict.plm,newdata=predicted.lumber.whole,
interval="confidence")
除了最后一个命令之外,所有上述命令都能正常工作。它给出了以下错误 -
predicted.lumber.whole$lumber=predict(lumber.predict.plm,newdata=predicted.lumber.whole,
+ interval="confidence")
#Error in `$<-.data.frame`(`*tmp*`, "lumber", value = c(134.507238798567, :
# replacement has 252 rows, data has 500
#In addition: Warning message:
#'newdata' had 500 rows but variables found have 252 rows
正在执行回归的数据框属性..
str(lumber.unemployment.women)
#'data.frame': 252 obs. of 2 variables:
# $ lumber.1980.2000: num 108.2 109.9 109.6 99.8 97 ...
# $ woman.1980.2000 : num 5.8 5.9 5.7 6.3 6.4 6.5 6.6 6.7 6.3 6.7 ...
为什么预测值取决于我在数据框中的观察数量?
答案 0 :(得分:0)
我认为以下是您的问题,尽管错误消息对我来说有点模糊。以下是代码的简化版本:
L=data.frame(woman=1:100, lumber=1:100+rnorm(100))
L.lm= lm(lumber ~ woman, data=L)
xmin =-20; xmax= 120;
以下是错误,因为原始数据在新数据中没有“x”变量。请注意,上面的lm()
并未自动将其分配给名为“x”的变量。
nd=data.frame(x=seq(xmin, xmax, length.out=500))
predict(L.lm, newdata=nd,interval="confidence")
Error in eval(expr, envir, enclos) : object 'woman' not found
相反,它正在寻找“女人”。所以如果你summary(L.lm)
你会发现系数是“女人”而不是“x”。
以下作为原始数据和新数据包含相同的变量
nd=data.frame(woman=seq(xmin, xmax, length.out=500))
predict(L.lm, newdata=nd,interval="confidence")
fit lwr upr
1 -20.32932 -20.85072 -19.80792
2 -20.04737 -20.56699 -19.52775
3 -19.76542 -20.28327 -19.24757
4 -19.48347 -19.99955 -18.96740
5 -19.20153 -19.71582 -18.68723
6 -18.91958 -19.43210 -18.40705
etc..
ps 只是要明确这也适用于......
L.lm= lm(lumber ~ poly(woman,2), data=L)
表达多项式拟合的更简洁方法。
答案 1 :(得分:0)
刚刚修改了线性模型名称..它工作正常。不知道错误的根本原因!!如果有人能够解释早期错误说明的原因,那将会很棒。修改过的脚本如下。
lumber.predict.plm1=lm(lumber.1980.2000 ~ scale(woman.1980.2000) +
I(scale(woman.1980.2000)^2), data=lumber.unemployment.women)
xmin=min(lumber.unemployment.women$woman.1980.2000)
xmax=max(lumber.unemployment.women$woman.1980.2000)
predicted.lumber.all=data.frame(woman.1980.2000=seq(xmin,xmax,length.out=100))
predicted.lumber.all$lumber=predict(lumber.predict.plm1,newdata=predicted.lumber.all)
> str(predicted.lumber.all)
'data.frame': 100 obs. of 2 variables:
$ woman.1980.2000: num 3.3 3.36 3.42 3.48 3.54 ...
$ lumber : num 195 193 192 190 188 ...