#include "k.h" /* C implementation of Gibbs sampler x (input) is a vector of chi statistics, n - length of x output - deltot a vector of prob obs is an outlier (length n) */ void prog(double *x,int n,double *deltot,long *idum,double *A,int *delta) { double xsumsq=0.,lambda,p,num,r,fun1,fun2,cc,dd,rsig, zeta,kappa,tau2,epsilon; int i,j, nu=0, df=0, /* rchisq degrees of freedom*/ itmp=0, ngib, burn; /* hardcoded constants */ zeta=1000.;kappa=4.;tau2=1.;epsilon=.01;ngib=500;burn=50; rsig=median(x,&n)/.675; kappa=kappa*rsig; tau2=tau2*rsig*rsig; for (i=0;irunif(idum)); } /* gibbs update */ for (i=0;irunif(idum)); if (i>=burn) deltot[j]+=p; /* dd=1/(1/tau2+1/lambda) doesn't change so it's before the loop */ cc=dd*(x[j]/lambda+kappa/tau2); A[j]=delta[j]*(sqrt(dd)*rnorm(idum)+cc)+ (1-delta[j])*(sqrt(tau2)*rnorm(idum)+kappa); r+=delta[j]; } } for (j=0;j