对于一般的 Cox 回归分析模型, 在很多语言中 都是命令可以调用 来计算其中的回归参数
我尝试着 对 得分方程 用 Newton-Raphson 方法 来迭代计算 但为什么 结果计算不出来 似乎也没遇到
Hessian矩阵 不可逆的情形, 我在代码中加了一句常用的手法 (若接近病态, 增加一个 很小的 单位阵)
请问有了解 那些软件 一般是选用什么算法啊
因为自己的一个问题 也归结于 一个 类似的 估计方程 我想借用 那里的 求根算法, 苦于 自己编的运行不出来
求点评 附上自己编的 matlab code [s:15]
% The purpose is to evaluate the score function
% The data has the form (X, delta, Covariate) n*(p+2) matrix
Tol=0.01; N=1000; k=0;
% function y=score(beta,d)
% for RFM lung cancer data with 144 rats coxph -> beta=1.4023;
[n,l]=size(d);
loc=find(d(:,2)'==1);
m=length(loc);
s0=0;s1=zeros(l-2,1);
U=zeros(l-2,1); % score initial
s21=zeros(l-2,l-2);s22=zeros(l-2,l-2);
H=zeros(l-2,l-2); % Hessian initial matrix
beta=ones(l-2,1);b=zeros(l-2,1);bb=zeros(l-2,1); % Dimensinality still shoule be determined
while (beta-b)'*(beta-b)>Tol
for i=1:m
for j=1:n
s0=s0+(d(j,1)>=d(loc(i),1))*exp(d(j,3:l)*beta);
s1=s1+(d(j,1)>=d(loc(i),1))*exp(d(j,3:l)*beta)*d(j,3:l)';
s21=s21+(d(j,1)>=d(loc(i),1))*exp(d(j,3:l)*beta)*(d(j,3:l)'*d(j,3:l));
end
U=U+d(loc(i),3:l)'-(1/s0)*s1;
H=H+(1/s0)*s21-((1/s0)^2)*s1*s1';
s0=0;s1=zeros(l-2,1);s21=zeros(l-2,l-2);s22=zeros(l-2,l-2);
end
%return U
bb=beta-inv(H)*U;
b=beta;
beta=bb;
k=k+1;
if k>N break;
end
end
beta,N