计算预测值时发出警告

Posted

技术标签:

【中文标题】计算预测值时发出警告【英文标题】:warning when calculating predicted values 【发布时间】:2012-08-01 22:16:57 【问题描述】:

使用数据框

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 输出:

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")

【问题讨论】:

第一行中的z 是否应该是x?否则我们不知道z 是什么。您没有收到错误,而是收到警告。此外,您向我们展示的任何内容都没有 29 行,因此我们不能重复此操作。使用dput 向我们展示您的实际数据。 对不起,是 x。我刚刚更新了它 【参考方案1】:

使用 x.lm

【讨论】:

【参考方案2】:

如果您无法使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】:

存储在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)

【讨论】:

x.lm &lt;- lm(Val~Date,data=x); predict(x.lm, newdata=data.frame(Date=a)) @BenBolker,你说得对,with(x,…) 在这里可能有点矫枉过正。相应地改变了我的答案。谢谢。 顺便说一句,有没有什么方法可以查看 R 参数传递的工作原理并且不会伤到你的大脑? @FlorianMayer:你读过section 4.3 of the language reference吗?【参考方案4】:

您的data.frame a 有一个名为a 的列。您使用名为 ValDate 的列创建了模型,这就是它要查找的内容。

当您将data.frame a 命名为Date 列时,您就可以开始了:

a <- data.frame(Date=a)

然后它在没有警告的情况下运行。

每条评论:

将您的 lm 呼叫编辑为:

lm(Val ~ Date, data=x)

【讨论】:

仍然给我警告,因为变量在这里被称为x$Date。即使实际上在数据框中调用它"x$Date" 似乎也不够。您是否像 OP 写的那样测试了它?如果是这样,您的 R 版本和我的 2.15.1 版本之间可能存在差异。 @MvG 是的,你说得对,我在摆弄和忘记的时候更改了 OP 的代码。

以上是关于计算预测值时发出警告的主要内容,如果未能解决你的问题,请参考以下文章

当我尝试预测 R 中的类别概率时出错 - 插入符号

predict.lm() 循环。警告:来自秩不足拟合的预测可能具有误导性

COP26发出警告:全球上市公司将导致气温上升3°C

警告:精度和 F 分数定义不明确,在没有预测样本的标签中设置为 0.0。使用 `zero_division` 参数

当某些gt在预测中没有对应时,如何计算ground-truth和预测地标之间的NME(归一化平均误差)?

为网站创建智能预测搜索