[R] r question
謝孟珂
momo820526 at gmail.com
Wed Mar 22 09:11:32 CET 2017
Hi ,I have some question about simulate, I don't know how to paste question
to this website,so I paste below.
I use genoud to find the maximum likelihood value, but when I use numcut=3
,it will get error message,like this " coxph.wtest(fit$var[nabeta, nabeta],
temp, control$toler.chol) : NA/NaN/Inf"
and this is my code
library(rgenoud)
library(survival)
N=500
ei=rexp(N)
censor=rep(1,N)
x1=runif(N)
x2=runif(N)
x3=runif(N)
truecut=c(0.3,0.6)
dum1=1*(x1>truecut[1] & x1<truecut[2])
dum2=1*(x1>truecut[2])
x_true=cbind(dum1,dum2,x2,x3)
relativerisk<- matrix(log(c(1,1,2,2),ncol=4,byrow = TRUE)
beta_true<-relativerisk
Ti=exp(x_true%*%beta_true)*ei
confound=cbind(x2,x3)
initial2<-c(0.09,0.299,0.597,-0.17,-1.3,-3.1,-1.4,-1.12)
numcut=2
domain2<<-matrix(c(rep(c(0.05,0.95),numcut),rep(c(0,5),numcut+dim(confound)[2])),ncol=2,byrow
= TRUE)
loglikfun <- function(beta, formula) {
beta1 <- coxph(formula, init = beta,
control=list('iter.max'=0))#iteration is zero
return(beta1$loglik[2])
}
obj <- function(xx){
cutoff <- xx[1:numcut_global] #cutpoint
cut_design <-
cut(target_global,breaks=c(0,sort(cutoff)+seq(0,gap_global*(length(cutoff)-1),by=gap_global),target_max),quantile=FALSE,labels=c(0:numcut_global))
beta <- -xx[(numcut+1):nvars] #coefficients of parameters
logliks <-
loglikfun(beta,Surv(time_global,censor_global)~cut_design+confound_global)
return(logliks)
}
maxloglik<-function(target,numcut,time,censor,confound,domain2,initial2,gap){
time_global<<-time
censor_global<<-censor
target_global<<-target
nvars<<-2*numcut+dim(confound)[2]
confound_global<<-confound
numcut_global<<-numcut
target_max<<-max(target)
gap_global<<-gap
ccc<-genoud(obj, nvars, max=TRUE, pop.size=100, max.generations=6,
wait.generations=10,
hard.generation.limit=TRUE, starting.values=initial2,
MemoryMatrix=TRUE,
Domains=domain2, solution.tolerance=0.001,
gr=NULL, boundary.enforcement=2, lexical=FALSE,
gradient.check=TRUE)
ccc$par_corr<-ccc$par #the coefficients of genoud
ccc$par_corr[1:numcut]<-sort(ccc$par[1:numcut])+seq(0,gap_global*(numcut-1),by=gap_global)
#sort cutpoint
return(ccc)
}
maxloglik(x1,3,Ti,censor,confound,domain2,initial2,0.02)$par_corr
I have no idea about the error ,maybe is my initial is wrong.
thank you
From Meng-Ke
[[alternative HTML version deleted]]
More information about the R-help
mailing list