全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3290 4
2016-02-23
TSA包里面的gBox函数的例子library(tseries)data(CREF)r.cref=diff(log(CREF))*100m1=garch(x=r.cref,order=c(1,1))summary(m1)#Box(m1,x=r.cref,method='squared')为啥跑出的结果是这样(M, filter = beta, method = "recursive", sides = 1, init = rep(sigma2,  :   dims [product 2]与对象长度[1]不匹配求高手们解答!!


二维码

扫码加我 拉你入群

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

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

全部回复
2016-3-4 19:04:50
我也碰到了这个问题,在自己的数据上。
题主有找到问题的原因么?
二维码

扫码加我 拉你入群

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

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

2016-3-7 15:01:33
查了下gBox的代码,问题出现在第28行
>> M = filter(M, filter = beta, method = "recursive", sides = 1, init = rep(sigma2, length(beta)))
简要的结论就是:M的列数和传入的init的长度不同, 导致filter函数里面报错。这里的M是列数为2的矩阵,init是长度为1的向量。

更详细的:
跟着代码追到filter内:
# line 11
>> nser <- NCOL(x)  # x指上面的M,nser为2
....
# line 48
>> dim(init) <- c(nfilt, nser) # 这里nflit为1, nser为2

我们知道,传入的init是个长度为1的向量。line 48将一个长度为1的向量,转换成一个(1,2)的矩阵,导致报错。

如果不指定init的话,就不会报错。因为filter函数的默认值是init = NULL,也就不会出现上面向量转矩阵的问题。

个人BB:
我不是太理解filter的意义和目的(gBox的计算思路也没仔细理解),所以不知道怎么修正。
不能确定是TSA的gBox函数出了问题,还是stats的filter出了问题。

刚开始我觉得stats包作为一个基础包,应该假设它是对的,需要修正gBox函数。
但是查看filter代码的时候,发现一个很明显的错误,见filter的line14.
所以想想也有可能是stats包出了问题。因为它假设init是NULL,并且在line 47的向量转矩阵的时候也没有进行错误处理。属于一种reasonable的BUG。

另:TSA包中gBox的函数说明,最后的gBox代码是打#号的,所以很可能作者本身也没跑通。
但是他应该比较确信自己的计算没有问题,所以还是放了出来。
二维码

扫码加我 拉你入群

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

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

2016-5-11 18:39:45
丁丁琪琪 发表于 2016-3-7 15:01
查了下gBox的代码,问题出现在第28行
>> M = filter(M, filter = beta, method = "recursive", sides = 1, ...
所以找到解决方案了吗
二维码

扫码加我 拉你入群

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

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

2016-7-8 15:59:39
我也出现这个报错,用R语言的时候
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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