R 如何在一个数据帧中对多个时间序列执行多个静态测试
我有以下建议:R 如何在一个数据帧中对多个时间序列执行多个静态测试,r,time-series,R,Time Series,我有以下建议: head(vardata) Month repo Callrate WPI GDP FED nse usd 1 2001-04-01 9.00 7.49 5.41 4.6 4.50 1125.2 46.79 2 2001-05-01 8.75 8.03 5.60 4.6 4.00 1167.9 46.92 3 2001-06-01 8.50 7.24 5.30 4.6 3.75 1107.9 47.00 4 2001-07-01
head(vardata)
Month repo Callrate WPI GDP FED nse usd
1 2001-04-01 9.00 7.49 5.41 4.6 4.50 1125.2 46.79
2 2001-05-01 8.75 8.03 5.60 4.6 4.00 1167.9 46.92
3 2001-06-01 8.50 7.24 5.30 4.6 3.75 1107.9 47.00
4 2001-07-01 8.50 7.19 5.23 5.3 3.75 1072.8 47.14
5 2001-08-01 8.50 6.94 5.41 5.3 3.50 1053.8 47.13
6 2001-09-01 8.50 7.30 4.52 5.3 3.00 913.9 47.65
我想使用以下规则集对所有7个var执行Box.test、adf.test和kpss.test:
假设我设定了5%的显著性水平。那么规则是:
1) 对于Box.test,如果p值<0.05=>平稳
2) 对于adf试验,如果p值<0.05=>平稳
3) 对于kpss.test,如果p值>0.05=>平稳(注意不等式的变化)
我单独做了以下测试:
Box.test(ts(df$repo),lag=20,type="Ljung-Box")
Box-Ljung test
data: ts(df$repo)
X-squared = 1100, df = 20, p-value <2e-16
adf.test(ts(df$repo),alternative = "stationary")
Augmented Dickey-Fuller Test
data: ts(df$repo)
Dickey-Fuller = -2.7, Lag order = 5, p-value = 0.3
alternative hypothesis: stationary
kpss.test(ts(df$repo))
KPSS Test for Level Stationarity
data: ts(df$repo)
KPSS Level = 0.32, Truncation lag parameter = 3, p-value = 0.1
# to extract p values
Box.test(ts(df$repo),lag=20,type="Ljung-Box")$p.value
adf.test(ts(df$repo),alternative = "stationary")$p.value
kpss.test(ts(df$repo))$p.value
其中TRUE=序列是静止的;FALSE=序列是非平稳的
更新---我的尝试
多时间序列的平稳性检验
multi_stat_tests<- function(df){
for(i in 1:dim(df)[2]){
df_multi<-data.frame(var=names(df)[i],box.pvalue=Box.test(ts(df[,i]),lag=20,type="Ljung-Box")$p.value,adf.pvalue=adf.test(ts(df[,i]),alternative = "stationary")$p.value,kpss.pvalue=kpss.test(ts(df[,i]))$p.value,
box=Box.test(ts(df[,i]),lag=20,type="Ljung-Box")$p.value<0.05,
adf=adf.test(ts(df[,i]),alternative = "stationary")$p.value<0.05,
kpss=kpss.test(ts(df[,i]))$p.value>0.05
)
return(df_multi)
}
}
>multi_stat_tests(df[,2:8])
var box.pvalue adf.pvalue kpss.pvalue box adf kpss
1 repo 0 0.2859 0.1 TRUE FALSE TRUE
multi_stat_tests在循环的第一次迭代中返回结果,这就是为什么只得到第一个变量的结果。我认为这达到了你想要的
multi_stat_tests<- function(df){
p <- ncol(df)
df_multi <- data.frame(var=names(df),
box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
)
df_multi$box <- df_multi$box.pvalue < 0.05
df_multi$adf <- df_multi$adf.pvalue < 0.05
df_multi$kpss <- df_multi$kpss.pvalue > 0.05
df_multi
}
multi_stat_tests@Consistency.......awesme....learntsmethng new…只是一个小问题..输出有行名..我必须单独删除..它可以合并到循环中吗..@Nishant如果您不想有行名,可以执行类似r的操作
multi_stat_tests<- function(df){
p <- ncol(df)
df_multi <- data.frame(var=names(df),
box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
)
df_multi$box <- df_multi$box.pvalue < 0.05
df_multi$adf <- df_multi$adf.pvalue < 0.05
df_multi$kpss <- df_multi$kpss.pvalue > 0.05
df_multi
}
multi_stat_tests<- function(df){
p <- ncol(df)
df_multi <- data.frame(var=names(df),
box.pvalue=sapply(df, function(v) Box.test(ts(v),lag=20,type="Ljung-Box")$p.value),
adf.pvalue=sapply(df, function(v) adf.test(ts(v),alternative = "stationary")$p.value),
kpss.pvalue=sapply(df, function(v) kpss.test(ts(v))$p.value)
)
df_multi$box <- df_multi$box.pvalue < 0.05
df_multi$adf <- df_multi$adf.pvalue < 0.05
df_multi$kpss <- df_multi$kpss.pvalue > 0.05
row.names(df_multi) <- c()
df_multi
}