Definiowanie własnej funkcji momentów
W wielu przypadkach zadań optymalizacji z ograniczeniami zarządzający portfelem lub analityk może chcieć estymować momenty za pomocą konkretnej techniki i/lub rozszerzyć możliwości funkcji set.portfolio.moments(). Własna, niestandardowa funkcja momentów może przyjmować dowolne nazwane argumenty. Argumenty o nazwie R (dla stóp zwrotu aktywów) oraz portfolio (dla obiektu portfela) są jednak wykrywane automatycznie i obsługiwane w efektywny sposób. Z tego powodu zdecydowanie zaleca się używanie nazwy R dla obiektu ze stopami zwrotu i nazwy portfolio dla obiektu portfela.
Niestandardowa funkcja momentów powinna zwracać nazwaną listę, której elementy reprezentują kolejne momenty:
$mu: pierwszy moment (wektor oczekiwanych stóp zwrotu)$sigma: drugi moment (macierz wariancji-kowariancji)$m3: trzeci moment (macierz koskośności)$m4: czwarty moment (macierz kokurtozy)
W tym ćwiczeniu napiszesz własną funkcję momentów, która estymuje macierz wariancji-kowariancji metodą odporną. Użyjemy do tego funkcji cov.rob() z pakietu MASS. Sygnatura funkcji powinna zawierać argumenty R dla stóp zwrotu aktywów oraz portfolio dla obiektu specyfikacji. Funkcja powinna zwracać nazwaną listę. Ponieważ estymujemy tylko drugi moment, lista musi zawierać jeden odpowiednio nazwany element. Te same zasady możesz stosować do pisania własnych funkcji momentów dla innych modeli – takich jak modele czynnikowe, modele GARCH lub dowolne inne klasy modeli, które teoretycznie powinny dawać lepsze estymaty niż estymata z próby.
To ćwiczenie jest częścią kursu
Analiza portfela – poziom średniozaawansowany w R
Instrukcje do ćwiczenia
- Zdefiniuj funkcję o nazwie
moments_robust, która estymuje macierz wariancji-kowariancji stóp zwrotu aktywów, używając metody"mcd". - Estymuj momenty portfela za pomocą właśnie zdefiniowanej funkcji. Przypisz wynik do zmiennej o nazwie
moments. Ten krok służy sprawdzeniu, czy twoja niestandardowa funkcja momentów działa poprawnie. - Oblicz macierz wariancji-kowariancji bezpośrednio za pomocą funkcji
cov.rob()i sprawdź, czy jest równamoments$sigma.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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$___