我应该选择哪种自举回归模型?


10

我有一个具有DV(疾病:是/否)和5个预测变量(人口统计学[年龄,性别,吸烟(是/否)),医学指标(常规)和一种随机治疗方法(是/否)的二元logistic回归模型])。我还为所有双向交互条件建模。主要变量居中,没有多重共线性的迹象(所有VIF <2.5)。

我有一些疑问:

  1. 引导程序是否比我的单一模型有利?如果是这样的话,

  2. 我应该选择哪种引导模式?我只是想看看引导算法是否遵循随机方法来创建新样本,或者它们是否具有严格的算法。因此,我每次尝试都重新采样了1000次(所以我有几个自举模型,每个模型都有1000次试验)。但是,每次引导模型的系数都不同(尽管试验次数始终为1000)。所以我想知道应该为我的报告选择哪一个?有些变化很小,并且不会影响我的系数的显着性,但是有些变化会使我的某些系数不显着(例如,只有那些在原始模型中P值接近0.05且变为0.06的系数)。

  3. 我应该选择更高的数字,例如10,000吗?如何确定此限制?

  4. 我还是应该首先重新引导吗?如果每次的结果都不同,我可以依靠它的结果吗?

  5. 您还有其他想法可以帮助我解决我的问题吗?

非常感谢。

Answers:


21

自举是一种重采样方法,用于估计回归系数的采样分布,从而计算回归系数的标准误差/置信区间。这篇文章有一个很好的解释。有关所需复制数量的讨论,请参阅这篇文章。

  1. 非参数引导程序会重复采样并随机替换您的观察值(即,某些观察值仅绘制一次,其他观察值绘制多次,而有些则根本没有绘制),然后计算逻辑回归并存储系数。重复ñ次。因此,您最终将得到1万个不同的回归系数。然后可以使用这1万个系数来计算其置信度。使用伪随机数生成器时,您可以将种子设置为任意数字,以确保每次都获得完全相同的结果(请参见下面的示例)。为了真正有一个稳定的估计,我建议进行1000多次重复,也许是1万次。您可以运行多次引导程序,然后查看估算值是否发生了很大的变化(无论您执行1000还是10,000次复制)。用简单的英语来说:您应该进行复制,直到达到收敛为止。如果您的引导估计值在估计值与观察到的单个模型之间有所不同,则可能表明观察到的模型不能正确反映样本的结构。bootR,例如,得出“偏差”,即单个模型的回归系数与自举样本平均值之间的差。
  2. 执行引导程序时,您对单个引导程序样本不感兴趣,但对例如10'000个引导程序样本的统计信息(例如回归系数)的分布感兴趣。
  3. 我想说10 000比1000好。对于现代计算机,这应该不成问题。在下面的示例中,我的PC花了大约45秒钟来绘制1万个样本。当然,这取决于您的样本量。样本量越大,应确保考虑到每个观察值的迭代次数就越高。
  4. 您是什么意思,“结果每次都不同”?回想一下,在每个引导步骤中,观察值都是用替换新绘制的。因此,由于观察结果不同,最终的回归系数可能会略有不同。但是正如我已经说过的:您对单个引导程序样本的结果并不真正感兴趣。当您的复制次数足够多时,引导程序将每次产生非常相似的置信区间和点估计。

这是一个示例R

library(boot)

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

head(mydata)

mydata$rank <- factor(mydata$rank)

my.mod <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial")

summary(my.mod)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

# Set up the non-parametric bootstrap

logit.bootstrap <- function(data, indices) {

  d <- data[indices, ]
  fit <- glm(admit ~ gre + gpa + rank, data = d, family = "binomial")

  return(coef(fit))
}

set.seed(12345) # seed for the RNG to ensure that you get exactly the same results as here

logit.boot <- boot(data=mydata, statistic=logit.bootstrap, R=10000) # 10'000 samples

logit.boot

Bootstrap Statistics :
        original        bias    std. error
t1* -3.989979073 -7.217244e-02 1.165573039
t2*  0.002264426  4.054579e-05 0.001146039
t3*  0.804037549  1.440693e-02 0.354361032
t4* -0.675442928 -8.845389e-03 0.329099277
t5* -1.340203916 -1.977054e-02 0.359502576
t6* -1.551463677 -4.720579e-02 0.444998099

# Calculate confidence intervals (Bias corrected ="bca") for each coefficient

boot.ci(logit.boot, type="bca", index=1) # intercept
95%   (-6.292, -1.738 )  
boot.ci(logit.boot, type="bca", index=2) # gre
95%   ( 0.0000,  0.0045 ) 
boot.ci(logit.boot, type="bca", index=3) # gpa
95%   ( 0.1017,  1.4932 )
boot.ci(logit.boot, type="bca", index=4) # rank2
95%   (-1.3170, -0.0369 )
boot.ci(logit.boot, type="bca", index=5) # rank3
95%   (-2.040, -0.629 )
boot.ci(logit.boot, type="bca", index=6) # rank4
95%   (-2.425, -0.698 )

引导输出显示原始回归系数(“原始”)及其偏差,即原始系数与自举系数之间的差。它还给出了标准错误。请注意,它们比原始标准误差大一些。

从置信区间来看,通常优选进行偏差校正(“ bca”)。它给出了原始标度上的置信区间。对于几率的置信区间,只需对置信限取幂。


谢谢您的完美答案!:)让我这样回答:1.我对它的概念有点熟悉(它试图在1000个不同(重新采样)的模型中计算1000个不同系数的均值)。感谢您澄清“偏见”的事情以及这种变化的发生,我们应该增加尝试的次数。:) 2.通过“自举模型”,我并不是说一个单一的重采样模型。但是,我的意思是那1000次迭代的平均值。实际上,我已经对模型进行了10次自举,每次进行1000次迭代。因此,我手边有10个自举模型。
维克

它们每个都显示“不同”的结果。但是我会尝试三或四个具有10,000重采样的自举模型,以查看迭代次数是否为10,000,不同的自举模型(每个自举模型为10000)是相似的,还是应该增加100000?
维克

@Vic感谢您的评论。我不会做10个引导程序,每个引导程序都进行1000次迭代,而只执行一次,比如说1万次甚至更多次迭代(5万次?)。这应该为您提供稳定的估计和置信区间。
COOLSerdash

3.确保这不是问题。我只是想知道应该在哪个基础上选择那个数字?我认为其依据可以是,如果我运行两个引导程序,每个引导程序尝试1000次,并且发现它们不同,那意味着我需要进行更多的重采样试验(例如5000或10000)。
维克

4.“您的意思是“结果每次都不同”?当您的复制次数足够高时,引导程序将每次产生非常相似的置信区间和点估计。”
维克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.