为了账号安全,请及时绑定邮箱和手机立即绑定

预测()-也许我不明白

预测()-也许我不明白

隔江千里 2019-07-01 10:22:47
预测()-也许我不明白I 今天早些时候发帖使用predict功能。我得到了纠正,并认为我走上了正确的道路。我有一些观察(实际值),我有一些数据点,我想推断或预测。我用lm为了创建一个模型,我尝试使用predict作为预测器输入的实际值。这段代码都是从我上一篇文章中重复的,但如下所示:df <- read.table(text = '      Quarter Coupon      Total 1   "Dec 06"  25027.072  132450574 2   "Dec 07"  76386.820  194154767 3   "Dec 08"  79622.147  221571135 4   "Dec 09"  74114.416  205880072 5   "Dec 10"  70993.058  188666980 6   "Jun 06"  12048.162  139137919 7   "Jun 07"  46889.369  165276325 8   "Jun 08"  84732.537  207074374 9   "Jun 09"  83240.084  221945162 10  "Jun 10"  81970.143  236954249 11  "Mar 06"   3451.248  116811392 12  "Mar 07"  34201.197  155190418 13  "Mar 08"  73232.900  212492488 14  "Mar 09"  70644.948  203663201 15  "Mar 10"  72314.945  203427892 16  "Mar 11"  88708.663  214061240 17  "Sep 06"  15027.252  121285335 18  "Sep 07"  60228.793  195428991 19  "Sep 08"  85507.062  257651399 20  "Sep 09"  77763.365  215048147 21  "Sep 10"  62259.691  168862119', header=TRUE)str(df)'data.frame':   21 obs. of  3 variables:  $ Quarter   : Factor w/ 24 levels "Dec 06","Dec 07",..: 1 2 3 4 5 7 8 9 10 11 ...  $ Coupon: num  25027 76387 79622 74114 70993 ...  $ Total: num  132450574 194154767 221571135 205880072 188666980 ...代码:model <- lm(df$Total ~ df$Coupon, data=df)> model Call:lm(formula = df$Total ~ df$Coupon)Coefficients:(Intercept)    df$Coupon     107286259         1349预测代码(基于以前的帮助):(这些是我想用来获得预测值的预测值)Quarter = c("Jun 11", "Sep 11", "Dec 11")Total = c(79037022, 83100656, 104299800)Coupon = data.frame(Quarter, Total)Coupon$estimate <- predict(model, newdate = Coupon$Total)现在,当我运行它时,我会得到以下错误消息:Error in `$<-.data.frame`(`*tmp*`, "estimate", value = c(60980.3823396919,  :    replacement has 21 rows, data has 3我用来建立模型的原始数据框架中有21个观察结果。我现在试图预测基于模型的3个值。我要么不真正理解这个函数,要么代码中出现了错误。我会感谢你的帮助。谢谢
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

首先,你想用

model <- lm(Total ~ Coupon, data=df)

 model <-lm(df$Total ~ df$Coupon, data=df).

第二,说lm(Total ~ Coupon),您正在安装一个使用Total作为响应变量,使用Coupon作为预测器。也就是说,您的模型是Total = a + b*Coupon..ab要估计的系数。注意,响应位于~,以及右边的预测器。

因此,当您要求R给出模型的预测值时,您必须提供一组新的预测器.的新价值.Coupon,不是Total.

第三,从贵公司的规格来判断。newdata,看起来你实际上是在找一个合适的模特Coupon作为.的功能Total而不是反过来。要做到这一点:

model <- lm(Coupon ~ Total, data=df)new.df <- data.frame(Total=c(79037022, 83100656, 104299800))predict(model, new.df)


查看完整回答
反对 回复 2019-07-01
?
阿晨1998

TA贡献2037条经验 获得超6个赞

谢谢洪,这正是我遇到的问题。您所得到的错误表明,行数是错误的,但问题是,模型实际上是使用一个命令进行训练的,该命令最后为参数取错了名称。

这是一个非常关键的细节,对于lm来说是完全不明显的,依此类推。本教程中的一些引用了行,如lm(olive$Area@olive$Palmitic)-最后使用OLIVE$Area(非区域)的变量名称,因此使用anewdata<-data.frame(Palmitic=2)那就不能用了。如果你用lm(Area@Palmitic,data=olive)然后变量名是正确的和预测工作。

真正的问题是,错误消息根本没有指出问题所在:

警告消息:“anewdata”有1行,但变量有X行


查看完整回答
反对 回复 2019-07-01
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

为了避免错误,新数据集的一个要点是自变量的名称。它必须与模型中所报告的相同。另一种方法是在不创建新数据集的情况下嵌套这两个函数。

model <- lm(Coupon ~ Total, data=df)predict(model, data.frame(Total=c(79037022, 83100656, 104299800)))

注意模型。下两个命令相似,但对于预测函数,第一个命令不工作,第二个命令不工作。

model <- lm(Coupon ~ Total, data=df) #Okmodel <- lm(df$Coupon ~ df$Total) #Ko


查看完整回答
反对 回复 2019-07-01
  • 3 回答
  • 0 关注
  • 451 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信