2015-08-31 1 views
0

Je veux courir le adfTest avec lag=0 et type="c" dans une boucle, de sorte que la fenêtre de départ est de length=5 et la fenêtre d'arrivée est lenght=nrow(Data). La chose est que je veux que la fenêtre de départ est fixe donc si les données contiennent 10 points de données le premier résultat va de 1:5, le second 1:6 et ainsi de suite jusqu'à ce qu'il se termine par 1:10.fenêtre de roulement adfTest avec fix point de départ

j'essayer de le faire avec rollapply mais cela ne fonctionne pas de cette façon, le code que j'ai est:

num_dividends <- nrow(C) 
rw<-4 
sample_interval <- 1 
wi <- list() 
DF <- matrix(0, nrow=num_dividends, ncol=num_dividends) 
for(i in 1:(num_dividends-rw-1)) { 
    wi <- c(wi,list(list(c(window_size=rw+i,sample_interval=sample_interval), 
         DF=cbind(Date=seq(rw+i, num_dividends, by=sample_interval), 
         statistic=rollapplyr(C$Dividend, rw+i, function(u) adfTest(u)@test$statistic,by=sample_interval,partial=T))))) 
    DF[seq((rw+i),num_dividends,sample_interval), i+rw] <- wi[[i]]$DF[,"statistic"] 
} 

Ce qu'il fait est que cela crée une matrice que j'utilise celle-ci pour d'autres calculs avec les données perdues correspondantes grâce à la fenêtre de départ. Mais le PROBLÈME est que la fenêtre de départ n'est pas fixe, donc la première observation va de 1:5 mais la seconde va de 2:6; il calcule également l'ADF avec lag=1 et je ne sais pas comment ajouter l'option de la fonction avec le rollapplyr de lag=0. Pour le rendre plus clair supposons que je fais rollapplyr(C$Dividend, 5, FUN=mean,by=sample_interval) et les données suivantes sont les résultats que je reçois et ce que je veux.

Dividend This is What I Want  This is What I Get 
1     NA      NA 
2     NA      NA 
3     NA      NA 
4     NA      NA 
5      3      3 
6     3.5      4 
7      4      5 
8     4.5      6 
9      5      7 

Attention, je veux le faire dans une boucle parce que je veux que la largeur augmente chaque fois qu'il termine la boucle, jusqu'à ce que la fenêtre est la taille de l'ensemble de données.

Répondre

1

Revoir à nouveau votre problème, il semble que le code peut être simplifié en remplaçant rollapply avec sapply et en éliminant la listwi. Ici r1 est la date de début, r2 est la date de fin, et la fenêtre = r2 - r1 + 1.

library(zoo) 
    library(tseries) 
    num_random <- 20 
    set.seed(123) 
    C <- data.frame(Date=1:num_random, Dividend=550 + 30*rnorm(num_random)) # generate randum sample data 
    num_dividends <- nrow(C) 
    head(C) 

    rw_min <- 9   # minimum window size 
    DF2 <- matrix(NA_real_, nrow=num_dividends, ncol= num_dividends-rw_min+1) 
    for(r1 in 1:(num_dividends-rw_min + 1)) { 
    r2 <- (r1+rw_min-1):num_dividends 
    DF2[r2,r1] <- sapply(r2, FUN=function(n) adf.test(C$Dividend[r1:n])$statistic) 
    } 
    # column indices of DF2 are r1, the start Dates used in the ADF calculation 
    # row indices of DF2 are r2, the end Dates of the window used in the ADF calculation 
    # window size = r2-r1+1 
    # For example, DF2[15,1] is the ADF statistic for start Date = 1 and end Date = 15 with window = 15 
    print(DF2, digits=4) 

J'ai benchmarkée les rollapply et sapply versions et, pour ce cas, les délais d'exécution pour les deux versions sont identiques.

+0

Merci @WaltS oui c'est ce dont j'ai besoin, j'ai une autre question. Je change le 'adf.test' (parce qu'il sélectionne l'ordre de décalage nécessaire pour que la série soit stationnaire et fasse le test avec ce décalage qui ne fonctionne pas pour moi) donc j'utilise le paquet' fUnitRoots' 'adfTest 'mais la valeur par défaut est' lag = 1', comment puis-je changer cela en 'lag = 0' dans la commande. J'ai lu que cela doit être fait avec la commande? de trois points: '...' mais je ne comprends tout simplement pas comment. Merci de toute façon c'est parfait –

+0

Avez-vous considéré que 'adf.test' vous permet de définir l'ordre de décalage en définissant l'argument' k = 0'. 'DF2' serait calculé comme' DF2 [r2, r1] <- sapply (r2, FUN = fonction (n) adf.test (x = C $ Dividende [r1: n], k = 0) $ statistique) ' – WaltS