💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 7.2 采样误差 不管我们的样本有多具有代表性,我们根据样本计算的统计数据很可能至少与总体参数略有不同。我们称之为 _ 采样误差 _。我们的统计估计值也会因样本而异;我们将我们的统计数据在样本间的分布称为 _ 抽样分布 _。 抽样误差直接关系到人口测量的质量。显然,我们希望从样本中获得的估计值尽可能接近总体参数的真实值。然而,即使我们的统计数据是无偏的(也就是说,从长远来看,我们希望它与总体参数具有相同的值),任何特定估计的值都将不同于总体估计,并且当抽样误差较大时,这些差异将更大。因此,减小采样误差是实现更好测量的重要步骤。 我们将使用 nhanes 数据集作为示例;我们将假设 nhanes 是整个总体,然后我们将从总体中随机抽取样本。在下一章中,我们将有更多的话要说,关于“随机”样本的生成是如何在计算机中工作的。 ```r # load the NHANES data library library(NHANES) # create a NHANES dataset without duplicated IDs NHANES <- NHANES %>% distinct(ID, .keep_all = TRUE) #create a dataset of only adults NHANES_adult <- NHANES %>% filter( !is.na(Height), Age >= 18 ) #print the NHANES population mean and standard deviation of adult height sprintf( "Population height: mean = %.2f", mean(NHANES_adult$Height) ) ``` ```r ## [1] "Population height: mean = 168.35" ``` ```r sprintf( "Population height: std deviation = %.2f", sd(NHANES_adult$Height) ) ``` ```r ## [1] "Population height: std deviation = 10.16" ``` 在这个例子中,我们知道成年人口的平均值和身高的标准偏差,因为我们假设 nhanes 数据集包含整个成年人口。现在,让我们从 NHANES 人群中抽取 50 个个体的单个样本,并将结果统计数据与人口参数进行比较。 ```r # sample 50 individuals from NHANES dataset exampleSample <- NHANES_adult %>% sample_n(50) #print the sample mean and standard deviation of adult height sprintf( 'Sample height: mean = %.2f', mean(exampleSample$Height) ) ``` ```r ## [1] "Sample height: mean = 169.46" ``` ```r sprintf( 'Sample height: std deviation = %.2f', sd(exampleSample$Height) ) ``` ```r ## [1] "Sample height: std deviation = 10.07" ``` 样本平均值和标准差相似,但不完全等于总体值。现在,让我们取 50 个个体的大量样本,计算每个样本的平均值,并查看得出的平均值抽样分布。为了更好地估计抽样分布,我们必须决定要采集多少样本——在这种情况下,让我们采集 5000 个样本,以便我们对答案真正有信心。请注意,像这样的模拟有时需要几分钟才能运行,并且可能会使您的计算机变得气喘吁吁。图[7.1](#fig:samplePlot)中的柱状图显示,对 50 个个体的每个样本估计的平均值有所不同,但总体而言,它们集中在人口平均值周围。 ```r # compute sample means across 5000 samples from NHANES data sampSize <- 50 # size of sample nsamps <- 5000 # number of samples we will take # set up variable to store all of the results sampMeans <- array(NA, nsamps) # Loop through and repeatedly sample and compute the mean for (i in 1:nsamps) { NHANES_sample <- sample_n(NHANES_adult, sampSize) sampMeans[i] <- mean(NHANES_sample$Height) } sprintf( "Average sample mean = %.2f", mean(sampMeans) ) ``` ```r ## [1] "Average sample mean = 168.33" ``` ```r sampMeans_df <- tibble(sampMeans = sampMeans) ``` ![The blue histogram shows the sampling distribution of the mean over 5000 random samples from the NHANES dataset. The histogram for the full dataset is shown in gray for reference.](https://img.kancloud.cn/59/ec/59ec8a12c53f30d0237f9e949e084785_768x384.png) 图 7.1 蓝色柱状图显示了来自 nhanes 数据集的 5000 多个随机样本的平均值的抽样分布。完整数据集的柱状图以灰色显示以供参考。