R:基于轮廓似然的置信区间

时间:2018-01-19 05:16:23

标签: r confidence-interval

我正在使用库plkhci中的函数Bhat构建基于配置文件可能性的置信区间,我收到了此警告:

  

警告信息:在dqstep中(list(标签= x $标签,est = btrf(xt,x $ low,   x $ upp),low = x $ low,:oops:无法找到步长,使用默认

我跑的时候

  

r< - dfp(x,f = nlogf)

我可以忽略此警告,因为我仍然可以获得输出吗?

以下是完整的编码:

library(Bhat)
beta0<--8
beta1<-0.03
gamma<-0.0105
alpha<-0.05
n<-100
u<-runif(n)
u
x<-rnorm(n)
x
c<-rexp(100,1/1515)
c
t1<-(1/gamma)*log(1-((gamma/(exp(beta0+beta1*x)))*(log(1-u))))
t1
t<-pmin(t1,c)
t
delta<-1*(t1>c)
delta
length(delta)
cp<-length(delta[delta==1])/n
cp
delta[delta==1]<-ifelse(rbinom(length(delta[delta==1]),1,0.5),1,2)
delta
deltae<-ifelse(delta==0, 1,0)
deltar<-ifelse(delta==1, 1,0)
deltai<-ifelse(delta==2, 1,0)
dat=data.frame(t,delta, deltae,deltar,deltai,x)
dat$interval[delta==2] <- as.character(cut(dat$t[delta==2], breaks=seq(0, 600, 100)))
labs <- cut(dat$t[delta==2], breaks=seq(0, 600, 100))
dat$lower[delta==2]<-as.numeric( sub("\\((.+),.*", "\\1", labs) )
dat$upper[delta==2]<-as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs) )  
data0<-dat[which(dat$delta==0),]#uncensored data 
data1<-dat[which(dat$delta==1),]#right censored data 
data2<-dat[which(dat$delta==2),]#interval censored data 
nlogf<-function(para)
{
  b0<-para[1]
  b1<-para[2]
  g<-para[3]
  e<-sum((b0+b1*data0$x)+g*data0$t+(1/g)*exp(b0+b1*data0$x)*(1-exp(g*data0$t)))
  r<-sum((1/g)*exp(b0+b1*data1$x)*(1-exp(g*data1$t)))
  i<-sum(log(exp((1/g)*exp(b0+b1*data2$x)*(1-exp(g*data2$lower)))-exp((1/g)*exp(b0+b1*data2$x)*(1-exp(g*data2$upper)))))
  l<-e+r+i
  return(-l)
}
x <- list(label=c("beta0","beta1","gamma"),est=c(-8,0.03,0.0105),low=c(-10,0,0),upp=c(10,1,1))
r <- dfp(x,f=nlogf)
x$est <- r$est
plkhci(x,nlogf,"beta0")
plkhci(x,nlogf,"beta1")
plkhci(x,nlogf,"gamma")

1 个答案:

答案 0 :(得分:0)

我给你一个超长的答案,但它会帮助你看到你可以追逐你自己的错误信息(大多数时候,有时这种看待功能的方法都行不通)。很高兴看到方法在发出警告时发生了什么,因为有时它很好,有时你需要修复你的数据。

这个功能真的涉及到了!您可以通过在R命令行中键入dfp来查看它(NO TRAILING PARENTHESES),它将打印出整个函数。

最后17行,你会看到一个作业:

del <- dqstep(x, f, sens = 0.01)

您可以看到这会调用函数dqstep,这会反映在您的警告中。

您可以通过再次在R的命令行中键入dqstep来查看此功能。在阅读这个函数时,也很长但不那么乏味,有布尔逻辑的这一部分:

if (r < 0 | is.na(r) | b == 0) {
        warning("oops: unable to find stepsize, use default")
        cat("problem with ", x$label[i], "\n")
        break
    }  

这是罪魁祸首,它会返回你得到的信息。它正上方的线条说明了如何计算r。你正在为这个函数提供你之前函数的默认x加上灵敏度方程式(我假设dfp生成,它是巨大而丑陋的,所以我没有解开所有这些)。当前一个嵌套函数返回低于零的r值,rNAb值为零时,将显示该消息。

第二个错误告诉你它可能是b==0,因为b在分母中它返回并且是无穷大值,所以没有步骤大小从这个嵌套的函数返回到dfp中的变量del

该步骤被输入该等式:

h <- logit.hessian(x, f, del, dapprox = FALSE, nfcn)  

您可以通过在R命令行中输入logit.hessian来查看。

当你这样做时,你会发现del是一个logit标度的步长,默认值为del=rep(0.002, length(x$est)) ...函数为你设置的因为运行函数{{1没有返回任何值。

因此,您现在可以决定在计算置信区间时使用该步长是否正确,或者您的数据是否存在问题需要解决以使这项工作更适合您。

当我逐行运行时,我收到了这条消息:

dqstep

在这行代码中: Error in if (denom <= 0) { : missing value where TRUE/FALSE needed

这让我觉得我是对的。

当我收到像你这样的消息时,这就是我如何追逐来自包裹的消息的问题。