【发布时间】:2015-06-07 12:02:05
【问题描述】:
我正在努力识别 svar 模型,并且对以下外观函数有一些疑问
我们想要估计 B_22 的值,它是一个 2x2 矩阵,以及 Omega(在我的代码中,我将此矩阵称为“L”),它的对角线上的参数未知,否则为零。因此:
B <- matrix(c(theta[1:4]),nrow=2,ncol=2)
(编辑:欧米茄:)
L <- matrix(c(theta[5],0,0,theta[6]),nrow=2,ncol=2)
Sigma1 和 Sigma2 是已知的,并使用任意选择的 2xn 向量“u”进行估计。
- 当我计算代码时,我得到了几十个错误,因为 log(det(.)) 产生了负值。这是不可能的,因为 B* t(B) 和 B* L* t(B) 是协方差矩阵,因此它们的行列式必须为正。我已经阅读了几篇关于使用估计方法 L-BFGS-B 和限制参数的帖子,但是(i)应用下限在源代码中给我一个错误,并且(ii)我不确定是否以这种方式限制参数会扭曲优化结果。我怎么解决这个问题?限制参数的 L-BFGS-B 方法是否正确?
- 我的第二个问题是关于 optim() 函数的起始值。我确实意识到改变起始值会导致不同的优化结果。我如何解释这个结果?这是否意味着我试图估计的模型没有被充分识别?
我希望我提供的信息足以回答我的问题,并且我的格式是可读的。任何帮助或提示(也关于我的编码,因为我对编程/R 编码相对较新)表示赞赏。
LL<-function(theta,u){
sig1<-1/63*u[,1:63]%*%t(u[,1:63]) #breaking points 63,28 has been choosen arbirarily
sig2<-1/28*u[,64:92]%*%t(u[,64:92])
B<-matrix(c(theta[1:4]),nrow=2,ncol=2)
L<-matrix(c(theta[5],0,0,theta[6]),nrow=2,ncol=2)
logl<- -(63/2)*(log(det(B%*%t(B))) + sum(diag(sig1%*%solve(B%*%t(B))))) - (28/2)*(log(det(B%*%L%*%t(B))) + sum(diag(sig2%*%solve(B%*%L%*%t(B)))))
return(-logl)
}
x1<-optim(c(17,5,3,4,27,13),LL,method="BFGS",u=u)
u[1,] -2.0739942 -2.152562 6.3569442 8.813618 -4.4750621 -2.20355587 -2.32608476 -5.32235864 -1.1783355 2.3010929 -2.3281323 4.8122883 -0.6523752 2.1975880 4.4731109 -3.880578 2.82303865 -0.29450020 -2.2489995 -7.2447985 4.996482982 1.04475829 0.2690333 -5.4314632 4.5957677 -0.9616699 0.5806076 1.6844795 -5.1626010 -1.2564188 -3.0584362 2.34260683 -1.695052 3.51939426 4.43626989 3.3296631 3.5169510 -2.92703345 -1.4131281 7.66182944 -1.40676753 -3.70130317 -0.9010226 -3.91265962 -0.85604657 0.6541337 -3.3668541 -9.7513509 -2.2203572 0.348708268 -0.51795228 -2.644891 -0.2826551 -3.5819070 -2.2470037 -3.829720 0.7522229 1.57592864 -1.15328558 2.9035609 6.7805296 3.2419771 5.607151 0.4836202 2.6242557 3.4674478 0.3317039 3.661060 -2.7323857 -3.85183300 -13.91937338 -29.9294984 -0.4273221 1.96726064 4.0437405 3.505792 12.0125181 3.7582406 3.7173530 11.0320698 0.2876495 1.7703799 -0.75943651 1.38642025 0.1694661 -0.09183614 -3.4427353 -3.42262435 4.56156149 1.27963086 2.3382191 4.471848294 -1.25201443
u[2,] -0.4976848 -0.337874 -0.4690339 1.376631 -0.2000215 -0.07479611 -0.09590784 0.01132767 0.0859742 0.2965264 0.1478579 -0.1033833 -0.1089317 -0.3412644 -0.4387209 -0.295550 -0.04845632 0.01153943 0.1252204 0.2691985 0.006748248 0.03430976 0.1910270 0.4734956 0.1047363 0.2233812 0.1416566 -0.1008976 -0.3944692 -0.3639312 -0.1398038 -0.01805854 -0.144216 -0.03937892 -0.09407875 -0.2500851 -0.5786795 -0.05531415 -0.1411416 -0.03722923 -0.01203752 0.07773881 0.2560005 0.06210876 0.09857757 0.1958526 0.3224293 0.4340536 0.1937018 0.001760465 0.04619835 -0.089682 0.2107282 0.2445777 0.2605063 1.170965 0.1568308 -0.03179252 -0.06910847 0.1334419 -0.2214261 -0.2858338 -0.284578 -0.4268307 -0.2218157 -0.1590297 -0.1605659 -0.341321 -0.0825591 -0.09752851 0.08405546 0.3481321 0.3238180 -0.03529309 -0.1181096 -0.080112 -0.2421429 -0.1098334 -0.1149457 -0.0409451 -0.1428287 -0.0220812 -0.06036089 0.04192624 0.0760739 0.07842770 0.1800529 0.07780021 0.04023444 0.04337697 0.1267495 -0.002556303 0.0364775
【问题讨论】:
-
如果没有您的
u matrix,我们将无法重现该问题。对于您的第二个问题,这可能是由于您尝试优化的功能有许多局部最小值。改变起点,可以改变梯度方向和最终结果。对于你的第一个问题,我的建议是你应该在最小化它之前尝试绘制你的函数(即使在更小的维度),你拥有的信息越多越容易解决问题。 -
感谢您到目前为止的建议,同时我将 u-matrix 添加到我的原始帖子中,如果有人想重现该问题
标签: r optimization