横截面数据对应着某个时间点的数据。
纵向的数据对应着一系列时间点的数据,某个变量随着时间的变动被反复测量。
研究纵向数据,也许会得到“时间”的答案。
x <- runif(20)
ts(x)
ts(x,frequency = 12)
ts(x,frequency = 7)
y <- ts(x,start =2,frequency = 7)
plot(y)
# 时序的起止点,频率等
start(y)
end(y)
frequency(y)
# install.packages("forecast")
library(forecast)
opar <- par(no.readonly=TRUE)
par(mfrow=c(2,2))
ylim <- c(min(Nile), max(Nile))
plot(Nile, main="Raw time series")
plot(ma(Nile, 3), main="Simple Moving Averages (k=3)", ylim=ylim)
plot(ma(Nile, 7), main="Simple Moving Averages (k=7)", ylim=ylim)
plot(ma(Nile, 15), main="Simple Moving Averages (k=15)", ylim=ylim)
par(opar)
plot(AirPassengers)
可以看到趋势很明显,但是季节性波动越来越大,可能是个相乘性的模型
lAirPassengers <- log(AirPassengers)
plot(lAirPassengers, ylab="log(AirPassengers)")
可以看到做log转化后,方差稳定了,变成了趋势性季节性相加模型了
fit <- stl(lAirPassengers, s.window="period")
plot(fit)
log transform 的data
季节项随时间的变化
趋势项随时间的变化
随机误差项在时间点上的表现等
fit$time.series # log转化后的结果
exp(fit$time.series) # 原始尺度上的数值
其他的季节性分解可视化函数:
par(mfrow=c(2,1))
library(forecast)
monthplot(AirPassengers, xlab="", ylab="")
seasonplot(AirPassengers, year.labels="TRUE", main="")
library(forecast)
fit <- ets(log(AirPassengers), model="AAN")
fit # 返回 alpha beta 值
#评估模型
accuracy(fit)
# 进行预测
pred <- forecast(fit, 5)
pred
library(forecast)
fit <- ets(log(AirPassengers), model="AAA")
fit # 返回 alpha beta gamma值
#评估模型
accuracy(fit)
# 进行预测
pred <- forecast(fit, 5)
pred
时序的自相关
ACk即一些列观察测值(Yt)和K时期之前的观测值(Yt-k)之间的相关性
比如,AC1就是1阶滞后序列与0阶滞后序列之间的相关性
AC1,AC2,AC3…ACk构成的图即为自相关图(ACF图)
stats包中的acf()函数或者forecast包中的Acf()函数可以生成ACF图
自回归项
AutoRegressive, AR项
移动平均项
Moving Averages, MA项
library(forecast)
plot(Nile)
ndiffs(Nile) # 自动检测最佳的差分数d等于几
dNile <- diff(Nile)
plot(dNile)
library(tseries)
adf.test(Nile)
adf.test(dNile)
# 针对的都是差分后的数据
Acf(dNile) # 自相关
Pacf(dNile) #偏自相关
library(forecast)
fit <- arima(Nile, order=c(0,1,1)) #ts=时序,order=c(p,d,q)
fit
qqnorm(fit$residuals)
qqline(fit$residuals)
残差项或者说误差项满足正态性则会分布在直线上
检验残差值的相关性系数是否显著不为0
forecast(fit, 3)
library(forecast)
fit <- auto.arima(sunspots)
fit #返回比较合适的模型参数