do_prediction=function(iso,gene.marker,reftranscriptome,grid,t) { glist=gene.marker[is.na(iso)==0] iso1=iso[is.na(iso)==0] a=grid$a b=grid$b c=grid$c lk=NULL k=1 for(i in 1:length(a)) { y=iso1-a[i]*gam[glist,c[i]]-(1-a[i])*reftranscriptome[glist,b[i]] lk[k] = -sum(dnorm(y[is.na(y)==0],mean(y[is.na(y)==0]), 0.8,log=T)) k=k+1 } inde=order(lk)[1] aa=a[inde] s=aa-0.1 e=aa+0.1 if(aa ==0) { s=0 } lk=NULL k=1 aaa=seq(s,e,by=0.001) for(i in aaa) { y=iso1-i*gam[glist,c[inde]]-(1-i)*reftranscriptome[glist,b[inde]] lk[k] = -sum(dnorm(y[is.na(y)==0],mean(y[is.na(y)==0]), 0.8,log=T)) k=k+1 } r=c(t[b[inde]]*2,aaa[order(lk)[1]]) return(r) } predict_age_gam=function(d,outfile) { refdd2=read.table("DDd2ref.txt",header=T,sep="\t",na.string="NA") gam=read.table("GAMref.txt",header=T,na.string="NA",sep="\t") gene.marker=intersect(intersect(rownames(d),rownames(gam)),rownames(refdd2)) t=(0:180)/10 refdd2.100tps=t(apply(refdd2[gene.marker,],1,function(x) predict(smooth.spline(1:24,x,df=5),t)$y)) grid_a0=seq(0,0.8,by=0.1) grid_t=21:131 grid_gam=5:12 a=NULL b=NULL c=NULL for(i in grid_a0) { for(j in grid_t) { for(m in grid_gam) { a=c(a,i) b=c(b,j) c=c(c,m) } } } grid=cbind(a,b,c) pred=apply(d[gene.marker,],2,function(x) do_prediction(x,gene.marker,refdd2.100tps,grid,t)) rr=t(pred) rownames(rr)=colnames(pred) colnames(rr)=c("esti.hpi","esti.gam.prop") write.table(rr,file="Mixture_model_hpigam_prediction_GAM.txt",row.names=T,col.names=T,sep="\t",quote=F) } -------------------------------------------------------------------- library(stats4) isolate=read.table("isolate_transcriptome.txt",header=T,sep="\t",na.string="NA") predict_age_gam(d,"outfile.txt") #-----------------------------------------------------------------------