Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Methoden der Zeitreihenanalyse

Moderator: schubbiaschwilli

Antworten
savarK
Beiträge: 5
Registriert: Mi Jul 03, 2019 9:40 am

Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von savarK »

Liebe Community,
ich sage erstmal herzliches Hallo an alle :)

Mein Wissen im Umgang mit R ist noch in den anfänglichen Zügen, wobei ich jetzt schon sehr begeistert von R bin. Im Rahmen eines Univortrages möchte ich für eine Zeitreihe von 15 Jahren und 100 Aktien (3 Spalten - Datum, Aktienpreis, Marktkapitalisierung) jedes Jahr neue Portfolios anhand der Marktkapitaliserung (3 Portfolios - 75% und 25% Quantil) bilden und anschließend die Renditen berechnen.
Im Internet habe ich mich natürlich schon umgeguckt und konnte leider wenig brauchbares finden.

Daher freue ich mich über Überlegungen hinsichtlich der Vorgehensweise (eventuell for-Schleife?) und weiteren hilfreichen Funktionen für die Umsetzung. Oder, vielleicht kennt jemand einen Beitrag in diesem Forum oder in einem anderen, der dieser Vorgehensweise - auch für andere Kritierien - sehr nahe kommt.

Es würde mir daher wirklich sehr helfen, wenn jemand eine Idee zur Vorgehensweise hat :)

Vielen Dank im Voraus und beste Grüße :=)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von jogo »

Hallo savarK,

willkommen im Forum!
Bitte werde etwas konkreter im Sinne von viewtopic.php?f=20&t=11

Gruß, Jörg
savarK
Beiträge: 5
Registriert: Mi Jul 03, 2019 9:40 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von savarK »

Hallo zusammen,
Hallo Jörg,

ich weiß nicht, wie man am besten/effizientesten zu jedem Zeitpunkt 3 Portfolios neu bildet, deren Aktienallocation anhand der entsprechenden Marktkapitalisierung vorgenommen wird. Mein Vorhaben erläutere ich euch im Folgenden. Dazu hänge ich zwei Fotos von meinem Datensatz an.
Unbenannt.JPG
Anmerkung 2019-07-03 142656.jpg
Die erste Spalte gibt den Zeitpunkt (jährlich) für einen Zeitraum von 15 Jahren wieder. Die folgenden Spalten enthalten den Aktienpreis eines Unternehmens und die nächste Spalte die Marktkapitalisierung des selben Unternehmens, usw. (siehe Anhang). Hier entsteht schon meine erste Frage, ob diese Struktur sinnvoll ist.

Zum Vorhaben: Für jedes Jahr möchte ich drei Portfolios neu bilden - d.h. die Aktien werden anhand der Marktkapitalisierung des entsprechenden Unternehmens mittels zwei Bedingungen (25%-Quantil und 75%-Quantil) einem Portfolio (small cap, mid cap, large cap) zugeordnet. Gleichzeitig oder im Anschluss möchte ich den Return (marktwertgewichtet) für jedes Portfolio berechnen.
Inbesondere da es für jedes Unternehmen zwei Spalten (Aktienpreis, Marktkapitalisierung) gibt, fehlt mir die Vorstellungskraft dies in R umzusetzen.

Mein einziger Ansatzpunkt wäre, dass man für jedes Jahr einen neuen dataframe erstellt, welcher auf einer Achse die Unternehmen und auf der anderen Achse den Aktienpreis und die Marktkapitalisierung enthält. Anschließend sortiert man nach Marktkapitalisierung und hat seine Portfolios. Dies kann ich aber nur "händisch" also Schritt für Schritt umsetzen, würde dafür aber natürlich gerne einen Code wie z.B. eine Schleife - je nachdem was sich anbietet - verwenden. Für diesen Ansatz brauche ich eure Untersützung hinsichtlich der Umsetzung bzw. Vorgehensweise -schleife ja/nein oder Nutzung von anderen Funktionen?

Ich freue mich sehr über eure Ideen und Vorschläge zur Vorgehensweise - da ich leider wie gesagt - keinen konkreten Ansatz zur effizienten Umsetzung habe.

Vielen Dank im Voraus!
Gruß, Savar
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von jogo »

Hallo Savar,

ich komme mit der Zählung der Spalten noch nicht zurecht:
es gibt das Datum und dann für jedes Unternehmen zwei Spalten. Warum hat Dein Dataframe 1136 Spalten?

Ansonsten würde ich erstmal diese beiden Sorten von Spalten trennen und zwei Matrizen erstellen, etwa:

Code: Alles auswählen

Datum <- data_frame$Date
Aktie <- as.matrix((data_frame[-1])[c(TRUE, FALSE)])
Value <- as.matrix((data_frame[-1])[c(FALSE, TRUE)])
Gruß, Jörg
savarK
Beiträge: 5
Registriert: Mi Jul 03, 2019 9:40 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von savarK »

