使用数据框
x
Date Val
1/1/2012 7
2/1/2012 9
3/1/2012 20
4/1/2012 24
5/1/2012 50
a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
a <- data.frame(a)
x.lm <- lm(x$Val ~ x$Date)
x.pre<-predict(x.lm, newdata=a)
我收到此错误:
Warning message:
'newdata' had 5 rows but variable(s) found have 29 rows
我做错了什么?
这是输出输出:
dput(x)
structure(list(Date = structure(c(14610, 14641, 14669, 14700,
14730, 14761, 14791, 14822, 14853, 14883, 14914, 14944, 14975,
15006, 15034, 15065, 15095, 15126, 15156, 15187, 15218, 15248,
15279, 15309, 15340, 15371, 15400, 15431, 15461), class = "Date"),
Val = c(45, 51, 56, 56, 59, 60, 60, 60, 64, 65, 75, 73, 74,
80, 87, 91, 92, 96, 109, 108, 123, 129, 133, 143, 127, 127,
123, 121, 130)), .Names = c("Date", "Val"), row.names = c(NA,
29L), class = "data.frame")
答案 0 :(得分:10)
存储在x.lm
模型中的变量名称引用x
数据帧。 a
中没有相同名称的变量,因此它将再次使用来自x
的那些29,这可能不是您想要的,因此警告。您可以执行以下操作以始终在模型中使用名为Date
的非限定变量:
a <- seq(as.Date(tail(x, 1)$Date), by="month", length=5)
a <- data.frame(Date = a)
x.lm <- lm(Val ~ Date, data=x)
x.pre<-predict(x.lm, newdata=a)
答案 1 :(得分:1)
您的data.frame a
有一个名为a
的列。您使用名为Val
和Date
的列创建了模型,这就是它所寻找的。 p>
当您将data.frame a
名称列为Date
列时,您就可以了:
a <- data.frame(Date=a)
然后它在没有警告的情况下运行。
每条评论:
将您的lm
电话编辑为:
lm(Val ~ Date, data=x)
答案 2 :(得分:0)
如果您无法使predict.lm()
正常工作,那么您应该尝试使用function()
编写自己的函数:
yourown_function<- function(predictor1, predictor2,...){intercept+b1*predictor1+b2*predictor2+...}
使用yourown_function
从任何新数据框进行预测:
newvalues<- yourown_function(predictor1=data.frame$predictor1, predictor2=data.frame$predictor2,....)
使用新值,您可以计算残差,MSE等......
答案 3 :(得分:0)
而不是x.lm&lt; -lm(x $ Val~x $ Date,data = x)使用x.lm&lt; -lm(Val~Date,data = x)。在lm函数中删除变量名之前的数据集名称应该有帮助。