lm(数据~时间)和tslm(数据~趋势)有什么区别
What is the difference between lm(data~time) and tslm(data~trend)
我观察到这两种方法的结果是不同的。为什么是这样?我知道 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
运行下面三个命令:
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 年以来经过的时间计数,以年为单位。
我观察到这两种方法的结果是不同的。为什么是这样?我知道 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
运行下面三个命令:
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 年以来经过的时间计数,以年为单位。