Użycie apendy (lub sapply) na obiekcie mts usuwa jego właściwości serii czasowych podczas wysyłania do funkcji. Jak mam zastosować tę samą funkcję (z wejściem ts i wyjściem ts) na każdym szeregu razy w obiekcie mts i zwrócić go (najlepiej jako mts) [mam na myśli oprócz używania pętli]?Użycie Zastosuj rodzinę funkcji na obiektach mts
Na przykład załóżmy, że napisać funkcję, która zwraca trendu szeregu czasowego (za pomocą stl)
myfunc <- function(x) {
return(stl(x,"per")$time.series[,2])
}
Teraz dla próbki mts
z <- ts(matrix(rnorm(90), 30, 3), start=c(1961, 1), frequency=4)
class(z)
Wysyłanie tylko jedną z prac szeregów czasowych poprawne:
myfunc(z[,1]) # works correctly, returns the trend of first series
Moja funkcja nie jest przeznaczona do wielu serii czasowych, więc:
myfunc(z) # will not work returning the error below
Error in stl(x, "per") : only univariate series are allowed
Korzystanie zastosować na MTS sprzeciw wysłać każdy z szeregów czasowych jako wektor, nie zachowując swoje właściwości szeregu czasowego (TSP):
apply(z,2,myfunc) # will not work returning the error below
Error in stl(x, "per") :
series is not periodic or has less than two periods
Prawda, "zastosuj" usunie atrybuty, ale 'sapply' nie powinno tego robić. Obiekty 'ts' są dziwne. Często mają metody drukowania, które wprowadzają użytkownika w błąd co do jego prawdziwych struktur, więc powinieneś używać na nich metody str(). –
Czy możesz podać kod przy użyciu Sapply w moim przykładzie? Dowiedziałem się, że używając sapply podniósł ten sam błąd, ponieważ po prostu wywołają się same. –
I o dziwaczności obiektów 'ts'! Nie używam ani nie polegam na żadnej metodzie drukowania, muszę znać jej właściwości szeregów czasowych, tj. 'Łyżeczka', która jest tylko wektorem o długości 3, wskazującym początek, koniec i częstotliwość szeregów czasowych danych –