für meine Bachelorarbeit bearbeite ich grade einen Datensatz von ca. 40000 Fonds in der Periode 2016 - 2020. Insgesamt hat der Datensatz ca. 1.9 Millionen Zeilen. Ich möchte nun für jeden der Fonds das FamaFrench3Faktor Alpha berechnen (Maßstab wie sich der Fonds im Zeitraum im Vergleich zum allgemeinen Markt entwickelt hat. Das Alpha erhalte ich als Ergebnis (genauer gesagt als intercept value) einer Regression mit allen Datensätzen eines spezifischen Fonds. Für die Regression nutze ich die Fonperformance ("mexret") und die 3 Faktoren von FamaFrench ("Mkt_RF","SMB","HML")
Ich habe für einzelne Fonds das Alpha berechnen können, habe nun aber Schwierigkeiten damit die Regression zu automatisieren
Im ersten Schritt wollte ich über eine Funktion den intercept value für den Fonds berechnen
Code: Alles auswählen
get_intercept <- function(x) {
return(lm(dat3$mexret ~ Mkt_RF + SMB + HML,
data = dat3[x,]))$coefficients[1]
}
Code: Alles auswählen
place_intercept <- function(x) your_data[x,"ff3fa"] = get_intercept(x)
lapply(fund_list, place_intercept)
add_intercepts <- function(x) lapply(x, place_intercept)
add_intercepts(fund_list)
Mein Betreuer hat mir geraten, die Funktion group_by zu verwenden(hier Bsp für Fondsnummer 2704)
Code: Alles auswählen
dplyr::group_by(dat3, crsp_fundno) %>% do(get_intercept(2704))
Fehler in model.frame.default(formula = dat3$mexret ~ Mkt_RF + SMB + HML, :
Variablenlängen sind unterschiedlich (gefunden für 'Mkt_RF')
Ich weiss aktuell nicht wie ich weiter machen soll, daher wende ich mich an dieses Forum
Also nochmal zusammenfassend:
- Nur Datensätze mit einer bestimmten Fondsnummer analysieren ("crsp_fundno")
- Die Regression für die selektierten Datensätze durchführen
- Den intercept value in einer extra Spalte ("ff3fa") für jeden der selektierten Datensätze speichern
- Die Schritte für alle Fondsnummern durchführen
Ich hoffe ich konnte mein Problem relativ gut verständlich machen
Bin dankbar für jede Antwort