作法:通过自举进行线性回归的预测间隔


14

我很难理解如何使用自举来计算线性回归模型的预测间隔。有人可以概述一下分步程序吗?我通过Google搜索,但对我来说真的没有任何意义。

我确实了解如何使用自举来计算模型参数的置信区间。


1
Davison和Hinkley在书中详细讨论了Bootstrap方法及其应用,以及显式算法(算法6.4)。他们对概念,陷阱和细节的解释要比此处的合理答案更长。
Glen_b-恢复莫妮卡(Monica)2012年

@Glen_b感谢您的参考。不幸的是我不在大学或公司里,所以我没有资源来购买这本书。
2012年

可以从亚马逊订购;对算法以及所有相关警告和问题的完整说明实际上并不是您可以用几百个单词甚至一页的答案涵盖的内容。
Glen_b-恢复莫妮卡

1
@Glen_b我写了Davison和HInkely的算法-关于CV的几个问题,所以我认为值得付出努力。您的任何意见将不胜感激。 stats.stackexchange.com/questions/226565/…–
Bill

这个线程似乎在回答您的问题:stats.stackexchange.com/questions/226565/…–
user2683832

Answers:


7

置信区间考虑了估计的不确定性。预测间隔增加了基本的不确定性。R predict.lm将为您提供线性模型的预测间隔。从那里开始,您要做的就是在自举示例中重复运行它。

n <- 100
n.bs <- 30

dat <- data.frame( x<-runif(n), y=x+runif(n) )
plot(y~x,data=dat)


regressAndPredict <- function( dat ) {
  model <- lm( y~x, data=dat )
  predict( model, interval="prediction" )
}

regressAndPredict(dat)

replicate( n.bs, regressAndPredict(dat[ sample(seq(n),replace=TRUE) ,]) )

的结果replicate是3维数组(nx 3x n.bs)。长度3维由每个数据元素的拟合值以及95%预测区间的上下限组成。

加里·金方法

根据您的需求,King,Tomz和Wittenberg有一种很酷的方法。它相对容易实现,并且避免了某些估算值(例如max(Y))的自举问题。

我在这里引用他对基本不确定性的定义,因为它的定义相当合理:

第二种形式的可变性,即等式1中由随机成分(分布f)表示的基本不确定性,是由无数的偶然事件(例如天气或疾病)引起的,这些事件可能影响Y,但不包括在X中。即使我们知道参数的精确值(从而消除了估计不确定性),基本的不确定性将阻止我们无误地预测Y。


3
不确定如何从n.bs个预测间隔矩阵中建立置信区间。
B_Miner

1

引导程序不假定任何有关样本产生的基础父分布形式的知识。传统的经典统计参数估计值基于正态性假设。Bootstrap处理非正规性,并且在实践中比经典方法更准确。

自举代替了计算机的原始计算能力,可以进行严格的理论分析。它是对数据集误差项的采样分布的估计。自举包括:对数据集重新采样指定的次数,从每个样本计算平均值,并找到平均值的标准误差。

以下“ R”代码演示了该概念:

这个实际的例子演示了引导的有用性,并估计了标准误差。计算置信区间需要标准误差。

让我们假设您有一个倾斜的数据集“ a”:

a<-rexp(395, rate=0.1)          # Create skewed data

偏斜数据集的可视化

plot(a,type="l")                # Scatter plot of the skewed data
boxplot(a,type="l")             # Box plot of the skewed data
hist(a)                         # Histogram plot of the skewed data

执行引导过程:

n <- length(a)                  # the number of bootstrap samples should equal the original data set
    xbarstar <- c()                 # Declare the empty set “xbarstar” variable which will be holding the mean of every bootstrap iteration
    for (i in 1:1000) {             # Perform 1000 bootstrap iteration
        boot.samp <- sample(a, n, replace=TRUE) #”Sample” generates the same number of elements as the original data set
    xbarstar[i] <- mean(boot.samp)} # “xbarstar” variable  collects 1000 averages of the original data set
    ## 
    plot(xbarstar)                  # Scatter plot of the bootstrapped data
    boxplot(xbarstar)               # Box plot of the bootstrapped data
    hist(xbarstar)                  # Histogram plot of the bootstrapped data

    meanOfMeans <- mean(xbarstar)
    standardError <- sd(xbarstar)    # the standard error is the standard deviation of the mean of means
    confidenceIntervalAboveTheMean <- meanOfMeans + 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceIntervalBelowTheMean <- meanOfMeans - 1.96 * standardError # for 2 standard deviation above the mean 
    confidenceInterval <- confidenceIntervalAboveTheMean + confidenceIntervalBelowTheMean
    confidenceInterval

1
感谢Ragy的例子。但是,据我所知,您的答案并未涵盖使用引导程序的预测间隔的计算。正如我在回答中所说的,我已经了解了如何使用自举来计算置信区间-您的代码似乎可以做到。
2012年
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.