【问题标题】:What is the difference between lm(data~time) and tslm(data~trend)lm(data~time) 和 tslm(data~trend) 有什么区别
【发布时间】:2018-06-11 18:09:33
【问题描述】:

我观察到两种方法的结果是不同的。为什么是这样?我知道lm 发生了什么,但无法弄清楚tslm 的幕后发生了什么。

> library(forecast)
> set.seed(2)
> tts <- ts(100*runif(1200)+seq(1:1200)*0.1, frequency=12, start=c(2000,1))
> lm(tts~time(tts))

Call:
lm(formula = tts ~ time(tts))

Coefficients:
(Intercept)    time(tts)  
  -2400.365        1.225  

> tslm(tts~trend)

Call:
tslm(formula = tts ~ trend)

Coefficients:
(Intercept)        trend  
    48.9350       0.1021  

【问题讨论】:

  • 你注意到 12 * 0.1021 = 1.225 了吗?
  • 通常,时间序列数据的值是自相关的(即依赖的)。这违反了正确执行线性回归 (lm) 所需的独立性假设。因此lm 不是自相关的合适方法。在 google 上快速搜索会找到此链接 otexts.org/fpp/4/8,您可以在其中找到更多信息。

标签: r regression time-series forecasting


【解决方案1】:

运行以下三个命令:

predict(lm(tts~time(tts)))
predict(tslm(tts~time(tts)))
all.equal(predict(lm(tts~time(tts))), predict(tslm(tts~trend)))

你会说服自己它们是相同的。如果输出相同,则 lm 回归的 X 变量,即

time(tts) 

必须是线性变换

trend

最简单的猜测:

tmp <- time(tts)*12
lm(tts~tmp)

具有与 tslm 系数相同的系数。所以趋势只是

12*time(tts)

即趋势是自第 0 年以来经过的时间的(整数)计数,以月为单位。 time(tts) 是自第 0 年以来经过的时间计数,以年为单位。

【讨论】:

    猜你喜欢
    • 2020-12-03
    • 2017-08-11
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多