全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3795 6
2012-07-26
现在在做一个程序,要用到dmvnorm(x,n,Sigma)这个函数,要求Sigma是对称矩阵,但是遇到了这种情况
            [,1]      [,2]       [,3]       [,4]        [,5]       [,6]       [,7]       [,8]        [,9]      [,10]      [,11]
[1,]  6.6374143  4.962369 -2.3153074 -0.5919525  -4.0075043 -1.5443823 -2.0129990 -1.3462416  -2.8998950 -1.7886974  23.881760
[2,]  4.9623694  4.442595 -2.0299875 -0.5298630  -3.5390446 -1.3691175 -1.8021512 -1.2052321  -2.5961510 -1.6013436  20.870953
[3,] -2.3153074 -2.029988  1.4122368  0.2421631   1.6446589  0.6332350  0.8234701  0.5507155   1.1862782  0.7317136  -9.824725
[4,] -0.5919525 -0.529863  0.2421631  0.7098677   0.4221533  0.1633084  0.2149404  0.1437466   0.3096398  0.1909903  -2.489836
[5,] -4.0075043 -3.539045  1.6446589  0.4221533   3.1927357  1.0993468  1.4356233  0.9601077   2.0681366  1.2756567 -16.953745
[6,] -1.5443823 -1.369118  0.6332350  0.1633084   1.0993468  1.3881403  0.5553863  0.3714280   0.8000809  0.4935015  -6.522841
[7,] -2.0129990 -1.802151  0.8234701  0.2149404   1.4356234  0.5553863  0.7310477  0.4889058   1.0531359  0.6495895  -8.466360
[8,] -1.3462416 -1.205232  0.5507155  0.1437466   0.9601077  0.3714280  0.4889058  0.3269675   0.7043100  0.4344286  -5.662083
[9,] -2.8998950 -2.596151  1.1862782  0.3096398   2.0681366  0.8000809  1.0531359  0.7043100   1.5171312  0.9357885 -12.196460
[10,] -1.7886974 -1.601344  0.7317136  0.1909903   1.2756567  0.4935015  0.6495895  0.4344286   0.9357886  0.5772080  -7.522983
[11,] 23.8817607 20.870953 -9.8247256 -2.4898359 -16.9538073 -6.5228405 -8.4663604 -5.6620825 -12.1965070 -7.5229826 324.791770
其实这个矩阵是对称的,只不过由于小数点后的位数不同,导致了R认为它是不对称的。因为dmvnorm这个函数是在一个包里调用的,所以不能用round(Sigma,5)等方法强制小数点后位数,请问应该怎么解决?我感觉是不是应该修改全局参数?比如options(digits=5),但这样也不行。
二维码

扫码加我 拉你入群

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

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

全部回复
2012-7-26 20:35:15
Sigma <- (Sigma + t(Sigma))/2
二维码

扫码加我 拉你入群

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

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

2012-7-27 00:08:08
qoiqpwqr 发表于 2012-7-26 20:35
Sigma
多谢。不过这样要修改内部的函数,我是用的sspir包里专门做卡尔曼滤波的kfliter函数,这个函数调用了dmvnorm,所以这样就要修改kfliter这个函数了。请问有没有不用修改内部函数,从外部环境解决的办法?类似于设定一下全局环境里的精度?
二维码

扫码加我 拉你入群

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

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

2012-7-27 02:29:24
zippo414 发表于 2012-7-27 00:08
多谢。不过这样要修改内部的函数,我是用的sspir包里专门做卡尔曼滤波的kfliter函数,这个函数调用了dmvn ...
Sigma是怎么得来的?
二维码

扫码加我 拉你入群

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

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

2012-8-1 23:37:25
qoiqpwqr 发表于 2012-7-27 02:29
Sigma是怎么得来的?
在kfilter()这个函数内部要调用dmvnorm。Sigma是有卡尔曼滤波求得的
二维码

扫码加我 拉你入群

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

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

2012-8-2 09:54:15
帮顶
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群