我有一个时间序列的回报,我需要计算协方差矩阵和一些基于协方差矩阵的测量。
但是我发现当我格式化时间的时候,结果会和没有日期格式的不一样。
#change the date format
raw['date']=pd.to_datetime(raw['date'])
字符串
特别是,如果您可以访问我的script和数据文件:
1.如果我们使用data-m3来运行脚本,无论我们是否改变第三个单元格中的日期格式,delta_P2的结果总是相同的。
1.如果我们使用data-m6或data-m9来运行脚本,并且如果我们更改第三个单元格中的日期格式,则delta_P2的结果会发生变化。
1.这三个数据文件的结构非常相似,只是观测次数不同。
1.我仔细研究了delta_P2的计算,发现使用的协方差矩阵是相同的,但是当做一些矩阵求逆时,结果是不同的。
# Calculate delta_P2
delta_P2=gamma/2*((V21.values-
V20.values.dot(np.linalg.pinv(V00.values).dot(V01.values))).dot(I1)
+((V20.values-
V21.values.dot(np.linalg.pinv(V11.values).dot(V10.values))).dot(np.linalg.pinv(V00.values-
V01.values.dot(np.linalg.pinv(V11.values).dot(V10.values)))).dot(V02.values-
V01.values.dot(np.linalg.pinv(V11.values).dot(V12.values)))-
V20.values.dot(np.linalg.pinv(V00.values).dot(V02.values))).dot(I2)
+V21.values.dot(np.linalg.pinv(V11.values).dot(V10.values)).dot(np.linalg.pinv(V00.values-
V01.values.dot(np.linalg.pinv(V11.values).dot(V10.values)))).dot(V02.values-
V01.values.dot(np.linalg.pinv(V11.values).dot(V12.values))).dot(I2)
+V21.values.dot(np.linalg.pinv(V11.values-
V10.values.dot(np.linalg.pinv(V00.values).dot(V01.values)))).dot(V12.values-
V10.values.dot(np.linalg.pinv(V00.values).dot(V02.values))).dot(I2)
)
型
我知道Python中的矩阵求逆可能会因为某些原因而略有不同。但我更困惑的是为什么错误只发生在某些文件中,而不是所有情况下。
1条答案
按热度按时间vhmi4jdf1#
我正在使用Python 3.11和Pandas 2.1.3和Numpy 1.26.2。我尝试使用不同的文件和不同的日期格式运行您的代码,
delta_P2
打印出相同的结果。你仍然得到不同的值吗?如何将Pandas和Numpy更新到最新版本。确保你正在转换的数据是你期望用作输入的数据。