【问题标题】:Bootstrapping CI for a Logistic Regression Model为逻辑回归模型引导 CI
【发布时间】:2013-07-02 23:29:27
【问题描述】:

我有一个逻辑回归模型,用于预测帝王蟹成熟时的大小,但我在使用引导包设置引导代码时遇到了麻烦。这就是我所拥有的:

#FEMALE GKC SAM#
LowerChatham<-read.table(file=file.choose(),header=TRUE)

#LOGISTIC REGRESSION FIT#
glm.out<-glm(Mature~CL,family=binomial(link=logit),data=LowerChatham)
plot(Mature~CL,data=LowerChatham)
lines(LowerChatham$CL,glm.out$fitted,col="red")
title(main="Lower Chatham")
summary(glm.out)
segments(98.9,0,98.9,0.5,col=1,lty=3,lwd=3)

SAM<-data.frame(CL=98.97)
predict(glm.out,SAM,type="response")

我想引导统计 CL=98.97,因为我对 50% 的螃蟹成熟的大小感兴趣,但我不知道如何设置我的函数来指定该统计,更不用说引导一般功能以获得我的 95% C.I.任何帮助将不胜感激!谢谢!

【问题讨论】:

  • 您需要boot 包。 (很不清楚“引导统计 CL=98.97”是什么意思,因此您可能需要做进一步的功课或将问题标记为转移到 CrossValidated.com)。记住……我们看不到你的屏幕。
  • 试着写一个可重现的例子。看看这个如何:stackoverflow.com/questions/5963269/…
  • 是的,我正在尝试使用 boot 包来引导我的逻辑回归模型以获得 CL=98.97 的置信区间,以确定我对确定该大小的螃蟹是否为成熟与否。但我无法理解如何编写函数,所以它总是返回 CL=98.97。我也不明白引导包中的索引指的是什么。

标签: r confidence-interval statistics-bootstrap


【解决方案1】:

在每次引导迭代中,您都想做类似的事情

range <- 1:100 # this could be any substantively meaningful range
p <- predict(glm.out, newdata = data.frame(CL=range), "response")
range[match(TRUE,p>.5)] # predicted probability of 50% maturity

您可以将 CL 的值范围指定为您需要的任何精度。然后计算每个级别的预测成熟概率。然后在预测概率超过 0.5 的范围内找到阈值。这听起来像是您想要引导的统计数据。

您也不需要boot 来执行此操作。如果您定义了一个函数,该函数对该统计数据进行采样并将其作为结果输出,您只需执行replicate(1000, myfun) 即可获得引导分布,如下所示:

myfun <- function(){
    srows <- sample(1:nrow(LowerChatham),nrow(LowerChatham),TRUE)
    glm.out <- (Mature ~ CL, family=binomial(link=logit), data=LowerChatham[srows,])
    range <- 1:100 # this could be any substantively meaningful range
    p <- predict(glm.out, newdata = data.frame(CL=range), "response")
    return(range[match(TRUE,p>.5)]) # predicted probability of 50% maturity
}
bootdist <- replicate(1000, myfun()) # your distribution
quantile(unlist(bootdist),c(.025,.975)) # 95% CI

【讨论】:

  • 太棒了!非常感谢!我仍然在定义一个使用引导包输出该统计数据的函数时遇到问题。我只是将我的模型更改为 glm.out
  • 一切正常,除了最后一行代码。 quantile(bootdist,c(.025,.975)) 当我运行这一行时,我收到以下错误,我不知道如何解决这个问题。 sort.int(x,na.last = na.last,减少 = 减少,...)中的错误:'x' 必须是原子的
  • 嗯...我得到了同样的错误信息。这就是我输入的内容: bootdist
  • bootdist 是什么样的(在运行quantile 之前)?
  • 这是我放入的所有内容: library(boot) myfun .5)]) # 50% 成熟度的预测概率 } bootdist
猜你喜欢
  • 2023-03-26
  • 2016-07-26
  • 2020-12-22
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2019-06-01
  • 1970-01-01
  • 2019-01-06
相关资源
最近更新 更多