2017-06-05 31 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 

我要進行Box.test,adf.test和kpss.test所有7 VAR用以下規則集:

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

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

2)對於adf.test,如果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 

氏S爲做一次一個對所有變量.....

但我想這樣做的所有這些測試一氣呵成在某種數據幀的輸出的所有變種&如果可能的話,也許是這樣這:

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(df[,2:8]) 

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

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

回答

1

您在循環的第一次迭代返回的結果,這就是爲什麼你只能得到結果的第一個變量。我認爲這實現了你想要的。

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 
} 
+0

@Consistency ....... awesme ....教訓smethng新... 。只是一個小問題..the輸出有行名稱....我不得不刪除它separately..can它在循環中納入...... – Nishant

+0

@Nishant如果你不希望有行名,你可以像'r < - multi_stat_tests(df); row.names(r)< - c()'或者在最後一行返回結果df_multi之前在函數中添加一行,比如'row.names(df_multi)< - c()'。 – Consistency

相關問題