楼主: jayce
6099 8

[问答] Matlab计算的收益率协方差矩阵为何不是半正定矩阵呢? [推广有奖]

  • 0关注
  • 0粉丝

大专生

5%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
803 点
帖子
19
精华
0
在线时间
33 小时
注册时间
2008-9-8
最后登录
2022-1-26

楼主
jayce 发表于 2014-7-7 16:56:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
Matlab计算的收益率协方差矩阵为何不是半正定矩阵呢?理论上协方差矩阵应该是半正定的,matlab计算出的特征值会出现非常小的负数,这是为什么呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB 协方差矩阵 matla atlab 正定矩阵 收益率 正定

沙发
victorwxw 发表于 2014-7-7 23:18:58
这是因为在计算机运算时是存在截断误差的,由这种误差导致计算机求协方差时会出现非正定的情况。而具体该怎么处理这种情况我也不会,还要请教高手指导。

藤椅
jayce 发表于 2014-7-8 09:05:28
victorwxw 发表于 2014-7-7 23:18
这是因为在计算机运算时是存在截断误差的,由这种误差导致计算机求协方差时会出现非正定的情况。而具体该怎 ...
多谢多谢!这个怎么解决,有没有高手指点。。。

板凳
matlab-007 发表于 2015-3-1 15:29:44
err_cnt = 0;

for i = 1:1000
    try
        a = rand(3);
        c = cov(a) + .0001 * eye(3);
        m = mean(a);
        mvnpdf(a, m, c);
    catch me
        err_cnt = err_cnt + 1;
    end
end
Results in 0 errors.

报纸
millimeter 发表于 2015-12-5 19:23:32
matlab-007 发表于 2015-3-1 15:29
err_cnt = 0;

for i = 1:1000
您好,能不能麻烦您稍微解释一下?这个程序是放在哪里可以消除错误?

地板
人群呵气如林 发表于 2017-4-4 15:26:15 来自手机
jayce 发表于 2014-7-7 16:56
Matlab计算的收益率协方差矩阵为何不是半正定矩阵呢?理论上协方差矩阵应该是半正定的,matlab计算出的特征 ...
请问楼主当时是怎么解决这个问题的呢 我也遇到了 好无助的感觉啊

7
菜园一块田 学生认证  发表于 2017-7-9 00:17:26
millimeter 发表于 2015-12-5 19:23
您好,能不能麻烦您稍微解释一下?这个程序是放在哪里可以消除错误?
楼主解决了吗?遇到同样问题呢

8
hildegardvon 发表于 2017-9-8 09:42:00
怎么解决呢?

9
elzat~~ 发表于 2021-12-15 14:02:21
我当时也遇到了这个问题,采取的解决办法是利用shrink相关系数矩阵来使得协方差矩阵变为半正定,以下是代码实现:
def xiefangcha(cov,corr):#给定相关系数矩阵和协方差矩阵,求出相应的协方差矩阵
    a=np.eye(100)#先生产一个100*100的单位阵,再一个个把协方差的对角线输进去
    for i in range(100):
        a[i][i]=cov.iloc[i,i]**0.5
    cov_new=a@corr@a
    return cov_new
def shrinkxishu(data,w):#shrink相关系数矩阵
    for i in range(100):
        for j in range(100):
            if i!=j:
                data.iloc[i,j]=data.iloc[i,j]*(1-w)
    return data

def main(data,w,cov):
#     data_corr1=pd.DataFrame()
#     data_cov1=pd.DataFrame()
    corr1=shrinkxishu(data,w)#求出shrink后的相关系数矩阵
    cov1=xiefangcha(cov,corr1)#对应shrink后的协方差矩阵
    return cov1
在选取w时,令w=0.0000001这种特别小的(0,1)之间的数就可以啦,相当于对原来的矩阵几乎没有做改变

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 15:47