Hallo Jörg,
vielen Dank für Deinen schnellen Antworten. Ich habe den Dataframe aus einem größeren Datensatz gekürzt, dabei scheint was schief gelaufen zu sein. Ich hab´s angepasst und auch meinen Datensatz reduziert, um mich erstmal nur auf die Vorgehensweise zu konzentrieren.

Die Matrizen habe ich erstellt - welche Schritte schlägst Du als nächstes vor?

Besten Dank und ich wünsche einen schönen Feierabend! :)
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von jogo »

Hallo Savar,

wenn ich Deine Beschreibung richtig verstanden habe, möchtest Du jetzt in jeder Zeile von einer Matrix eine Kombination aus quantile() und cut() einsetzen. Mir ist nur nicht klar, ob an irgendeiner Stelle über die Jahre aggregiert werden soll oder nicht.
Deshalb erstmal eine kleine Fingerübung:

Code: Alles auswählen

apply(Aktie, 1, quantile, probs=c(0.25, 0.75))
apply(Value, 1, quantile, probs=c(0.25, 0.75))
Wenn keine Aggregation vorgenommen werden soll, kann es eventuell so aussehen:

Code: Alles auswählen

set.seed(42)
Aktie <- matrix(rnorm(1000), 10) # ich habe mal einige Daten generiert

mycut <- function(x) cut(x, breaks=c(-Inf, quantile(x, probs=c(0.25, 0.75)), +Inf), labels = c("low", "mid", "high"))
apply(Aktie, 1, mycut)
Gruß, Jörg
savarK
Beiträge: 5
Registriert: Mi Jul 03, 2019 9:40 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von savarK »

Hallo Jörg,

vielen Dank für Deine Hilfe. Ich schildere nochmal mein Vorhaben:

ich möchte für jedes Jahr (immer zum 01.01.) meine Aktien im Datensatz in drei verschiedene Portfolios einteilen. Diese Allokation soll wie bereits in Deinem Beispiel angewendet nach der Marktkapitalisierung erfolgen (25%-Quantil, 75%-Quantil).
Wenn ich einen Zeitraum von 15 Jahre betrachte, dann müsste ich entsprechend 15x3 Portfolios gebildet haben. Anschließend will ich die Rendite der Portfolios ausrechnen und vergleichen, ob ein Size-Effekt vorliegt.

Ich habe meinen Datensatz neustrukturiert - in der Hoffnung, dass man nun damit besser arbeiten kann. Ich habe jetzt 4 Variablen (Code ("Unternehmensname"), Datum, Aktienpreis, Marktkapitalisierung). Die Unternehmen sind auf der Y-Achse dargestellt. Entsprechend handelt es sich um einen Dataframe. Ein Foto habe ich angehängt.
Anmerkung 2019-07-04 130038.jpg
Anmerkung 2019-07-04 130010.jpg
Meine Überlegungen zur weiteren Vorgehensweise sind, dass ich über dplyr und group_by(datum) die Einteilung vornehme. Ich gucke mir gerade die Formulierung der Bedingungen an. Hälst Du diese Vorgehensweise für zielführend und wie würdest Du die Bedingungen in diesem Fall formulieren? Im Datensatz gibt es auch einige "NA".

Vielen Dank :)

Gruß,
Savar
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von jogo »

Hallo Savar,

Du hast jetzt Monatsdaten, richtig?
Du könntest noch eine Spalte für das Jahr spendieren ...

Gruß, Jörg
p.s.:
Wenn die Fragen konkreter werden (so langsam haben wir diesen Zustand erreicht), wird die Nützlichkeit konkreter Daten im Sinne eines reproduzierbaren Beispiels größer, siehe viewtopic.php?f=20&t=11 . Aus images kann man schlecht Daten rekonstruieren.
savarK
Beiträge: 5
Registriert: Mi Jul 03, 2019 9:40 am

Re: Kontinuierliche Portfoliobildung nach Marktkapitalisierung

Beitrag von savarK »

Hallo Jörg,

ich habe Monatsdaten, das ist korrekt. Allerdings möchte ich wie gesagt die Einteilung der Portfolios nur zum Anfang des Jahres vornehmen. Ist die Problemstellung eindeutig?

Die Spalte fürs Jahr habe ich eingefügt und die Struktur gemäß dput sieht wie folgt aus:

structure(list(Code = c(1, 1, 1, 1, 1, 1), year_vector = c(1990,
1990, 1990, 1990, 1990, 1990), datum_vector = structure(c(7305,
7336, 7364, 7395, 7425, 7456), class = "Date"), stock_price_vector = c(1.07,
1.17, 1.19, 1.29, 1.27, 1.35), Value_vector = c(993.95, 1087.21,
1104.39, 1195.2, 1178.02, 1257.78)), row.names = c(NA, 6L), class = "data.frame")

Hilft das weiter? Vielen Dank :)

Gruß, Savar
Antworten