-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathlhmigauss.m
40 lines (34 loc) · 1.16 KB
/
lhmigauss.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function lh=lhmigauss(par,y,cens,x,nrunobs)
%function [lh, grad]=lhmigauss(par,y,cens,x,nrunobs)
% ///////////////////////////////////////////////////////////////////////
% Calculate likelihood mixed inverse Gaussian model
% //////////////////////////////////////////////////////////////////////
% get parameters
mu=par(1);
var=par(2);
v=[1; par(3:1+nrunobs)];
p=[1-sum(par(2+nrunobs:2*nrunobs)); par(2+nrunobs:2*nrunobs)];
% check x, beta
if isempty(x)
k=0;
funx=ones(size(y));
else
k=size(x,2);
beta=par(end+1-k:end);
funx=exp(x*beta);
end
lh=zeros(size(y));
for i=1:nrunobs
% noncensored observations
if sum(~cens)>0
% [igpdf{i}, pdfgrad{i}]=igausspdf(y(~cens),v(i)*funx(~cens)/mu,(v(i)*funx(~cens)).^2/var);
igpdf{i}=igausspdf(y(~cens),v(i)*funx(~cens)/mu,(v(i)*funx(~cens)).^2/var);
lh(~cens)=lh(~cens)+p(i)*igpdf{i};
end
% random right censored observations
if sum(cens)>0
% [igcdf{i}, cdfgrad{i}]=igausscdf(y(cens),v(i)*funx(cens)/mu,(v(i)*funx(cens)).^2/var);
igcdf{i}=igausscdf(y(cens),v(i)*funx(cens)/mu,(v(i)*funx(cens)).^2/var);
lh(cens)=lh(cens)+p(i)*(1-igcdf{i});
end
end