【问题标题】:predict() and newdata - How does this work?predict() 和 newdata - 这是如何工作的?
【发布时间】:2016-10-28 11:01:05
【问题描述】:

最近有人在这里发了一篇关于这篇论文的问题:https://static.googleusercontent.com/media/www.google.com/en//googleblogs/pdfs/google_predicting_the_present.pdf

论文的R代码可以在论文的最后找到。本质上,该论文通过搜索查询调查了提前一个月的销售预测。我想我理解了模型和方法,但是有一个细节让我感到困惑。这是部分:

1 ##### Divide data by two parts - model fitting & prediction
dat1 = mdat[1:(nrow(mdat)-1), ]
dat2 = mdat[nrow(mdat), ]

2 ##### Fit Model;
fit = lm(log(sales) ~ log(s1) + log(s12) + trends1, data=dat1);
summary(fit)

和:

3 #### Prediction for the next month;
predict.fit = predict(fit, newdata=dat2, se.fit=TRUE);

我明白,(1) 中的dat2 只是mdat 的最后一行。 (2) 表示回归模型适用于数据集中除最后一行以外的所有内容。

但是为什么在(3)的预测模型中使用newdata=dat2,它是什么意思?为什么只有最后一行?

【问题讨论】:

    标签: r regression lm predict


    【解决方案1】:

    下面是对每一行代码的描述:

    dat1 = mdat[1:(nrow(mdat)-1), ] 
    

    创建整个数据集的一个子集,其中包含除最后一行之外的所有数据。

    dat2 = mdat[nrow(mdat), ]
    

    创建仅包含最后一行的整个数据集的子集。

    fit = lm(log(sales) ~ log(s1) + log(s12) + trends1, data=dat1)
    

    对于模型拟合仅使用第一个子集dat1。所以没有最后一行的数据。

    predict.fit = predict(fit, newdata=dat2, se.fit=TRUE)
    

    predict 采用拟合模型并查看它对“未见过”数据 dat2 的预测结果。

    在只有一个自变量的最简单情况下,我们将在dat1 拟合一行,然后查看对于dat2 的 X 值预测哪个 Y 值。

    【讨论】:

    • 那么为什么只使用一个值呢?未来的一种价值?因为论文只关注一个月的预测?假设它会查看 3 米的预测,那么 dat2 会是最后三个值吗?
    • 对。您可以轻松使用多个值,然后使用dat1 <- mdat[1:(nrow(mdat)-3), ]dat2 = mdat[(nrow(mdat) - 2) : nrow(mdat), ]。但是,如果他们的目标只是预测提前一个月而不是三个月(这可能是合理的,因为如果您在未来看得更远,您会失去准确性),他们为什么要浪费 2 个额外的观察结果,这些观察结果很可能是最重要的,因为它们是最新的?
    • 好的,所以论文中的 MAE 然后用 dat1 回归的运行值(即predict.fit = predict(fit, se.fit=TRUE))来测量,对吗?因为predict.fit = predict(fit, newdata=dat2, se.fit=TRUE) 只返回一个值。我仍然想知道predict.fit = predict(fit, newdata=dat2, se.fit=TRUE) 的这个结果何时何地被使用。
    • 据我了解,他们在时间 t 将模型拟合到 dat1 并预测 t+1。然后他们将真实结果添加到 t + 1 中,并将其添加到 dat1。使用 t+1 中的 dat1,他们预测了 t+2 中的值,依此类推(滚动回归)。但是,我不能说我在论文中找到了这个代码。
    • 是的,我认为在创建 MAE 度量时,您需要创建一个 df,其中包含每个 Google 趋势滞后的实际值和回归结果。我只是不确定predict.fit = predict(fit, newdata=dat2, se.fit=TRUE) 的值是否在任何地方使用,这就是我问的原因。现在,我只需要predict.fit = predict(fit, se.fit=TRUE) 并将回归结果与实际结果进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 2020-10-20
    • 2011-10-21
    相关资源
    最近更新 更多