Folosind formula w * Cov * t (w) pot genera o varianță de portofoliu negativă. Care sunt implicațiile unei varianțe negative? Ar trebui să presupun că este zero? O varianță negativă este supărătoare deoarece nu se poate lua rădăcina pătrată (pentru a estima deviația standard) a unui număr negativ fără a recurge la numere imaginare. De asemenea, nu pare în concordanță cu formula pentru varianță care este media abaterilor pătrate de la medie, deoarece pătratul produce întotdeauna un număr pozitiv.
Varianța negativă este vârful aisbergului problemei mele reale. Am o matrice de covarianță care reprezintă așteptările (ex-ante). Nu am și nu doresc să folosesc returnări istorice. Am 23 de clase de active. M-am jucat cu unele optimizări de portofoliu (nu înseamnă varianță). Am un set de ponderi (w) pentru un portofoliu optim. Am, de asemenea, un set de ponderi pentru etalonul meu (b). Calculez o eroare de urmărire. Pătratul erorii de urmărire ar trebui să fie (w-b) * cov * t (w-b). Aceasta este ceea ce este negativ.
Mai mult, greutățile mele sunt suficient de diferite de criteriul meu de referință, încât inspecția și intuiția îmi spun că zero este răspunsul greșit. Pentru a demonstra în continuare acest lucru, am generat 1000 de randamente aleatorii (folosind ipotezele mele pentru randament și matricea de covarianță) pentru clasele de active și am calculat 1000 de randamente pentru w și pentru b. Apoi am calculat diferența și apoi am luat varianța. Și din moment ce am un computer, am repetat asta de 1000 de ori. Cea mai mică eroare de urmărire (rădăcina pătrată a varianței diferențelor) a fost de 2,7%. Deci, sunt sigur că varianța ar trebui să fie pozitivă.
FWIW, am o matrice de covarianță de 23×23. Majoritatea provine dintr-o sursă publică ( Cercetare Afiliați ). Am adăugat obligațiuni municipale. Sunt destul de mulțumit de matricea de covarianță din alte utilizări pentru aceasta – de ex. varianța portofoliului de w și de b pare a fi mare.
Orice perspectivă asupra a ceea ce aș putea face greșit, fie din punct de vedere computerizat, fie prin interpretare, ar fi apreciată. Toată munca mea este în R și aș putea împărtăși niște date și cod.
Comentarii
- Matricea dvs. nu este semi-definită pozitivă, deci nu este o matrice de covarianță. Aceasta este o problemă cu matricile de „covarianță” proiectate „manual”. Există modalități de a crea o matrice de covarianță legitimă care este „aproape” (într-un anumit sens de distanță) de matricea dvs.
- Puteți posta datele matricei dvs. var / cov? După cum indică comentariul de mai sus, este foarte probabil să nu fie semidefinit pozitiv.
Răspuns
afișat de alți utilizatori aici, matricea de covarianță proiectată aparent nu este pozitiv-definită și, prin urmare, obțineți acest comportament ciudat.
Vă rugăm să rețineți că aceasta nu este doar o problemă matematică, ci una economică.
Ca exemplu de jucărie, priviți acest lucru: dacă A și B sunt puternic corelate negativ (să zicem -1), atunci nu pot ambele să fie corelat negativ (din nou -1) cu un al treilea C. Puteți proiecta (= notați) o astfel de matrice, dar acest lucru nu puteți întâlni în matematică corectă sau în viața reală.
Ce puteți face:
- Alegeți varianțe non-negative pentru fiecare activ $ V = diag (v_1, v_2, \ ldots, v_n) $
- alegeți o matrice pozitiv-definită pentru corelațiile $ C $
- Calculați $ Cov = \ sqrt {V} C \ sqrt {V} $ unde rădăcina pătrată este componentă.
Calculul din al treilea pas este discutat pe stack.overflow . Pachetul corpcor oferă modalități de a reduce covarianțele la țintele alese și oferă verificări pentru definirea pozitivă.
Funcția make.positive.definite
este disponibil care găsește cea mai apropiată (într-un sens ales) matrice pozitiv-definită de una dată.
Răspuns
După cum a subliniat Ivan în comentariul său, matricea dvs. nu este o matrice de covarianță validă. Altfel spus, nu există un set de date (cu observații complete) din care să fi putut estima o astfel de matrice de covarianță.
Cel mai simplu mod de a repara o astfel de matrice este înlocuirea valorilor proprii negative ale matricei cu zerouri. . Această metodă este implementată în funcția repairMatrix
din pachetul R NMOF
, pe care îl mențin.
Răspuns
Comentariul lui Ivan este un răspuns bun. Adăug ceva, dar creez în principal un răspundeți în locul unui comentariu pentru a vă asigura că rezultatele căutării arată că există un răspuns. Matricea mea de covarianță ar trebui să fie semidefinită pozitivă. După cum înțeleg, acest lucru se traduce aproximativ ca un număr non-negativ. Când vă înmulțiți cu acesta, veți obține zero sau ceva cu același semn.Iată un link către o scurtă explicație a semi definită pozitivă și definită pozitivă pe care am considerat-o utilă. Mulțumesc Ivan.
Comentarii
- Acest lucru nu este corect. Pentru a verifica matricea dvs. este pozitivă semi-definită, aveți mai multe opțiuni, fiind cele mai ușor de verificat dacă toate valorile proprii sunt pozitive. O altă alternativă bună este să verificați dacă principalii săi minori principali sunt toți pozitivi. Matlab poate verifica că într-o fracțiune de secundă.
- O matrice semidefinită pozitivă implică faptul că $ x ‘ \ Sigma x $ este negativ, pentru orice $ x $ real. Pentru o matrice definitivă pozitivă, $ x ‘ \ Sigma x $ este strict mai mare decât zero.