Zacznij terazZacznij za darmo

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

Zobacz kurs

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ówna moments$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$___
Edytuj i uruchom kod