2017-06-05 9 views
0

我有以下DF:如何可以做多時間序列的多個固定的測試在數據幀

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 

vardata_num<-df[,2:8] 

我要進行Box.test,adf.test和kpss.test所有7與變種遵循以下規則:

說我設置了5%的顯着性水平。然後,規則是:

1)對於Box.test,如果p值< 0.05 =>靜止

2)對於adf.test,如果p值< 0.05 =>靜止

3)對於kpss.test,如果p值> 0.05 =>靜止的(不等式的音符變化)

獨立我沒有測試爲:

Box.test(ts(vardata_num$repo),lag=20,type="Ljung-Box") 

    Box-Ljung test 

data: ts(vardata_num$repo) 
X-squared = 1100, df = 20, p-value <2e-16 

adf.test(ts(vardata_num$repo),alternative = "stationary") 

    Augmented Dickey-Fuller Test 

data: ts(vardata_num$repo) 
Dickey-Fuller = -2.7, Lag order = 5, p-value = 0.3 
alternative hypothesis: stationary 

kpss.test(ts(vardata_num$repo)) 

    KPSS Test for Level Stationarity 

data: ts(vardata_num$repo) 
KPSS Level = 0.32, Truncation lag parameter = 3, p-value = 0.1 

# to extract p values 
Box.test(ts(vardata_num$repo),lag=20,type="Ljung-Box")$p.value 
adf.test(ts(vardata_num$repo),alternative = "stationary")$p.value 
kpss.test(ts(vardata_num$repo))$p.value 

這是一次完成所有變量之一.....

但是我想在所有的var &輸出在某種數據框中,如果可能的話可以這樣做:

var   box.pvalue box adf.pvalue adf kpss.pvalue kpss 
    repo   0.03  TRUE 0.03 TRUE  0.03 FALSE 
    Callrate  0.03  TRUE 0.03 TRUE  0.03 FALSE 
    WPI   0.03  TRUE 0.03 TRUE  0.03 FALSE 
    GDP   0.03  TRUE 0.03 TRUE  0.03 FALSE 
    FED   0.51  FALSE 0.03 TRUE  0.03 FALSE 
    nse   0.03  TRUE 0.03 TRUE  0.03 FALSE 
    usd   0.45  FALSE 0.03 TRUE  0.03 FALSE 

其中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(vardata_num) 

    var box.pvalue adf.pvalue kpss.pvalue box adf kpss 
1 repo   0  0.2859   0.1 TRUE FALSE TRUE 

它只是拿起只有一個變種......它不是迭代跨越所有變量......在這裏缺少一些東西....幫助需要!!!!!

+0

這是最好的常用和不那麼有效的方式,包括你已經嘗試過什麼,所以遠。你已經概述了你想要做的事情,但具體是什麼讓你感到沮喪?這裏的人們更好地告訴你如何調整你的代碼,而不是爲你寫代碼。 – rosscova

+0

@rosscova我已經完成了所有這些測試之一,分別爲每個變種.....我需要幫助做某種循環....... – Nishant

+0

發佈您已使用的代碼那些「一次一個」的測試。向您展示如何迭代已有的代碼將比從頭開始好得多。 – rosscova

回答

1

這裏是dplyrtidyr解決方案:

library(dplyr) 
library(tidyr) 
library(tseries) # for kpss.test 

data <- data.frame(Sys.Date()-1:200, matrix(rnorm(1400, 0, 1), ncol=7)) 
colnames(data) <- c("Month", "repo", "Callrate", "WPI", "GDP", "FED", "nse", "usd") 

data %>% 
gather(Series, Value, -Month) %>% 
    group_by(Series) %>% 
    summarise(
    box.pvalue = Box.test(Value, lag=20, type="Ljung-Box")$p.value, 
    box = Box.test(Value, lag=20, type="Ljung-Box")$p.value<0.05, 
    adf.pvalue = adf.test(Value, alternative = "stationary")$p.value, 
    adf = adf.test(Value, alternative = "stationary")$p.value<0.05, 
    kpss.pvalue=kpss.test(Value)$p.value, 
    kpss=kpss.test(Value)$p.value>0.05 
) 

長表的設計可以讓你避免for循環解決方案。相反,你在列進行值的條件分析(通過Series空調)Value.

+0

Fantastico !!!在這裏發佈一般&不那麼有效的方式也.... – Nishant

0

這裏是做同樣的

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[,c(1,2,5,3,6,4,7)] 
} 

df2<-multi_stat_tests(vardata_num) 
df2 
##  var box.pvalue box adf.pvalue adf kpss.pvalue kpss 
## 1  repo   0 TRUE 0.28593 FALSE  0.10000 TRUE 
## 2 Callrate   0 TRUE 0.06008 FALSE  0.01000 FALSE 
## 3  WPI   0 TRUE 0.28803 FALSE  0.03910 FALSE 
## 4  GDP   0 TRUE 0.04358 TRUE  0.06211 TRUE 
## 5  FED   0 TRUE 0.43113 FALSE  0.01000 FALSE 
## 6  nse   0 TRUE 0.02745 TRUE  0.01000 FALSE 
相關問題