【问题标题】:Calculating standard deviation of samples with boostrapping in R在 R 中计算带有增强的样本的标准偏差
【发布时间】:2011-09-27 12:49:26
【问题描述】:

想象一下:我已经对 10,000 个人进行了抽样,并以厘米为单位测量了他们的身高,并绘制了如下分布:

# Generate sample data
sampleSize = 10000
sampleData = round(rnorm(n=sampleSize, mean=175, sd=14))

# Draw histogram of sample
h = hist(sampleData, breaks=max(sampleData)-min(sampleData))

######################################################################
# Calculate the mean of the measurement
meanMeasure = mean(sampleData)
meanMeasure
abline(v=meanMeasure, col="red")

# Calculate the standard deviation of the measurement
sdMeasure = sd(sampleData)
sdMeasure
rect(
    xleft=meanMeasure-sdMeasure,
    ybottom=min(h$counts),
    xright=meanMeasure+sdMeasure,
    ytop=max(h$counts),
    col="#0000ff22"
)

现在我想估计每个测量的身高的标准偏差有多大。我认为引导我的原始数据集是一个好方法,即从我的原始数据集中采样身体大小并进行替换。

这是一个好方法吗? 如何在 R 中执行此分析(例如,在 1000 个循环的自举分析中每个高度的标准偏差)?

【问题讨论】:

  • 也许它可能是这样的:cycles = 1000result = matrix(0, nrow = length(h$counts), ncol = cycles)for (i in 1:cycles) { tmp = hist(sample(sampleData, replace = T, size = sampleSize), breaks = h$breaks, plot=F) result[,i] = tmp$counts }for (i in 1:length(h$counts)) { h$sdboot[i] = sd(result[i,]) }plot(h)polygon(x=c(rev(h$mids), h$mids), y= c(rev(h$counts+h$sdboot), h$counts-h$sdboot), col="#ff000022")

标签: r statistics statistics-bootstrap


【解决方案1】:

如果您只测量每个人一次,则无法获得“每个测量的身高”的标准偏差。仅当您有多个要获得估计的数据点时,才能使用自举法。

为了获得“每个测量的身高”的标准偏差,每个身高都必须测量一次以上。

但是,如果您想获得整体样本标准差的自举估计值,则适用其他两个答案。

此外,这个问题更适合crossvalidated.com

【讨论】:

  • 大多数身高都需要测量几次。例如,在 10'000 次测量中,300 可能是 175 厘米,而在另一次测量中,身高 175 厘米的受试者数量可能只有 280 人。因此,在测量之间,身高 175 厘米的受试者数量应该存在差异。我想估计这个差异。
  • 我不是在谈论不同的测量高度,而是关于您测量的不同个体。此外,在您的数据中,没有机会获得您想要的东西。您需要更精确的值(例如 175.4 厘米)来估计这种可变性。
【解决方案2】:

当您的样本量如此之大时,完全没有必要为此目的使用自举。如果您想知道仅 100 或 200 甚至 500 个人的样本中标准偏差的合理变化程度,那么自举将提供信息。但是对于 10,000 个人,标准差的自举变化会非常非常小。

【讨论】:

  • 正如查理所说,我认为引导对于生成伪样本很有用。我只测量了一个样品。但我想知道某些身高等级的个体数量在几个测量值之间是如何变化的。我还可以将我的样本分成 10 个分布,每个分布有 1000 个测量值,并计算每个高类别的方差,其中 n=10。我认为自举将是“估计(独立)测量之间的高度等级的方差”的更好方法。
【解决方案3】:

Bootstrapping 通常用于计算估计量的方差,在您的情况下,是样本平均高度。当你只是想找出人们身高的差异时,你不需要做引导。

我们为什么要引导?因为对于我们的一个样本,我们只有一个样本均值。因此,我们需要许多样本来获得许多样本均值来计算该估计量的方差。当我们只有一个伪样本时,Bootstrapping 是一种获取许多伪样本的方法。

在您的情况下,我们已经对高度进行了许多单独的观察,因此我们不再需要 --- 我们可以直接根据我们的“真实”观察结果计算方差。

【讨论】:

  • 在我的示例中,我已经测量了样本中身高的标准偏差。但是,我想找出样本之间每个高度的标准偏差。正如您所提到的,因此我们需要来自原始样本的伪样本。例如我想问一个问题:“在几次独立测量之间,身高175cm的受试者数量的差异是多少”。
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2014-07-24
  • 2021-03-27
相关资源
最近更新 更多