为了给我的问题提供背景信息,我简要介绍了中心极限定理并说明了一个使用R编程语言的模拟示例。
中心极限定理的维基百科页面提供了对该定理的一些很好的解释:
如果是从总体均值和有限方差随机样本,并且如果是样本均值,则分布是标准正态分布。
我的理解如下:
1)从任何分布中抽取许多随机样本
2)对于这些随机样本中的每一个,计算它们的平均值
3)这些均值的分布将遵循正态分布(这个结果对于推断特别有用,例如假设检验和置信区间)。
我试图通过使用 R 编程语言创建两个示例来查看我是否正确理解了中心极限定理。我模拟了非正态数据并从这些数据中随机抽取样本,试图查看与这些随机样本分布相对应的“钟形曲线形状”。
1)非参数引导
在此示例中,假设有一个城镇,您对居住在该城镇的人们的工资感兴趣:具体而言,您想知道是否有 20% 的人口收入超过 80,000.00 美元。这是这个城镇的工资分布(在现实生活中,你不会知道这个分布的样子——你只能从这个分布中取样):
set.seed(123)
a = rnorm(100000, 20000, 1000)
a2 = rnorm(100000, 40000, 10000)
a1 = rnorm(100000, 100000, 10000)
salary = c(a, a1, a2)
id = 1:length(salary)
my_data = data.frame(id, salary)
###plot
par(mfrow=c(1, 2))
hist(my_data$salary, 1000, ylab = "Number of People", xlab = " Salary ", main="Distribution for the Salaries of All People in Some Town: 300,000 People")
hist(our_sample$salary, 1000, ylab = "Number of People", xlab = " Salary ", main="Sample of the Full Data that we have Access to: 15,000 People")
假设我们可以获得这个城镇 5% 的人的工资(假设这些是随机选择的):
library(dplyr)
our_sample <- sample_frac(my_data, 0.05)
接下来,我们将从我们访问的 5% 的人口中随机抽取 1000 个样本,并检查有多少公民的收入超过 80,000 美元。然后我将绘制这些比例的分布 - 如果我做得正确,我应该会看到“钟形曲线形状”:
library(dplyr)
results <- list()
for (i in 1:1000) {
train_i <- sample_frac(our_sample, 0.70)
sid <- train_i$row
train_i$prop = ifelse(train_i$salary >80000, 1, 0)
results[[i]] <- mean(train_i$prop)
}
results
results_df <- do.call(rbind.data.frame, results)
colnames(results_df)[1] <- "sample_mean"
hist(results_df$sample_mean)
正如我们所看到的,原始数据显然是非正态的,但是来自这些非正态数据的随机样本的均值分布看起来“有点正常”:
par(mfrow=c(1, 3))
hist(my_data$salary, breaks = 10000, main = "full data")
hist(our_sample$salary, breaks = 10000, main = "sample of the full data that we have access too")
hist(results_df$sample_mean, breaks = 500, main = "resampled data by bootstrap from the data we hace access to")
置信区间:
实际上,该镇 32.5% 的居民收入超过 80,000 美元
my_data$prop = ifelse(my_data$salary > 80000, 1, 0) mean(my_data$prop) [1] 0.3258367
令人惊讶的是,根据重新抽样的引导数据,只有 32.5% 的公民收入超过 80,000 美元
mean(results_df$sample_mean) [1] 0.3259046
置信区间计算如下:
results_df$delta = abs(mean(results_df$sample_mean) - results_df$sample_mean)
sorted_results = results_df[order(- results_df$delta), ]
quantile(sorted_results$delta, probs = c(0.1, 0.9))
10% 90%
0.000495400 0.005977933
这意味着收入超过 80,000 美元的公民比例的置信区间介于 32.59% 之间 - 但实际上可以介于 (32.59 - 0.0495400 %) 和 (32.59 - 5.97%) 之间
结论:据我了解,中心极限定理指出,对于任何分布,随机样本的均值分布仍将遵循正态分布。此外,非参数引导程序还允许您评估总体推断和置信区间 - 无论总体的真实分布如何。因此,为什么我们仍然使用经典的假设检验方法?我能想到的唯一原因是样本量较小时。但是还有其他原因吗?
参考