2012-05-08 1 views
6

que je fais l'analyse des précipitations par heure sur un fichier qui est désorganisé. Cependant, j'ai réussi à le nettoyer et le stocker dans une trame de données (appelé CA1) qui prend la forme comme suit:séries chronologiques et stl en R: Erreur seule série univariée sont autorisés

Station_ID Guage_Type Lat Long  Date Time_Zone Time_Frame H0 H1 H2 H3 H4 H5  H6  H7  H8  H9  H10  H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
1 4457700   HI 41.52 124.03 1948-07-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
2 4457700   HI 41.52 124.03 1948-07-05   8  LST 0 1 1 1 1 1 2.0000000 2.0000000 2.0000000 4.0000000 5.0000000 5.0000000 4 7 1 1 0 0 10 13 5 1 1 3 
3 4457700   HI 41.52 124.03 1948-07-06   8  LST 1 1 1 0 1 1 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
4 4457700   HI 41.52 124.03 1948-07-27   8  LST 3 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
5 4457700   HI 41.52 124.03 1948-08-01   8  LST 0 0 0 0 0 0 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0 0 0 0 0 0 0 0 0 0 0 0 
6 4457700   HI 41.52 124.03 1948-08-17   8  LST 0 0 0 0 0 0 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 0.3888889 6 1 0 0 0 0 0 0 0 0 0 0 

Lorsque H0 par H23 représentent les 24 heures par jour (ligne)

aide seulement CA1 (la trame de données ci-dessus), je prendre chaque jour (ligne) de 24 points et transposer verticalement et concaténer les jours restants (lignes) à une variable, que j'appelle DAT1:

> dat1[1:48,] 
    H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 H0 H1 H2 H3 H4 H5 H6 H7 H8 H9 H10 H11 H12 H13 H14 H15 H16 H17 H18 H19 H20 H21 H22 H23 
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 2 2 2 4 5 5 4 7 1 1 0 0 10 13 5 1 1 3 

Utilisation de la variable DAT1 , Je l'ai entré comme argument pour obtenir une série de données de temps:

> rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    frequency = 24) 

Quelques choses à noter:

>dim(CA1) 
    [1] 5636 31 
>length(dat1) 
    [1] 135264 

Ainsi 5636 * 24 (points de données au total [24] par ligne) = 135264 points au total. La longueur (rainCA1) est d'accord avec les points ci-dessus. Cependant, si je mets un terme dans la fonction ts, tels que

>rainCA1 <- ts(dat1, start = c(1900+as.POSIXlt(CA1[1,5])$year, 1+as.POSIXlt(CA1[1,5])$mon), 
    end = c(1900+as.POSIXlt(CA1[5636,5])$year, 1+as.POSIXlt(CA1[5636,5])$mon), 
    frequency = 24) 

Je reçois 1134 longueur totale de points, où je me manque beaucoup de données. Je suppose que cela est dû au fait que les dates ne sont pas consécutives et que je n'applique le mois et l'année que comme argument pour le point de départ.

continue, dans ce que je pense est le bon chemin, en utilisant le premier calcul ts sans l'argument final, je fournir comme une entrée pour stl:

>rainCA1_2 <-stl(rainCA1, "periodic") 

Malheureusement, je reçois une erreur:

Error in stl(rainCA1, "periodic") : only univariate series are allowed 

ce que je ne comprends pas ou comment s'y prendre. Cependant, si je retourne à la fonction ts et fournissons l'argument final, stl fonctionne correctement sans erreur.

J'ai fait des recherches dans beaucoup de forums, mais pas un (ou à ma connaissance) fournit une solution de puits pour obtenir les attributs de données des données horaires. Si quelqu'un peut m'aider, je l'apprécierai hautement. Je vous remercie!

Répondre

7

Cette erreur est le résultat de la forme de vos données. Essayez > dim(rainCA1); Je le soupçonne de donner quelque chose comme > [1] 135264 1. Remplacer rainCA1 <- ts(dat1 ... par rainCA1 <- ts(dat1[[1]] ..., et cela devrait fonctionner. Que ce soit le cas correctement, je me demande ... Il me semble que votre première tâche consiste à obtenir vos données d'un format cohérent. Assurez-vous que ts() obtient la bonne entrée. Consultez les spécifications précises de ts.

n'interprète pas les formats date-heure. ts() requiert des points de données consécutifs avec un intervalle fixe. Il utilise un compteur majeur et un compteur mineur (dont frequency s'inscrivent dans un compteur majeur). Par exemple, si vos données sont horaires et que vous vous attendez à une saisonnalité au niveau quotidien, frequency équivaut à 24.start et end, par conséquent, sont principalement cosmétiques: start indique simplement t (0) pour le compteur principal, tandis que end signifie t (fin).

0

Une solution que je trouve est time_series_var <- ts(data[, c("var_of_interest")]) puis time_series_var <- ts(as.vector(time_series_var)) puis la erreur liée à univarié disparaît car les dimensions sont maintenant correctes.

Questions connexes