Utilizzando la formula w * Cov * t (w) posso generare una varianza di portafoglio negativa. Quali sono le implicazioni di una varianza negativa? Devo semplicemente presumere che sia zero? Una varianza negativa è fastidiosa perché non si può prendere la radice quadrata (per stimare la deviazione standard) di un numero negativo senza ricorrere a numeri immaginari. Inoltre, non sembra coerente con la formula della varianza che è la media delle deviazioni al quadrato dalla media poiché il quadrato produce sempre un numero positivo.
La varianza negativa è la punta delliceberg del mio vero problema. Ho una matrice di covarianza che rappresenta le aspettative (ex ante). Non ho e non desidero utilizzare i rendimenti storici. Ho 23 classi di attività. Ho giocato con un po di ottimizzazione del portafoglio (non significa varianza). Ho escogitato una serie di pesi (w) per un portafoglio ottimale. Ho anche una serie di pesi per il mio benchmark (b). Sto calcolando un errore di tracciamento. Il quadrato dellerrore di tracciamento dovrebbe essere (w-b) * cov * t (w-b). Questo è ciò che è negativo.
Inoltre, i miei pesi sono sufficientemente diversi dal mio benchmark che lispezione e lintuizione mi dicono che zero è la risposta sbagliata. Per dimostrare ulteriormente ciò, ho generato 1000 rendimenti casuali (utilizzando le mie ipotesi di rendimento e la matrice di covarianza) per le classi di attività e ho calcolato 1000 rendimenti per w e per b. Poi ho calcolato la differenza e poi ho preso la varianza. E dato che ho un computer lho ripetuto 1000 volte. Il tracking error più basso (radice quadrata della varianza delle differenze) è stato del 2,7%. Quindi sono sicuro che la varianza dovrebbe essere positiva.
FWIW, ho una matrice di covarianza 23×23. La maggior parte proviene da una fonte pubblica ( Ricerca Affiliati ). Aggiungo obbligazioni municipali. Sono abbastanza soddisfatto della matrice di covarianza in altri usi, ad es. la varianza del portafoglio di w e di b sembra essere grande.
Qualsiasi intuizione su ciò che potrei fare di sbagliato sia dal punto di vista computazionale che interpretativa sarebbe apprezzata. Tutto il mio lavoro è in R e potrei condividere alcuni dati e codice.
Commenti
- La tua matrice non è semi-definita positiva quindi non lo è una matrice di covarianza. Questo è un problema con le matrici di “covarianza” progettate “manualmente”. Ci sono modi per creare una matrice di covarianza legittima che sia “vicina” (in un certo senso di distanza) dalla tua matrice.
- Puoi pubblicare i dati della tua matrice var / cov? Come indica il commento sopra, è molto probabile che non sia semi definito positivo.
Risposta
Come indicato fuori da altri utenti qui la tua matrice di covarianza progettata apparentemente non è definita positiva e quindi ottieni questo strano comportamento.
Tieni presente che questo non è solo un problema matematico ma economico.
Come esempio di giocattolo, guarda questo: se A e B sono fortemente correlati negativamente (diciamo -1), allora non possono entrambi essere correlato negativamente (di nuovo -1) a un terzo C. Puoi progettare (= scrivere) una tale matrice, ma questo è qualcosa che non puoi incontrare in matematica corretta o nella vita reale.
Cosa puoi fare:
- Scegli varianze non negative per ogni asset $ V = diag (v_1, v_2, \ ldots, v_n) $
- scegli una matrice definita positiva per le correlazioni $ C $
- Calcola $ Cov = \ sqrt {V} C \ sqrt {V} $ dove la radice quadrata è per componenti.
Il calcolo nel terzo passaggio è discusso in stack.overflow . Il pacchetto corpcor offre modi per ridurre le covarianze ai target scelti e offre controlli per la definizione positiva.
La funzione make.positive.definite
è disponibile che trova la matrice definita positiva più vicina (in un certo senso) a una determinata matrice.
Risposta
Come ha sottolineato Ivan nel suo commento, la tua matrice non è una matrice di covarianza valida. In altre parole, non esiste un set di dati (con osservazioni complete) da cui si potrebbe stimare una tale matrice di covarianza.
Il modo più semplice per riparare una tale matrice è sostituire gli autovalori negativi della matrice con zeri . Questo metodo è implementato nella funzione repairMatrix
nel pacchetto R NMOF
, che mantengo.
Risposta
Il commento di Ivan è una buona risposta. Sto aggiungendo qualcosa ma principalmente creando un rispondi invece di un commento per assicurarti che i risultati della ricerca mostrino che cè una risposta. La mia matrice di covarianza dovrebbe essere semi definita positiva. A quanto ho capito, questo si traduce approssimativamente in un numero non negativo. Quando moltiplichi per esso, otterrai zero o qualcosa con lo stesso segno.Ecco un collegamento a una breve spiegazione di semi definita positiva e definita positiva che ho trovato utile. Grazie Ivan.
Commenti
- Questo non è corretto. Per verificare che la tua matrice sia semi definita positiva hai diverse opzioni tra cui la più semplice per verificare che tutti gli autovalori siano positivi. Unaltra buona alternativa è verificare se i suoi principali minori principali sono tutti positivi. Matlab può verificarlo in una frazione di secondo.
- Una matrice semi-definita positiva implica che $ x ‘ \ Sigma x $ non è negativa, per qualsiasi $ x $ reale. Per una matrice definita positiva, $ x ‘ \ Sigma x $ è strettamente maggiore di zero.