Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:张铭鑫 (复旦大学)
邮箱:746548383@qq.com
编者按:本文主要摘译自 Population vs. Sample | Definitions, Differences & Examples,特此致谢!
目录
总体:通常指研究者感兴趣的问题所涉及的整个群体,既可以是有限的也可以是无限的。样本:指由研究者从总体中抽出的一部分个体所组成的集合,样本集合中个体的数量往往小于总体中个体的总数。
Population 这个词汇具有一种引导研究者将总体概念与人类联想在一起的思维倾向,但是在实际研究中,总体可以是我们所感兴趣任何群体:对象、事件、组织、国家、物种、生物等等。
总体概念的关键并不在于它指代的到底是什么,而在于不论它指代的具体是什么,它必定包含这个被指代对象的全集。而与之伴生的样本概念,则必然指代同一被指代对象的子集。下表列举了总体与样本的四种情形:
总体 | 样本 |
---|---|
荷兰招聘IT工作的广告 | 2020 年5月1日荷兰IT职位广告搜索结果前50名 |
欧洲歌唱大赛的歌曲 | 欧洲歌唱大赛用英语演唱的获奖歌曲 |
荷兰的本科生 | 参与某项心里调查研究的300名来自三所荷兰大学的本科生 |
世界上所有国家 | 自2000年以来曾公布过出生率和GDP数据的国家 |
从总体与样本的定义中我们能够发现,总体是自然存在的,而样本是人为构造的。从总体到样本的过程我们通常称之为抽样。一个自然的问题是:既然我们感兴趣的是总体的某些特征,并且总体是存在的,那么我们为什么还要费心设计抽样方法,并且满足于基于样本数据对总体特征的推断,而不是直接搜集和分析总体数据呢?
原因在于当我们感兴趣的对象在规模上数量很大、在空间上分布零散并且难以取得联系时,获取总体的想法就不太可能真的实现,这个时候就有必要通过抽样方法来获取样本了。在合理的抽样方式下,我们能够通过对样本数据进行统计分析来计算总体参数的估计值,或者对总体数据进行假设检验。
所谓合理的抽样方式是指:在理想情况下,样本应当是从总体中随机抽取的 (randomly selected)具有代表性的 (representative) 子集。使用概率抽样法 (例如样本随机抽样或分层抽样) 能够降低抽样误差 (sampling bias) 并提高研究结果的内部与外部效度。
然而,受限于现实条件,在实际操作中研究者往往只能采用非概率抽样方法。例如,当我们感兴趣的是家庭收入与保险支出之间的关系,按照概率抽样方法的思路,我们应当在所有家庭中随机选择将哪些家庭纳入到我们的样本之中,但是现实情况是对于收入极低的那部分家庭,我们基本上无法与这些家庭取得联系,因而也就不太可能获得这部分家庭的相关数据。
由此可见,非概率抽样方法通常基于某种特定标准对总体进行筛选由此获得非概率抽样样本。相比于随机样本,非概率抽样样本往往获取难度更低或者成本更小。
抽样的四个理由:
区分总体和样本可能使我们产生了一点智性上的愉悦,但是我们不能在这个阶段继续停留,因为我们马上要遇到一些更现实的问题。归根结底,我们感兴趣的是总体数据中的参数 (paramater),例如家庭收入与家庭保险支出之间的关系。由于种种原因我们现在只能拿到样本数据,当然我们可以基于样本数据得到我们感兴趣的估计值 (estimate),例如样本家庭收入与样本家庭保险支出之间的关系。但真正的问题是:
针对第一个问题,我们需要引入估计量的概念。在功能上,估计量与抽样方式相类似,即它是一种独立于我们所感兴趣的具体问题的算法。以经典最小二乘估计量为例,其矩阵表达式为:
其中,
如果我们关心的是个体受教育年限与工资收入之间的线性关系,那么我们就要根据下式进行计算:
虽然根据不同的问题我们所使用的
针对第二个问题,我们的答案是虽然抽样误差无可避免,但是在随机抽取的代表性样本中,我们仍然有信心认为基于样本的估计值能够接近总体参数。
抽样误差指总体参数与样本估计值之间的差值。回到家庭收入与保险支出的问题,在这项研究中抽样误差指样本家庭收入与保险支出之间的关系与所有家庭收入与保险支出之间的关系之间的差值。
由于样本数据与总体数据在均值和标准差上的差异,即使我们采用随机抽样的方法也无法避免抽样误差的存在,当然可以确定的是随机抽样总是好于非随机抽样。
此外,由于我们总是期望能够将基于样本获得的结论推广到总体之中,所以我们总是希望抽样误差越低越好,而扩大抽样规模是降低抽样误差的一个有效办法。在最极端的情况下,当我们以总体为样本时,抽样误差自然也就不存在了。
说理总是枯燥,动手方见真章。在这一部分我们结合 R 和 Stata 来对我们所感兴趣的样本估计值和总体参数之间的关系进行模拟分析。R 主要承担数据生成和可视化功能,Stata 承担回归分析功能。
# 载入所需要的包
library(tidyverse)
library(patchwork)
# 生成一个总体规模为一万的总体
population <- tibble(id = 1:10000)
# 生成虚拟的家庭收入变量,我们从一个均值为十二万,方差为5万的正态分布中抽取一万个点
population[["income"]] <- rnorm(n = 10000, mean = 120000, sd = 50000)
# 生成误差项,我们从一个均值为0,方差为二千的正态分布中抽取一万个点作为误差项
population[["error_term"]] <- rnorm(n = 10000, mean = 0, sd = 5000)
# 在家庭收入与误差项的基础上我们生成家庭保险支出,
# 假设在我们这个虚拟的世界中,家庭收入每增加1单位则家庭保险支出增加0.1单位
population <- population %>%
mutate(insurance = 0.1 * income + error_term) %>%
filter(insurance >= 0, income >= 0)
# 如此一来我们就得到了一个模拟的总体数据,在去除异常值之后,其规模为9508
# 首先我们展示所有总体中的样本分布状况
plot_1 <- population %>%
ggplot(aes(x = income, y = insurance)) +
geom_point(alpha = 0.1) +
scale_x_continuous(labels = c(0, 100000, 200000, 300000)) +
labs(x = "Income", y = "Insurance", title = "Population") +
theme_minimal()
# 其次我们对总体进行概率抽样
# 首先考虑简单随机抽样,即我们从总体中随机抽出一个规模为1000的样本
# 设定随机数种子
set.seed(123456)
# 从9508个样本中无放回地随机取出1000个值
random_selected_1000 <- sample(population$id, 1000)
population <- population %>%
mutate(random_sample_1000 = case_when(
id %in% random_selected_1000 ~ 1,
TRUE ~ 0
))
# 在总体图中标注出被随机选择的样本
plot_2 <- plot_1 +
geom_point(color = "white") +
geom_point(data = filter(population, random_sample_1000 == 1),
aes(x = income, y = insurance), color = "steelblue", alpha = 0.2) +
labs(title = "Random Sample, size = 1000")
# 其次考虑分层抽样
# 根据家庭收入的分位数将所有家庭分为四组
income_quantile_numbers <- quantile(x = population$income, probs = c(0.25, 0.5, 0.75))
# 生成每一个家庭收入所处的组并随机抽取样本
stratified_selected_1000 <- population %>%
mutate(income_group = case_when(
income < income_quantile_numbers[[1]] ~ "Low",
income >= income_quantile_numbers[[1]] & income < income_quantile_numbers[[2]] ~ "Mid-Low",
income >= income_quantile_numbers[[2]] & income < income_quantile_numbers[[3]] ~ "Mid-High",
income > income_quantile_numbers[[3]] ~ "High"
)) %>%
group_by(income_group) %>%
sample_n(size = 250)
population <- population %>%
mutate(stratified_sample_1000 = case_when(
id %in% stratified_selected_1000$id ~ 1,
TRUE ~ 0
))
# 在总体分布中标注出分层抽样样本
plot_3 <- plot_1 +
geom_point(color = "white") +
geom_point(data = filter(population, stratified_sample_1000 == 1),
aes(x = income, y = insurance), color = "steelblue", alpha = 0.2) +
geom_vline(xintercept = income_quantile_numbers, color = "red") +
labs(title = "Stratified Sample, size = 1000")
# 然后我们考虑非随机抽样,假设只有家庭收入在二十以上的家庭才有可能被研究者搜集信息
population <- population %>%
mutate(not_random_sample_1000 = case_when(
income >= 200000 ~ 1,
TRUE ~ 0
))
# 在总体样本中标注出非随机样本
plot_4 <- plot_1 +
geom_point(color = "white") +
geom_point(data = filter(population, not_random_sample_1000 == 1),
aes(x = income, y = insurance), color = "steelblue", alpha = 0.2) +
labs(title = "Income > 150000")
# 最后为了检验抽样误差随着样本规模增大而减小这一事实,
# 我们使用简单抽样方法生成样本规模为2000、5000、7000、9000的样本
for (size in c(2000, 5000, 7000, 9000)) {
random_sample_numbers<- sample(population$id, size)
random_sample_size <- population$id %in% random_sample_numbers
population[[str_c("random_sample_", size)]] <- as.integer(random_sample_size)
}
# 组合图片
plot_1 + plot_2 + plot_3 + plot_4
# 存储数据
write_dta(population, "population_sample.dta")
下图分别展示了总体、随机抽样样本、分层抽样样本、非随机抽样样本中家庭保险支出与家庭收入之间的样本分布状况。我们很容易发现,规模为 1000 的随机抽样样本以及分层抽样样本的分布状况都与总体比较接近,而对于非随机抽样样本,我们则没有足够的信心下这样的结论。
进一步我们基于 Stata 分别计算并比较总体与不同样本中的家庭收入与保险支出关系的 OLS 估计值。可以发现,随机样本得到的估计值更加接近总体参数,非随机样本估计值的表现相比较而言差于随机样本估计值。
. * 导入样本数据
. lxhuse population_sample.dta, clear
. * 针对总体进行回归
. reg insurance income, r
. est store result_population
. * 针对规模为1000的随机样本进行回归
. reg insurance income if random_sample_1000 == 1, r
. est store result_random_1000
. * 针对规模为1000的分层样本进行回归
. reg insurance income if stratified_sample_1000 == 1, r
. est store result_stratified_1000
. * 针对非随机样本进行回归
. reg insurance income if not_random_sample == 1, r
. est store result_not_random
. * 展示第一部分结果
. est tab result_population result_random_1000 result_stratified_1000 result_not_random
------------------------------------------------------------------
Variable | result_p~n resul~1000 resul~1000 result_n~m
-------------+----------------------------------------------------
income | .0901055 .08853712 .09394216 .09438593
_cons | 1549.7504 1825.2642 1256.6709 1016.0303
------------------------------------------------------------------
最后我们展示在随机抽样方法下,随着抽样规模的扩大,基于样本得到的估计值将逐渐向总体逼近。
. * 针对规模为2000的随机样本进行回归
. reg insurance income if random_sample_2000 == 1, r
. est store result_random_2000
. * 针对规模为5000的随机样本进行回归
. reg insurance income if random_sample_5000 == 1, r
. est store result_random_5000
. * 针对规模为7000的随机样本进行回归
. reg insurance income if random_sample_7000 == 1, r
. est store result_random_7000
. * 针对规模为9000的随机样本进行回归
. reg insurance income if random_sample_9000 == 1, r
. est store result_random_9000
. * 展示第二部分结果
. est tab result_random_1000 result_random_2000 result_random_5000 ///
> result_random_7000 result_random_9000 result_population, b(%12.4f)
-----------------------------------------------------------------------------------------------
Variable | result_~1000 result_~2000 result_~5000 result_~7000 result_~9000 result_pop~n
---------+-------------------------------------------------------------------------------------
income | 0.0885 0.0875 0.0917 0.0898 0.0906 0.0901
_cons | 1825.2642 1807.0741 1383.2374 1541.3505 1487.5295 1549.7504
-----------------------------------------------------------------------------------------------
Note:产生如下推文列表的 Stata 命令为:
lianxh 抽样 分布, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh