【问题标题】:Replicate a regression using a random subset of data each time and check distribution of regression coefficients?每次使用随机数据子集复制回归并检查回归系数的分布?
【发布时间】:2016-10-24 04:43:24
【问题描述】:

我正在处理一个包含汽车价格、品牌、里程等的数据集。

我希望通过运行我的回归 2,000 次并为每个回归抽样 300 次观察来获得我的自变量(里程)与价格回归的分布系数。

下面是我的回归模型:

model <- lm(price ~ mileage, data = dat)

我试过了

    for (i in 1:2000) model300 <- sample(model[i], size=300)

没有用。我收到以下错误消息:

sample.int(length(x), size, replace, prob) 中的错误:不能接受

当'replace = FALSE'时样本大于总体

我试图在这个论坛上引用以前的answer,但我不确定它是否适用于我的问题。

如果有任何指点,我将不胜感激。

【问题讨论】:

    标签: r regression linear-regression lm


    【解决方案1】:

    您希望从拟合的线性模型对象中采样得到什么?

    sample(model[i], size=300)
    

    我们想从数据中采样并重新拟合模型。即,通过执行 2000 次,我们对数据进行 2000 次采样并拟合 2000 个回归模型。


    从数据中采样是关键。通过在lm 中使用subset 参数,这将是一个很有前途的方法。对于任何需要多次复制一个过程的问题,先写一个函数做一次这样的实验会很方便。

    f <- function () {
      fit <- lm(price ~ mileage, data = dat, subset = sample(nrow(dat), 300))
      coef(fit)
      }
    

    现在,我们使用replicate 重复这个 2000 次以获得一个矩阵:

    z <- t(replicate(2000, f()))
    

    replicate 基于sapply 总是cbind() 你最终得到一个平面矩阵;为了更好的可读性,我使用t() 对其进行了转置以获得一个长矩阵。


    下面我以R的内置数据集cars为例。该数据集有 50 个观测值,因此我们无法在不替换的情况下从中抽取 300 个样本。我将取样 30 个。

    f <- function () {
      fit <- lm(dist ~ speed, data = cars, subset = sample(nrow(cars), 30))
      coef(fit)
      }
    

    运行一次给出系数向量。 set.seed 部分仅用于重现性。

    set.seed(0); f()
    
    #(Intercept)       speed 
    #  -22.69112     4.18617
    

    通过复制这个,比如说 50 次,我们得到一个矩阵:

    set.seed(0); z <- t(replicate(50, f()))
    
    head(z)   ## show first few rows
    
    #     (Intercept)    speed
    #[1,]   -22.69112 4.186170
    #[2,]   -21.31613 4.317624
    #[3,]   -12.98734 3.454305
    #[4,]   -22.59920 4.274417
    #[5,]   -22.53475 4.584875
    #[6,]   -18.88185 4.104758
    

    系数的分布可以通过直方图粗略评估:

    par(mfrow = c(1,2))
    hist(z[,1], main = "intercept")
    hist(z[,2], main = "slope")
    

    结果看起来很粗糙,因为我没有做很多复制。

    【讨论】:

    • 谢谢,这就是我想要完成的。目标是观察系数的分布,如果复制足够多的次数,其行为将类似于正态分布。
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    • 2022-01-24
    • 2021-04-28
    相关资源
    最近更新 更多