我想做probit model with selection的估计,heckp_ll是他的likelihood function,
使用内建qnewton程序。执行过程一直跑出错误的讯息 gradp.src(99) : error G0036 : Matrices are not conformable
请问这是说我的likelihood function里的matrix定义错误了?
可以请大大可指点我一下。
谢谢^^"。
/* probit with sample selection*/
new;
obs = 100;
sig ={1 0.4,0.4 1};
e = rndn(obs,2)*chol(sig);
x = rndn(obs,2);
@ sel eq @
y1 = 0.1+0.2*x[.,1]+e[.,1];
@ probit eq @
y2 = 0.1+0.2*x[.,2]+e[.,2];
y1=y1 .> 0;
y2=y2 .> 0;
x1=ones(obs,1)~x[.,1];
x2=ones(obs,1)~x[.,2];
k1 = cols(x1);
k2 = cols(x2);
b1=olsqr(y1,x1);
b2=olsqr(y2,x2);
b0=b1|b2|0.5;
{coef,f,g,rec} = qnewton(&heckp_ll,b0');
proc heckp_ll(theta);
local k1,k2,b1,b2,xb1,xb2,rho,
p0,p10,p11,ll;
b1 = theta[1:k1];
b2 = theta[k1+1:k2+k1];
rho = theta[k1+k2+1];
xb1 = x1*b1';
xb2 = x2*b2';
rho = (exp(rho)-1)/(exp(rho)+1);
p0 = cdfnc(xb1);
p10 = cdfbvn(xb1,-xb2,-rho);
p11 = cdfbvn(xb1,xb2,rho);
ll = -sumc(
(1-y1).*log(p0)+
y1 .* (1-y2).*log(p10)+
y1 .* y2 .*log(p11));
retp(ll);
endp;