我正在使用库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")
答案 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
值,r
值NA
或b
值为零时,将显示该消息。
第二个错误告诉你它可能是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
这让我觉得我是对的。
当我收到像你这样的消息时,这就是我如何追逐来自包裹的消息的问题。