简短的问题。方差 - 协方差矩阵应该是正半定且对称的。使用Pandas函数.cov()不会在我的结尾返回正矩阵。相反,所有非对角线条目都是否定的:
首先,我生成几何布朗运动并计算日志返回
import numpy as np
import pandas as pd
def gen_paths(S0, r, sigma, T, M, I):
dt = float(T) / M
paths = np.zeros((M + 1, I), np.float64)
paths[0] = S0
for t in range(1, M + 1):
rand = np.random.standard_normal(I)
rand = (rand - rand.mean()) / rand.std()
paths[t] = paths[t - 1] * np.exp((r - 0.5 * sigma ** 2) * dt +
sigma * np.sqrt(dt) * rand)
return paths
S0 = 100.
r = 0.05
sigma = 0.2
T = 1.0
M = 500
I = 5
paths = gen_paths(S0, r, sigma, T, M, I)
data = pd.DataFrame(paths)
rets = np.log(data / data.shift(1)).dropna()
现在,在数据帧上运行pandas .cov()函数返回
In[1]: rets.cov()
Out[1]:
0 1 2 3 4
0 0.000086 -0.000022 -0.000026 -0.000016 -0.000021
1 -0.000022 0.000080 -0.000018 -0.000022 -0.000018
2 -0.000026 -0.000018 0.000082 -0.000017 -0.000021
3 -0.000016 -0.000022 -0.000017 0.000074 -0.000019
4 -0.000021 -0.000018 -0.000021 -0.000019 0.000078
给出了对称性。肯定不是......