Usando la fórmula w * Cov * t (w) puedo generar una variación de cartera negativa. ¿Cuáles son las implicaciones de una varianza negativa? ¿Debería suponer que es cero? Una varianza negativa es problemática porque no se puede sacar la raíz cuadrada (para estimar la desviación estándar) de un número negativo sin recurrir a números imaginarios. Tampoco parece consistente con la fórmula para la varianza que es el promedio de las desviaciones al cuadrado de la media, ya que el cuadrado siempre produce un número positivo.
La variación negativa es la punta del iceberg de mi problema real. Tengo una matriz de covarianza que representa las expectativas (ex ante). No tengo ni deseo utilizar rendimientos históricos. Tengo 23 clases de activos. He estado jugando con algunas optimizaciones de cartera (no con varianza media). Se me ocurrió un conjunto de ponderaciones (w) para una cartera óptima. También tengo un conjunto de ponderaciones para mi índice de referencia (b). Estoy calculando un error de seguimiento. El cuadrado del error de seguimiento debe ser (w-b) * cov * t (w-b). Eso es lo negativo.
Además, mis pesos son lo suficientemente diferentes de mi punto de referencia que la inspección y la intuición me dicen que cero es la respuesta incorrecta. Para demostrar esto, generé 1000 retornos aleatorios (usando mis supuestos de retorno y la matriz de covarianza) para las clases de activos y calculé 1000 retornos para w y para b. Luego calculé la diferencia y luego tomé la varianza. Y como tengo una computadora, lo repetí 1000 veces. El error de seguimiento más bajo (raíz cuadrada de la varianza de las diferencias) fue del 2,7%. Así que estoy seguro de que la varianza debe ser positiva.
FWIW, tengo una matriz de covarianza de 23×23. La mayor parte proviene de una fuente pública ( Research Afiliados ). Añado bonos municipales. Estoy bastante satisfecho con la matriz de covarianza en los otros usos que se le dan, p. Ej. la varianza de la cartera de wy de b parece ser grande.
Se agradecería cualquier idea de lo que podría estar haciendo mal, ya sea computacionalmente o por interpretación. Todo mi trabajo está en R y podría compartir algunos datos y código.
Comentarios
- Su matriz no es semi-definida positiva por lo tanto no es una matriz de covarianza. Ese es un problema con las matrices de “covarianza” diseñadas “manualmente”. Hay formas de crear una matriz de covarianza legítima que está “cerca” (en cierto sentido de distancia) de su matriz.
- ¿Puede publicar los datos de su matriz var / cov? Como indica el comentario anterior, es muy probable que no sea un semi definido positivo.
Responder
Como se señaló otros usuarios aquí su matriz de covarianza diseñada aparentemente no es positiva-definida y por lo tanto obtiene este comportamiento extraño.
Tenga en cuenta que esto no es solo un problema matemático sino económico.
Como un ejemplo de juguete, mira esto: si A y B están fuertemente correlacionados negativamente (digamos -1), entonces no pueden ambos estar correlacionado negativamente (de nuevo -1) con una tercera C. Puede diseñar (= escribir) una matriz de este tipo, pero esto es algo que no puede encontrar en las matemáticas correctas o en la vida real.
¿Qué puede hacer:
- Elija varianzas no negativas para cada activo $ V = diag (v_1, v_2, \ ldots, v_n) $
- elija una matriz definida positiva para las correlaciones $ C $
- Calcule $ Cov = \ sqrt {V} C \ sqrt {V} $ donde la raíz cuadrada es por componentes.
El cálculo en el tercer paso se analiza en stack.overflow . El paquete corpcor ofrece formas de reducir las covarianzas de los objetivos elegidos y ofrece comprobaciones de definición positiva.
La función make.positive.definite
está disponible que encuentra la matriz positiva-definida más cercana (en un sentido elegido) a una determinada.
Respuesta
Como Ivan señaló en su comentario, su matriz no es una matriz de covarianza válida. Dicho de otra manera, no existe un conjunto de datos (con observaciones completas) a partir del cual se podría haber estimado dicha matriz de covarianza.
La forma más sencilla de reparar dicha matriz es reemplazar los valores propios negativos de la matriz por ceros . Este método se implementa en la función repairMatrix
en el paquete R NMOF
, que mantengo.
Respuesta
El comentario de Ivan es una buena respuesta. Estoy agregando algo pero principalmente creando un responder en lugar de un comentario para asegurarse de que los resultados de la búsqueda muestren que hay una respuesta. Mi matriz de covarianza debe ser positiva semi definida. Según tengo entendido, esto se traduce aproximadamente en un número no negativo. Cuando lo multiplicas, obtendrás cero o algo con el mismo signo.Aquí hay un enlace a una breve explicación de semidefinido positivo y definido positivo que encontré útil. Gracias Iván.
Comentarios
- Esto no es correcto. Para comprobar si su matriz es positiva semi definida, tiene varias opciones, siendo la más fácil comprobar que todos los valores propios son positivos. Otra buena alternativa es comprobar si sus principales menores principales son todos positivos. Matlab puede verificar eso en una fracción de segundo.
- Una matriz semidefinida positiva implica que $ x ‘ \ Sigma x $ no es negativo cualquier $ x $ real. Para una matriz definida positiva, $ x ‘ \ Sigma x $ es estrictamente mayor que cero.