Loop für cor()

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
Zabel
Beiträge: 13
Registriert: Mo Okt 28, 2019 11:41 am

Loop für cor()

Beitrag von Zabel »

Hey Freunde, ich bin ganz neu in der Welt von R und meine Frage mag evtl. etwas "doof" sein. Trotzdem ist mein Problem für mich frustrierend und ich benötige Hilfe, weil ich wie gesagt bisher wenig bis keinen Kontakt mit R hatte.... Doch nun zu meiner Frage: ich möchte Renditeorrelationen zweier Assets errechnen. Und zwar über einen Zeitraum von ca. 24 Jahren (1995-2019). Ich benötige die Korrelationen jeweils über ein Jahr (Korrelation von 1995-1996, 1996-1997 usw.).
Mithilfe eines for-loops wollte ich die Korrelationen errechnen und gleich in einem Vektor speichern. Hierfür habe ich folgendes Loop gebaut:

Code: Alles auswählen

for(i in seq(5744,12191,260)) {
  
  soybeansoil[i]<-cor(OILi[i:(i+260)],SOYBEANSi[i:(i+260)],use="complete.obs")
  
}
(Vielleicht noch kurz als Erklärung, weshalb die Sequenz von 5744 bis 12191 läuft: 5744 ist Anfang 1995 und 12191 ist 2019 in meinen Rohdaten. Der 260er Schritt stellt jeweils ca. ein Jahr dar.)

Als Ergebnis erhalte ich nur "NAs". In OILi und SOYBEANSi sind auch einige NAs enthalten. Könnt ihr mir etwas helfen? Vielen Dank im voraus und seid nicht zu hart zu mir. :)

LG Zabel
Zuletzt geändert von jogo am Mo Okt 28, 2019 12:29 pm, insgesamt 1-mal geändert.
Grund: Formatierung verbessert. http://forum.r-statistik.de/viewtopic.php?f=20&t=29
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Loop für cor()

Beitrag von jogo »

Hallo Zabel,

willkommen im Forum.
Bei mir sieht das so aus:

Code: Alles auswählen

Dat <- data.frame(Jahr=1995:2019, istart=seq(5744,12191,260))
n <- nrow(Dat)
mOil <- matrix(OILi[5744:(5744-1+n*260)], 260)
mSoy <- matrix(SOYBEANSi[5744:(5744-1+n*260)], 260)
Dat$soybeansoil <- sapply(1:n, function(i) cor(mOil[, i], mSoy[, i], use="pair"))
vielleicht geht auch:

Code: Alles auswählen

Dat$soybeansoil <- diag(cor(mOil, mSoy, use="pair"))
Nachtrag:
jetzt muss ich nochmal fragen:
wieviele Werte hast Du pro Jahr?
Laut seq(5744,12191,260) müssten es 260 sein,
aber bei cor(OILi[i:(i+260)],SOYBEANSi[i:(i+260)], ...) verwendest Du 261 Werte aus jedem Vektor. :?

Gruß, Jörg
Antworten