全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Gauss专版
1140 1
2013-06-05
    代码如下,标红的是出错的地方

    /**
***
***     Program to find the MLEs using several iterations of Newton-Raphson
***
**/

library pgraph;

graphset;
gausset;

cls;

rndseed 123457;



/**    (1) - Simulate the model   **/

t = 5;

x = { 1,2,4,5,8 };

beta = 1.0;
sig2 = 4.0;

y = beta*x + sqrt(sig2)*rndn(t,1);



/**     (3) - Evaluate gradient and Hessian at theta0      **/

beta_0  = 1.0;

sig2_0  = 4.0;

theta_0 = beta_0 | sig2_0;

g       = zeros(2,1);

g[1]    = meanc( (y - beta_0*x).*x ) / sig2_0;
g[2]    = -0.5/sig2_0 + 0.5*meanc( (y - beta_0*x).^2 )/sig2_0^2;


h       = zeros(2,2);

h[1,1]  = -meanc(x.^2)/sig2_0;
h[1,2]  = -meanc( (y - beta_0*x).*x )/sig2_0^2;
h[2,1]  = -meanc( (y - beta_0*x).*x )/sig2_0^2;
h[2,2]  = 0.5/sig2_0^2 - meanc( (y - beta_0*x).^2 )/sig2_0^3;



/**     (4) - Log-likelihood at theta0      **/

lnl_0     = -0.5*ln(2*pi) - 0.5*ln(sig2_0) - 0.5*meanc( (y - beta_0*x).*2 )/sig2_0;

i=1;

/**     (5) - Newton-Raphson update      **/
do while i<=5;


theta_i = theta_i - inv(h_i)*g_i;

beta_i  = theta_i[1];
sig2_i  = theta_i[2];

g_i[1]    = meanc( (y - beta_i*x).*x ) / sig2_i;
g_i[2]    = -0.5/sig2_i + 0.5*meanc( (y - beta_i*x).^2 )/sig2_i^2;

h_i[1,1]  = -meanc(x.^2)/sig2_i;
h_i[1,2]  = -meanc( (y - beta_i*x).*x )/sig2_i^2;
h_i[2,1]  = -meanc( (y - beta_i*x).*x )/sig2_i^2;
h_i[2,2]  = 0.5/sig2_i^2 - meanc( (y - beta_i*x).^2 )/sig2_i^3;



lnl_i     = -0.5*ln(2*pi) - 0.5*ln(sig2_i) - 0.5*meanc( (y - beta_i*x).*2 )/sig2_i;
print "Log-likelihood at theta_i =" lnl_i;
i=i+1;
endo;

  运行后显示Line 69 in D:\GAUSS\prc\max_nr_iter.g
   Illegal redefinition of procedure G0156 : 'g_i'
Line 70 in D:\GAUSS\prc\max_nr_iter.g
   Illegal redefinition of procedure G0156 : 'g_i'
Line 72 in D:\GAUSS\prc\max_nr_iter.g
   Illegal redefinition of procedure G0156 : 'h_i'

    在下是Gauss新手,妄自考虑了一下,想到两个可能的问题,首先可能是代码h_i 和g_i 的idex _i的表示问题,另外我在main program中也定义了g 和 h(分别代表梯度向量和hessian矩阵)。这个程序主要是为了连续有关loop的编写。

二维码

扫码加我 拉你入群

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

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

全部回复
2013-6-7 23:07:15
你试试用gauss里的内嵌函数,调用命令来计算梯度向量,Hessian矩阵

g=gradp(&f,beta); @ gradp 是gauss内嵌函数,计算梯度向量@
H=hessp(&f,beta); @ hessp 是gauss内嵌函数,计算Hessian矩阵@
此外,你这种迭代5次,能否找到最优解?Newton-Raphson method的计算过程是不断更新参数,只能小于容忍度,才停止更新
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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