Definiere eine benutzerdefinierte Momentfunktion
Bei vielen Optimierungsproblemen mit Nebenbedingungen möchte die Portfoliomanagerin oder der Analyst Momente mit einer bestimmten Technik schätzen und/oder die Idee von set.portfolio.moments() erweitern. Eine benutzerdefinierte Momentfunktion kann beliebige benannte Argumente haben. Argumente mit den Namen R für die Asset-Renditen und portfolio für das Portfolio-Objekt werden jedoch automatisch erkannt und effizient verarbeitet. Daher wird dringend empfohlen, R für das Objekt mit den Asset-Renditen und portfolio für das Portfolio-Objekt zu verwenden.
Die benutzerdefinierte Momentfunktion sollte eine benannte Liste zurückgeben, in der die Elemente die Momente darstellen:
$mu: erster Moment (Vektor der erwarteten Renditen)$sigma: zweiter Moment (Varianz-Kovarianz-Matrix)$m3: dritter Moment (Coskewness-Matrix)$m4: vierter Moment (Cokurtosis-Matrix)
In dieser Übung schreibst du eine benutzerdefinierte Momentfunktion, um die Varianz-Kovarianz-Matrix mit einer robusten Methode zu schätzen. Wir verwenden die Funktion cov.rob() aus dem Paket MASS. Die Funktionssignatur soll die Argumente R für die Asset-Renditen und portfolio für das Spezifikationsobjekt enthalten. Die Funktion soll eine benannte Liste zurückgeben. Da du nur den zweiten Moment schätzt, musst du nur eine Liste mit einem entsprechend benannten Element zurückgeben. Diese Regeln kannst du auch anwenden, um benutzerdefinierte Momentfunktionen für andere Modelle wie Faktormodelle, GARCH-Modelle oder jede andere Modellklasse zu schreiben, die theoretisch eine bessere Schätzung liefert als die Stichprobenschätzung.
Diese Übung ist Teil des Kurses
Fortgeschrittene Portfolioanalyse in R
Anleitung zur Übung
- Definiere eine Funktion namens
moments_robust, die die Varianz-Kovarianz-Matrix der Asset-Renditen mit der Methode"mcd"schätzt. - Schätze die Portfoliomomente, die du gerade definiert hast. Weise sie einer Variablen namens
momentszu. Das ist eine Prüfung, um sicherzustellen, dass deine benutzerdefinierte Momentfunktion wie erwartet funktioniert. - Berechne die Varianz-Kovarianz-Matrix direkt mit
cov.rob()und prüfe, ob sie gleichmoments$sigmaist.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Define custom moment function
moments_robust <- function(R, portfolio){
out <- list()
out$___ <- cov.rob(R, method = ___)$cov
out
}
# Estimate the portfolio moments using the function you just defined
moments <- moments_robust(R = ___, portfolio = ___)
# Check the moment estimate
cov.rob(___, method = ___)$cov == moments$___