Variância negativa?

Usando a fórmula w * Cov * t (w), posso gerar uma variância negativa do portfólio. Quais são as implicações de uma variação negativa? Devo apenas assumir que é zero? Uma variância negativa é problemática porque não se pode tirar a raiz quadrada (para estimar o desvio padrão) de um número negativo sem recorrer a números imaginários. Também não parece consistente com a fórmula da variância, que é a média dos desvios quadrados da média, uma vez que o quadrado sempre produz um número positivo.

A variância negativa é a ponta do iceberg do meu problema real. Eu tenho uma matriz de covariância que representa as expectativas (ex-ante). Não tenho e não desejo usar retornos históricos. Tenho 23 classes de ativos. Eu tenho tentado otimizar o portfólio (não a variância média). Eu venho com um conjunto de pesos (w) para um portfólio ideal. Eu também tenho um conjunto de pesos para meu benchmark (b). Estou calculando um erro de rastreamento. O quadrado do erro de rastreamento deve ser (w-b) * cov * t (w-b). Isso é o que é negativo.

Além disso, meus pesos são suficientemente diferentes do meu benchmark que a inspeção e a intuição me dizem que zero é a resposta errada. Para provar isso ainda mais, gerei 1000 retornos aleatórios (usando minhas suposições para retorno e a matriz de covariância) para as classes de ativos e calculei 1000 retornos para w e para b. Em seguida, calculei a diferença e tirei a variância. E como tenho um computador, repeti isso 1000 vezes. O menor erro de rastreamento (raiz quadrada da variância das diferenças) foi de 2,7%. Portanto, estou confiante de que a variação deve ser positiva.

FWIW, tenho uma matriz de covariância 23×23. A maior parte dela vem de uma fonte pública ( Pesquisa Afiliados ). Eu adiciono títulos municipais. Estou muito feliz com a matriz de covariância em que outros usos para ela – por exemplo, a variância do portfólio de w e de b parece ser grande.

Qualquer insight sobre o que eu posso estar fazendo de errado, seja computacionalmente ou por interpretação, seria apreciado. Todo o meu trabalho é em R e eu poderia compartilhar alguns dados e código.

Comentários

  • Sua matriz não é semi-definida positiva, portanto, não é uma matriz de covariância. Esse é um problema com matrizes de “covariância” projetadas “manualmente”. Existem maneiras de criar uma matriz de covariância legítima que está “próxima” (em algum sentido de distância) de sua matriz.
  • Você pode postar os dados de sua matriz var / cov? Como o comentário acima indica, é altamente provável que não seja um semi-definido positivo.

Resposta

Conforme apontado por outros usuários aqui, sua matriz de covariância projetada aparentemente não é definida positivamente e, portanto, você obtém este comportamento estranho.

Observe que este não é apenas um problema matemático, mas também econômico.

Como um exemplo de brinquedo, olhe para isto: Se A e B são fortemente correlacionados negativamente (digamos -1), então eles não podem ambos ser negativamente correlacionado (novamente -1) a um terceiro C. Você pode projetar (= escrever) tal matriz, mas isso é algo que você não pode encontrar em matemática correta ou na vida real.

O que você pode fazer:

  1. Escolha variâncias não negativas para cada ativo $ V = diag (v_1, v_2, \ ldots, v_n) $
  2. escolha uma matriz definida positiva para as correlações $ C $
  3. Calcule $ Cov = \ sqrt {V} C \ sqrt {V} $ onde a raiz quadrada é componente a componente.

O cálculo na terceira etapa é discutido em stack.overflow . O pacote corpcor oferece maneiras de reduzir as covariâncias para alvos escolhidos e oferece verificações de definição positiva.

A função make.positive.definite está disponível para encontrar a matriz definida positiva mais próxima (em um sentido escolhido) de algum dado.

Resposta

Como Ivan apontou em seu comentário, sua matriz não é uma matriz de covariância válida. Em outras palavras, não existe um conjunto de dados (com observações completas) a partir do qual você poderia ter estimado tal matriz de covariância.

A maneira mais simples de reparar tal matriz é substituir os autovalores negativos da matriz por zeros . Este método é implementado na função repairMatrix no pacote R NMOF , que mantenho.

Resposta

O comentário de Ivan é uma boa resposta. Estou adicionando algo, mas principalmente criando um responda em vez de um comentário para garantir que os resultados da pesquisa mostrem que há uma resposta. Minha matriz de covariância deve ser semi-definida positiva. Pelo que entendi, isso se traduz aproximadamente em um número não negativo. Quando você multiplica por ele, você obterá zero ou algo com o mesmo sinal.Aqui está um link para uma breve explicação de semi definido positivo e definido positivo que eu achei útil. Obrigado Ivan.

Comentários

  • Incorreto. Para verificar se sua matriz é positiva semidefinida, você tem várias opções, sendo a mais fácil verificar se todos os autovalores são positivos. Outra boa alternativa é verificar se os principais menores principais são todos positivos. O Matlab pode verificar isso em uma fração de segundo.
  • Uma matriz semi-definida positiva implica que $ x ‘ \ Sigma x $ é não negativo, para qualquer $ x $ real. Para uma matriz definida positiva, $ x ‘ \ Sigma x $ é estritamente maior que zero.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *