2017-12-27 1 views
0

Ich denke, dass ich eine wirklich grundlegende Frage erhielt, aber ich kann keine Hilfe in meinen Büchern oder in Google finden. Ich brauche die jährlichen Rücksendungen von meinen monatlichen Rücksendungen.R: Wie man monatliche Rückkehr annualize

Ich versuchte die Aggregatfunktion, die nicht funktioniert hat. Also habe ich beschlossen, diese Formel aus dem PerformanceAnalytics-Paket zu verwenden, aber ich bekomme nur eine Nummer, nicht jedes Jahr. Wenn du einen einfachen Weg mit R basic hast, würde ich es bevorzugen.

Return.annualized(ODB_REK$V3, scale = 12, geometric = FALSE) 

Das Datum wird in einem Datenrahmen genannt ODB_REK storaged.

'data.frame': 1104 obs. of 3 variables: 
$ V1: Date, format: "1926-01-30" "1926-02-27" ... 
$ V2: num -0.0104 -0.0245 -0.1156 0.0898 0.0369 ... 
$ V3: num -0.0104 -0.0248 -0.1228 0.086 0.0363 ... 

Meine Daten:

8610 2015-01-30 -0.045457722924783298 
8710 2015-02-27 0.061754336389734224 
8810 2015-03-31 -0.008931769762681013 
8910 2015-04-30 0.065063695709261307 
9010 2015-05-29 -0.002081164120491289 
9110 2015-06-30 -0.042074862364842577 
9210 2015-07-31 -0.004127506447239640 
9310 2015-08-31 -0.082799169893954930 
9410 2015-09-30 -0.019941516940899878 
9510 2015-10-30 -0.034313015625708092 
9610 2015-11-30 0.004613342153957855 
9710 2015-12-31 -0.012995071374819037 
9810 2016-01-29 -0.097864238637579010 
9990 2016-02-29 0.058956407591106048 
1001 2016-03-31 0.144829082708177265 
1011 2016-04-29 -0.037060328465702078 
1021 2016-05-31 0.061671602952122026 
1031 2016-06-30 -0.012830965901229322 
1041 2016-07-29 0.056609040739955464 
1051 2016-08-31 -0.002292626059884113 
1061 2016-09-30 -0.000189017862750737 
1071 2016-10-31 -0.033022283173137955 
1081 2016-11-30 0.063047097017319087 
1091 2016-12-30 0.022974063559821404 

Jede Hilfe Sie bieten kann, wird sehr geschätzt.

+0

Bitte, zeigen, was man mit dem 'Aggregat versucht haben()' Funktion und warum es „nicht funktioniert“. Vielen Dank. – Uwe

+0

Hey Uwe, ich habe es versucht: Test_ODB <- Aggregat (ODB_REK $ V3, FUN = Summe, Frequenz = 12) – Kindou

+0

Brauchst du 'Return.annualisiert' oder' return. kumulativ? – Onyambu

Antwort

0

Um die jährlichen Renditen für ein Jahr mit den monatlichen Daten wie in Ihrem Beispiel zu erhalten, müssen Sie die monatlichen Renditen zusammenrechnen. Sie können dies testen, indem Sie eine Array-Formel in Excel eingeben: Annual = (Produkt (1 + Monatsdaten) -1).

Dies sollte für Ihre Daten arbeiten R-Set mit:

# Load packages 
library(lubridate) 
library(dplyr) 

# Create reproducible example 
mydates <-c("2015-01-30", 
      "2015-02-27", 
      "2015-03-31", 
      "2015-04-30", 
      "2015-05-29", 
      "2015-06-30", 
      "2015-07-31", 
      "2015-08-31", 
      "2015-09-30", 
      "2015-10-30", 
      "2015-11-30", 
      "2015-12-31", 
      "2016-01-29", 
      "2016-02-29", 
      "2016-03-31", 
      "2016-04-29", 
      "2016-05-31", 
      "2016-06-30", 
      "2016-07-29", 
      "2016-08-31", 
      "2016-09-30", 
      "2016-10-31", 
      "2016-11-30", 
      "2016-12-30" 
      ) 
mydates <- as.Date(mydates) 

myreturns <- c(-0.045457722924783298, 
       0.061754336389734224, 
       -0.008931769762681013, 
       0.065063695709261307, 
       -0.002081164120491289, 
       -0.042074862364842577, 
       -0.004127506447239640, 
       -0.082799169893954930, 
       -0.019941516940899878, 
       -0.034313015625708092, 
       0.004613342153957855, 
       -0.012995071374819037, 
       -0.097864238637579010, 
       0.058956407591106048, 
       0.144829082708177265, 
       -0.037060328465702078, 
       0.061671602952122026, 
       -0.012830965901229322, 
       0.056609040739955464, 
       -0.002292626059884113, 
       -0.000189017862750737, 
       -0.033022283173137955, 
       0.063047097017319087, 
       0.022974063559821404 
       ) 

# Create data frame 
df <- data.frame(dates = mydates, monthly_returns = myreturns) 

# Group by year, then compound the monthly returns and subtract 1 to get annual return 
df %>% 
    group_by(year(dates)) %>% 
    summarize(annual_return = prod(1 + monthly_returns) - 1) 


# A tibble: 2 x 2 
    `year(dates)` annual_return 
      <dbl>   <dbl> 
1   2015 -0.1234031 
2   2016  0.
+0

Funktioniert perfekt, danke! – Kindou

+0

Ich bin froh, dass ich helfen konnte. – DaveM

-1
library(lubridate) 
library(dplyr) 

ODB_REK%>% 
mutate(year = year(date))%>% 
group_by(year)%>% 
summarise(annual_return = sum(monthly_return)) 

sollte den Job erledigen (obwohl ich wünschte, ich hätte Ihre Daten).

date (sollte eine Zeichenfolge sein, siehe hierzu link) entspricht Ihrer Datumsvariablen und metric entspricht Ihrer letzten Variablen.

+0

Meine Daten werden so gespeichert: 'data.frame': \t 1104 obs. von 3 Variablen: $ V1: Datum, Format: "1926-01-30" "1926-02-27" ... $ V3: num -0.0104 -0.0248 -0.1228 0.086 0.0363 ... Ich habe eine Fehlermeldung erhalten Durch das Ausprobieren dieses Codes (%>% stammen diese Symbolys aus dem dplyr-Paket oder? Fehler in ODB_REK $ V3%>% mutieren (Jahr = Jahr (Datum))%>% group_by (Jahr)%>%: konnte die Funktion nicht finden "%>%" – Kindou

+1

Stellen Sie sicher, dass "dplyr" geladen ist. – InfiniteFlashChess

+0

Schauen Sie, Sie müssen in der Lage sein, zwischen den Variablentypen und dem, was Sie berechnen, unterscheiden zu können. Sie müssen ein Dataset im OP bereitstellen. – InfiniteFlashChess