恩..這是我的主程式的一部分:
temp_param=truncreg_mle(delta_hat(:,1),Z,trun_left_mle);
truncreg_mle是我要呼叫的 因此另外在副程式 寫了一個truncreg_mle的函數
----副程式:-----
function [para_est]=truncreg_mle(dep_data,indep_data,c)
openR;
putRdata('y',y);
putRdata('z',z);
putRdata('n',n);
evalR('bstart=chol2inv(chol(t(z) %*% z)) %*% t(z) %*% y');
evalR('ehat = y - z %*% bstart');
evalR('sig = sqrt(sum(ehat * ehat)/n)');
intial_p=getRdata('bstart');
intial_p(end+1)=getRdata('sig');
closeR;
neg_log_like=@(p) trunc_neg_log_like(y,z,p,c,n);
exitflag=0;
tolfun=1e-11;
while exitflag~=1
tolfun=tolfun*10;
[temp_param fval exitflag]=fminsearch(neg_log_like,intial_p,optimset(...
'Display','off','MaxFunEvals',inf,'TolFun',tolfun, 'TolX',tolfun));
end;
para_est=temp_param;
function [fval]=trunc_neg_log_like(y,z,p,c,n)
fval=n.*log(p(end))-sum(log(normpdf((y-z*p(1:(end-1)))./p(end))))+...
sum(log(1-normcdf((c-z*p(1:(end-1)))./p(end))));
if fval==-inf
fval=inf;
end;
---------------------------------------------------------------------------
原本在 matlab7.9的版本 這樣執行是ok的
不過因為一些原因必須使用matlab6.5的版本執行
可是卻跑出錯誤了
它顯示在 neg_log_like=@(p) trunc_neg_log_like(y,z,p,c,n);
錯誤訊息:
??? Error: File: C:\Program
Files\tomlab\work\NLP_Algorithm1-home\truncreg_mle.m Line: 35 Column: 15
"identifier" expected, "(" found.
我將它改成 neg_log_like=@p,trunc_neg_log_like(y,z,p,c,n);
在家執行 這行沒有出現錯誤 是出現openr的錯誤
不過因為家裡電腦沒有R 所以沒想太多
將它帶來學校執行 結果不行....很奇怪 = =''(我同樣是用matlab6.5版本執行的)
跑出了下列的錯誤訊息:
neg_log_like =
@p
??? Undefined function or variable 'p'.
Error in ==> C:\Program Files\tomlab\work\NLP_Algorithm1-home\truncreg_mle.m
On line 34 ==> neg_log_like=@p,trunc_neg_log_like(y,z,p,c,n);
想請問大家 該怎麼改? 謝謝!!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.126.147.48