【问题标题】:R: Plotting "Actual vs. Fitted"R:绘制“实际与拟合”
【发布时间】:2016-06-26 08:51:42
【问题描述】:

我确实有一个与绘制时间序列的实际数据和拟合模型的值有关的问题。特别是,我的问题与这篇论文有关:

https://static.googleusercontent.com/media/www.google.com/en//googleblogs/pdfs/google_predicting_the_present.pdf

在文档的附录中,您可以找到一个 R 脚本。在这里,我确实有两个初步问题:(1)什么是

##### Define Predictors - Time Lags;
dat$s1 = c(NA, dat$sales[1:(nrow(dat)-1)]);
dat$s12 = c(rep(NA, 12), dat$sales[1:(nrow(dat)-12)]);

做和作用是什么:

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

最后一个主要问题:假设我得到了我的数据的计算

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

形容词。 R 平方值为 0.342。因此,我认为上面的模型解释了建模数据(预测数据?)和实际数据之间大约 34% 的差异。现在,我怎样才能绘制这个“模型图”(拟合),以便在论文中得到类似的东西?

我假设第二张图的“拟合”实际上是来自估计模型的数据,对吧?如果是这样,那么脚本中似乎缺少这部分。

非常感谢!

编辑 1:

试过这个:

# Actual values and fitted values
plot(sales ~ month, data= dat1, col="blue", lwd=1, type="l", xaxt = "n", xaxs="r",yaxs="r", xlab="", ylab="Total Sales");
par(new=TRUE)
plot(fitted(fit) ~ month, data= dat1, col="red", lwd=1, type="l", xaxs="r", yaxs="r", yaxt = "n", xlab="Month", ylab="Index", xaxt="n");
axis(4)

输出:(函数中的错误(公式,数据 = NULL,子集 = NULL,na.action = na.fail,:可变长度不同(找到“月份”)

【问题讨论】:

    标签: r plot regression model-fitting


    【解决方案1】:
    dat$s1 = c(NA, dat$sales[1:(nrow(dat)-1)])
    

    这将创建一个新列 s1,其中包含来自 sales 的数据,其中第一个元素是 NA。来自sales 的最后一项丢失了。

    dat$s12 = c(rep(NA, 12), dat$sales[1:(nrow(dat)-12)])
    

    Crate s12 列有 12 个 NA,其余的是来自 dat$sales 的第一个 nrow(dat)-12 值。

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

    dat1 是最后一个观察值(行),dat2 只是最后一行。在预测响应 (sales) 时,您只需提供一个 data.frame,其中至少包含公式右侧的列(也称为解释变量),在本例中为 s1s12 ,作为predict() 函数的newdata 参数。这是使用dat2 的地方。

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

    下一行使用dat1 拟合模型。

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

    fitted(fit) 将为您提供拟合值。试试predict(fit),看看有什么不同。

    每条语句末尾的分号是多余的。

    【讨论】:

    • 我在编辑 1 中尝试了一些东西。不幸的是,这不起作用。但是我可以通过fitted(fit)看到这些值。
    • 你能帮我理解“#####将数据分为两部分 - 模型拟合和预测 dat1 = mdat[1:(nrow(mdat)-1), ] dat2 = mdat[nrow(mdat), ]"?我不明白 dat2 的意义。
    猜你喜欢
    • 2020-09-02
    • 2020-04-11
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多