☰
冯士雍抽样调查习题的工程化实践:从公式推导到Python代码与误差防控
2026/10/9 14:39:13 网站建设 项目流程

简介:本资源是冯士雍《抽样调查理论与方法》(第二版)的配套课后习题完整参考答案,面向统计学、应用数学及相关专业本科生与研究生,助力掌握抽样设计、误差控制、区间估计、分层/系统/整群抽样等核心方法。答案涵盖填空题、单项选择题、简答题三大题型,内容紧扣教材重点,如随机原则与概率估计的逻辑关系、样本统计量与总体参数的推断路径、置信区间与精确度的计算公式、各类抽样方法的适用条件及方差分析基础等,可作为课后巩固、考前复习与自学检验的权威参考。资源为1个DOC文档,格式规范、排版清晰,全文约192KB,便于下载查阅与打印学习。目前已有3228人学习下载,内容源自专业答案平台整理,覆盖全部50道填空题、33道单选题及12道简答题,知识点解析详实,公式推导完整,是深入理解抽样调查理论与实践落地的关键辅助材料。

1. 这不是“抄答案”,而是用抽样调查思维重解课后题:为什么冯士雍《抽样调查理论与方法(第二版)》的习题必须亲手推一遍?

你手头那本翻得卷边的《抽样调查理论与方法(第二版)》,作者冯士雍——国内抽样调查领域绕不开的名字。书里每章末尾的习题,表面是计算题、证明题、设计题,实则是把“抽样框架怎么建”“估计量方差为何要分层校正”“无回答偏差如何量化”这些黑匣子,一层层拆给你看。很多读者卡在第3章“不等概率抽样”的习题上,不是不会算,而是没意识到:题目里那个“按企业员工数分配样本量”的设定,就是在逼你动手写一个PPS抽样(Probability Proportional to Size)的实现逻辑;第5章关于“二阶抽样中初级单元与次级单元方差贡献”的推导,本质是在训练你识别调查误差的结构来源。这不是应试刷题,而是用最小成本,在纸上演练真实社会调查项目中会遭遇的每一个决策点:抽多少?怎么分层?权重怎么调?缺失值怎么补?它适合两类人:一是正在修读调查方法课程的学生,需要把公式从符号变成可执行的步骤;二是刚接手政府/高校/市场研究类项目的新人,急需一套经得起推敲的抽样设计脚手架。别急着搜“课后答案PDF”,先搞懂为什么这道题非得这么解——答案只是副产品,思维路径才是真资产。


2. 从课本公式到可运行代码:用Python复现冯士雍第二版核心习题的三类典型解法

冯士雍教材的习题设计极具工程导向:它不考纯数学技巧,而考你能否把抽象估计量落地为可验证的操作。我们以第二版中最具代表性的三类题型为锚点,逐个拆解其背后的技术链路,并给出可直接运行、带参数说明的Python实现。所有代码均基于numpy、pandas和scipy构建,不依赖任何黑盒统计包,确保每一步计算都透明可控。

2.1 分层随机抽样:第4章习题4.3的完整复现与方差分解验证

该题要求对某县6个乡镇(分层)的农户收入进行调查,已知各乡镇农户数、历史收入均值与标准差,需计算按比例分配与奈曼分配下的样本量分配方案,并比较二者估计量方差。关键不在结果数字,而在理解“为什么奈曼分配能降低方差”——它要求你显式写出层内方差、层权、样本量三者的耦合关系。

import numpy as np import pandas as pd # 模拟题设数据:6个乡镇(层) data = pd.DataFrame({ 'stratum': ['A', 'B', 'C', 'D', 'E', 'F'], 'N_h': [1200, 800, 1500, 900, 2000, 600], # 各层总体单元数 'S_h': [3200, 2800, 3500, 3100, 4200, 2600], # 各层标准差(题中给定或由历史数据估算) 'Ybar_h': [18500, 16200, 19800, 17600, 21500, 15300] # 各层均值 }) N_total = data['N_h'].sum() W_h = data['N_h'] / N_total # 层权 data['W_h'] = W_h # 总样本量n=300(题设条件) n_total = 300 # 【按比例分配】:n_h = n * W_h data['n_prop'] = (n_total * data['W_h']).round().astype(int) # 确保总和为n_total(处理四舍五入误差) data.loc[0, 'n_prop'] += n_total - data['n_prop'].sum() # 【奈曼分配】:n_h = n * (W_h * S_h) / sum(W_h * S_h) numerator = data['W_h'] * data['S_h'] denominator = numerator.sum() data['n_neyman'] = (n_total * numerator / denominator).round().astype(int) data.loc[0, 'n_neyman'] += n_total - data['n_neyman'].sum() # 计算两种分配下的估计量方差 V(y_bar_st) # 公式:V(y_bar_st) = Σ W_h² * (1 - f_h) * S_h² / n_h,其中f_h = n_h / N_h def calc_variance(df, n_col): var_terms = [] for idx, row in df.iterrows(): f_h = row[n_col] / row['N_h'] term = (row['W_h'] ** 2) * (1 - f_h) * (row['S_h'] ** 2) / row[n_col] var_terms.append(term) return np.sum(var_terms) var_prop = calc_variance(data, 'n_prop') var_neyman = calc_variance(data, 'n_neyman') print("分层抽样方案对比(总n=300):") print(data[['stratum', 'N_h', 'S_h', 'n_prop', 'n_neyman']]) print(f"\n按比例分配方差 V(y_bar_st) = {var_prop:.2f}") print(f"奈曼分配方差 V(y_bar_st) = {var_neyman:.2f}") print(f"奈曼分配相对效率提升:{(var_prop/var_neyman):.2%}")

逻辑说明:这段代码严格遵循冯士雍教材第4章定义的分层估计量方差公式。calc_variance函数中的f_h = n_h / N_h是抽样比,(1 - f_h)项即有限总体校正(FPC),不可省略——这是新手常漏的关键点。输出中“相对效率提升”直接回应了题干隐含的追问:“奈曼分配到底好在哪?”
参数说明:n_total可任意修改以观察样本量变化对效率的影响;S_h若题中未直接给出,需用历史调查数据或试点调查估算,此处不可用“假设为1”糊弄;W_h必须用实际层单元数计算,不能简单用“层数6”均分。

2.2 不等概率抽样(PPS):第3章习题3.7的系统抽样实现与偏差检验

习题3.7要求对100家工业企业按员工人数进行PPS抽样,抽取10家。教材强调“PPS抽样必须保证每个单元被抽中概率与其规模成正比”,但学生常误以为“直接按员工数加权随机抽”即可。冯士雍指出,系统PPS(如累积和法)才是实践中最稳健的实现方式,它能规避小规模单元被系统性遗漏的风险。

import numpy as np import pandas as pd # 模拟100家企业数据(题设简化版) np.random.seed(42) firms = pd.DataFrame({ 'id': range(1, 101), 'size': np.random.lognormal(mean=8.5, sigma=0.8, size=100) # 员工数,对数正态分布更贴近现实 }) firms['size'] = firms['size'].round().astype(int) firms = firms.sort_values('size', ascending=True).reset_index(drop=True) # 按规模升序,便于观察系统抽样特性 # 步骤1:计算累积规模和总规模 firms['cum_size'] = firms['size'].cumsum() total_size = firms['size'].sum() print(f"总体规模总量(员工总数): {total_size}") # 步骤2:确定抽样间距k = total_size / n n_sample = 10 k = total_size / n_sample print(f"抽样间距 k = {k:.2f}") # 步骤3:随机起点r ~ Uniform(0, k) r = np.random.uniform(0, k) print(f"随机起点 r = {r:.2f}") # 步骤4:生成抽样点序列:r, r+k, r+2k, ..., r+(n-1)k sampling_points = [r + i * k for i in range(n_sample)] # 步骤5:对每个抽样点,找到其落入的累积区间(即对应企业) selected_ids = [] for point in sampling_points: # 找到第一个 cum_size >= point 的企业索引 idx = firms[firms['cum_size'] >= point].index[0] selected_ids.append(firms.iloc[idx]['id']) print(f"\n抽中企业ID列表: {sorted(selected_ids)}") print(f"对应企业规模(员工数): {firms[firms['id'].isin(selected_ids)]['size'].tolist()}") # 验证:计算各企业实际被抽中概率(理论值应 ≈ size_i / total_size) # 在系统PPS中,单次抽样下每个企业概率并非严格等于size_i/total_size, # 但大量重复抽样后,频率应趋近该值。此处做1000次模拟验证。 def simulate_pps_systematic(df, n, reps=1000): counts = np.zeros(len(df), dtype=int) for _ in range(reps): r = np.random.uniform(0, total_size / n) points = [r + i * (total_size / n) for i in range(n)] for point in points: idx = df[df['cum_size'] >= point].index[0] counts[idx] += 1 # 计算频率估计概率 freq_prob = counts / (reps * n) # 理论概率 theory_prob = df['size'] / total_size return freq_prob, theory_prob freq_p, theory_p = simulate_pps_systematic(firms, n_sample, reps=1000) # 取前10家(最小规模)和后10家(最大规模)对比 small_firms = firms.head(10) large_firms = firms.tail(10) print(f"\n【验证】最小10家企业:") print(f" 理论概率均值: {theory_p[:10].mean():.4f}") print(f" 模拟频率均值: {freq_p[:10].mean():.4f}") print(f"【验证】最大10家企业:") print(f" 理论概率均值: {theory_p[-10:].mean():.4f}") print(f" 模拟频率均值: {freq_p[-10:].mean():.4f}")

逻辑说明:此代码实现了冯士雍强调的“累积和系统PPS”(Cumulative Total Method)。关键在于steps 4-5:不是用np.random.choice加权抽,而是将规模轴线化,用等距点穿透累积分布——这正是教材图3.3所示意的几何本质。最后的1000次模拟验证,直击学生疑问:“系统法真的满足PPS吗?”结果会显示,大企业频率稳定高于小企业,且均值趋近理论值,证实了方法有效性。
参数说明:k = total_size / n是核心参数,必须用浮点数计算,整数除法会导致严重偏差;r的取值范围必须是(0, k),而非(0, total_size),否则破坏等距性;reps=1000是经验值,低于500次验证可能因随机性出现假阴性。

2.3 多阶段抽样:第6章习题6.5的二阶抽样方差分解实战

习题6.5给出某市12个区(PSU),每区下辖若干街道(SSU),要求设计二阶抽样并计算总估计量方差。冯士雍在此章反复强调:“二阶抽样方差 = PSU间方差贡献 + PSU内SSU间方差贡献”,但学生常混淆“为何要分两步估计”。本节代码将带你亲手拆解这个方差树。

import numpy as np import pandas as pd # 模拟数据:12个区(PSU),每区街道数(SSU)不等,每街道住户数及平均收入 np.random.seed(42) psus = ['P' + str(i) for i in range(1, 13)] data_psu = pd.DataFrame({'psu_id': psus}) data_psu['M_h'] = np.random.randint(8, 20, size=12) # 每区街道数(SSU数量) # 为每个PSU生成其下属SSU的数据 all_ssu_data = [] for idx, row in data_psu.iterrows(): psu_id = row['psu_id'] M_h = row['M_h'] # 每个街道住户数(规模)和该街道住户平均收入 ssu_sizes = np.random.poisson(lam=120, size=M_h) + 50 # 住户数,避免为0 ssu_means = np.random.normal(loc=20000, scale=3000, size=M_h) # 街道平均收入 ssu_data = pd.DataFrame({ 'psu_id': [psu_id] * M_h, 'ssu_id': [f"{psu_id}_S{i}" for i in range(1, M_h+1)], 'size': ssu_sizes, 'mean_income': ssu_means }) all_ssu_data.append(ssu_data) ssu_df = pd.concat(all_ssu_data, ignore_index=True) # 设计抽样:第一阶段抽4个PSU(简单随机),第二阶段在每个入选PSU中抽2个SSU(简单随机) n_psu = 4 n_ssu_per_psu = 2 # 模拟一次抽样(可重复运行观察方差波动) selected_psus = np.random.choice(data_psu['psu_id'], size=n_psu, replace=False) sampled_ssu_df = pd.DataFrame() for psu in selected_psus: psu_ssus = ssu_df[ssu_df['psu_id'] == psu] selected_ssus = psu_ssus.sample(n=n_ssu_per_psu, random_state=42) sampled_ssu_df = pd.concat([sampled_ssu_df, selected_ssus], ignore_index=True) # 计算二阶估计量 y_bar_2stage = (1/n_psu) * Σ (1/n_ssu_per_psu) * Σ y_ij # 此处y_ij为街道平均收入(题中常以“街道为调查单元,测量其均值”) y_bar_2stage = sampled_ssu_df['mean_income'].mean() # 方差分解计算(按冯士雍公式6.22) # V(y_bar_2stage) = V1 + V2 # V1 = (1 - f1)/n_psu * S1² (PSU间方差) # V2 = (1/n_psu) * (1 - f2)/n_ssu_per_psu * (1/M_h) * Σ S2h² (PSU内SSU间方差均值) # 步骤1:计算每个PSU内SSU均值的方差 S2h² ssu_df_grouped = ssu_df.groupby('psu_id') S2h_sq = {} for psu, group in ssu_df_grouped: # S2h² = Σ (y_hj - y_bar_h.)² / (M_h - 1) y_bar_h = group['mean_income'].mean() S2h_sq[psu] = np.sum((group['mean_income'] - y_bar_h) ** 2) / (len(group) - 1) # 步骤2:计算PSU间均值的方差 S1² # y_bar_h. = Σ (size_hj * y_hj) / Σ size_hj (注意:此处若SSU规模不同,需加权!题中常简化为等权) # 本题为简化,假设每个SSU内住户数差异不大,用算术均值 y_bar_h_list = [group['mean_income'].mean() for _, group in ssu_df_grouped] S1_sq = np.var(y_bar_h_list, ddof=1) # 样本方差 # 步骤3:计算f1, f2 f1 = n_psu / len(data_psu) # PSU抽样比 # f2需按PSU分别计算,此处取平均f2 f2_avg = np.mean([n_ssu_per_psu / row['M_h'] for _, row in data_psu.iterrows()]) # 步骤4:计算V1和V2 V1 = (1 - f1) / n_psu * S1_sq # V2 = (1/n_psu) * (1 - f2_avg)/n_ssu_per_psu * (1/len(data_psu)) * Σ S2h² S2h_sq_sum = sum(S2h_sq.values()) V2 = (1 / n_psu) * (1 - f2_avg) / n_ssu_per_psu * (1 / len(data_psu)) * S2h_sq_sum V_total = V1 + V2 print(f"二阶抽样估计量 y_bar_2stage = {y_bar_2stage:.2f}") print(f"方差分解:") print(f" PSU间方差贡献 V1 = {V1:.4f}") print(f" PSU内SSU间方差贡献 V2 = {V2:.4f}") print(f" 总方差估计 V(y_bar_2stage) = {V_total:.4f}") print(f" V1占比 = {(V1/V_total)*100:.1f}%,V2占比 = {(V2/V_total)*100:.1f}%")

逻辑说明:此代码严格遵循冯士雍第6章的二阶方差分解框架。重点在于V1和V2的独立计算——V1反映“选哪几个区”带来的不确定性,V2反映“在选定区内选哪几个街道”带来的不确定性。输出中的百分比直接回答了实务问题:“如果预算有限,该优先增加PSU数量还是SSU数量?”
参数说明:f2_avg是近似处理,严格做法应对每个PSU单独计算f2_h再加权,但教材习题通常允许此简化;S2h_sq计算中ddof=1必须使用,否则低估SSU内方差;若题中给出SSU规模(如住户数),则y_bar_h.必须用规模加权计算,代码中已标注提醒。


3. 抽样设计落地的五大血泪避坑指南:从冯士雍习题到真实项目踩过的坑

理论再完美,一落地就翻车。我在某高校社会调查中心支持多个县域民生调查项目时,发现新手最容易在以下环节栽跟头——而这些问题,恰恰在冯士雍《抽样调查理论与方法(第二版)》的习题中已有伏笔。这里不讲大道理,只列现象、原因、解法,句句来自现场。

3.1 现象:按教材公式算出的样本量,实地访问时发现“根本抽不齐”

原因:习题中默认“抽中即成功访问”,但现实中存在无回答(Non-response)、拒访、地址错误、空户等情况。冯士雍第7章虽提及无回答,但习题未强制要求预估无回答率。若直接套用n = ...公式,未做无回答校正,最终有效样本量可能不足设计值的60%。

解决:在计算初始样本量n后,必须除以预估回答率r,得到设计样本量n_design = n / r。r不能拍脑袋:参考同类地区历史调查数据(如某县上一轮调查r=0.82),或通过小规模预测试(Pilot Survey)估算。例如,习题4.3若要求n=300且预估r=0.75,则实际需抽300 / 0.75 = 400户,并在抽样框中预留10%备用地址。

3.2 现象:分层后各层样本量分配合理,但实地发现某层“根本找不到足够合格单元”

原因:分层变量(如“企业规模”“农户耕地面积”)的抽样框数据陈旧或粗粒度。习题中给的N_h是精确值,但现实中抽样框可能只有“大型/中型/小型”三级分类,无法精确定位到具体单元。导致按N_h分配的样本,在某层内因单元不合格(如已倒闭、信息不全)而无法落实。

解决:分层前必须做抽样框清洗(Frame Cleaning)。对每一层,用最新行政记录、工商注册数据、遥感影像等交叉验证单元状态。冯士雍强调“抽样框质量决定调查质量”,习题中省略此步是为聚焦理论,但实操中必须前置。清洗后,重新计算各层有效N_h_eff,再分配样本。

3.3 现象:PPS抽样后,小规模单元一个没抽中,被质疑“不公平”

原因:误用简单加权随机抽(np.random.choicewithp=size/sum(size)),而非系统PPS。小规模单元因概率极低,在有限次抽样中被遗漏是大概率事件。冯士雍第3章明确指出,系统PPS能保证每个单元至少有size_i / total_size的概率被覆盖,而简单加权抽在小n时波动极大。

解决:坚持用累积和系统法(如2.2节代码),并做最低保障:对size_i / total_size < 0.01的单元,强制赋予一个最小概率(如0.01),再重新归一化权重。这在教材中称作“最小规模单元保底规则”,虽略牺牲理论最优性,但大幅提升实操可行性与公信力。

3.4 现象:二阶抽样方差计算结果远小于实际调查误差,模型失效

原因:忽略了“PSU内相关性”(Intra-class Correlation, ICC)。冯士雍公式假设同一PSU内SSU相互独立,但现实中,同一街道的住户收入、教育程度高度相似(ICC > 0)。若忽略ICC,V2会被严重低估,导致总方差失真。

解决:在计算S2h²前,先估算ICC。可用历史数据计算:ICC = (MS_between - MS_within) / MS_between(组间均方减组内均方除以组间均方)。若ICC > 0.05,则V2需乘以设计效应(DEFF)校正因子:DEFF ≈ 1 + (m-1) * ICC,其中m为每PSU内SSU均值。此修正虽未在习题中体现,却是真实项目标配。

3.5 现象:用软件(如SPSS、Stata)跑出的加权估计结果,与手算习题答案不一致

原因:软件默认启用复杂方差估计(如Taylor Series Linearization),并自动处理分层、PSU聚类、无回答调整等,而习题要求的是“理想化、无偏误”的理论估计量。两者目标不同:习题训练你理解y_bar_st的构造逻辑,软件解决的是“如何用有限样本逼近真实总体”。

解决:不要追求软件结果与习题答案数字完全一致。重点验证软件输出的结构是否匹配:如分层估计量是否包含层权W_h,PPS估计量是否使用size作为权重变量,二阶方差是否报告V1和V2分项。若结构一致,数值微小差异(<0.5%)属正常计算精度范围。把软件当“高级计算器”,而非“答案生成器”。


4. 超越答案:用冯士雍框架诊断真实调查数据的三个进阶技巧

做完课后题,不代表掌握了抽样调查。真正的分水岭在于:能否用冯士雍建立的这套思维语言,去解剖一份陌生的、充满噪声的真实调查数据集。以下是我在某跨平台用户行为研究项目中沉淀的三个技巧,它们不直接对应某道习题,却深深植根于教材的底层逻辑。

4.1 技巧一:用“抽样框架完整性指数”快速评估数据可信度

冯士雍反复强调:“没有好的抽样框,就没有好的调查。”但面对一份现成的CSV数据,如何快速判断其抽样框质量?我发明了一个简易指标——框架完整性指数(FII):

$$ \text{FII} = \frac{\text{抽样框中有效单元数}}{\text{抽样框中登记单元数}} \times \frac{\text{调查中成功访问单元数}}{\text{抽样框中有效单元数}} \times \frac{\text{关键变量无缺失率}}{1} $$

  • 第一项:有效单元数/登记单元数→ 反映框的时效性(如企业是否存续);
  • 第二项:成功访问数/有效单元数→ 反映框的准确性(如地址是否正确);
  • 第三项:关键变量(如收入、教育)无缺失率→ 反映数据采集质量。

操作:对数据集df,用三行代码计算:

fii_part1 = len(df[df['status']=='active']) / len(df) # 假设有status字段 fii_part2 = len(df[df['interview_status']=='completed']) / len(df[df['status']=='active']) fii_part3 = df['income'].notna().mean() * df['education'].notna().mean() FII = fii_part1 * fii_part2 * fii_part3 print(f"框架完整性指数 FII = {FII:.3f} (>0.8为优,<0.5需警惕)")

若FII < 0.5,不必深究后续分析,直接退回检查抽样框——这比花一周跑回归模型更有价值。冯士雍在第2章末尾的“抽样框评估清单”就是此思想的雏形。

4.2 技巧二:识别“隐性分层”并重构权重

真实数据常隐藏未声明的分层结构。例如,某APP用户调研数据,抽样时声称“简单随机”,但导出数据发现:iOS用户占比72%,Android仅28%,而该APP全量用户中二者比例应为55%/45%。这表明抽样过程实际受设备类型影响,形成了隐性分层。

操作:用卡方检验(scipy.stats.chi2_contingency)对比样本与总体的分布差异。若p < 0.01,则存在显著偏差。此时,需为每个观测值添加事后分层权重:

from scipy.stats import chi2_contingency # 假设总体分布 known_dist = {'iOS': 0.55, 'Android': 0.45} observed = df['os'].value_counts(normalize=True) expected = [known_dist['iOS'], known_dist['Android']] chi2, p, dof, ex = chi2_contingency([list(observed), expected]) if p < 0.01: # 构建事后权重:总体比例 / 样本比例 df['post_strat_weight'] = df['os'].map(lambda x: known_dist[x] / observed[x]) print("检测到隐性分层,已添加事后分层权重")

此技巧直指冯士雍第5章“事后分层”的核心思想:当设计分层不可行时,用已知的总体分布去校正样本偏差。它比盲目相信“随机抽样”更务实。

4.3 技巧三:用“方差贡献热力图”定位误差黑洞

冯士雍的方差分解(如2.3节)是静态的,但真实调查中,误差来源会随时间、地域、群体动态变化。我习惯绘制方差贡献热力图,横轴为调查轮次(Time),纵轴为分层变量(如年龄组、地区),色块值为该单元在该轮次的V1或V2贡献占比。

操作:对多轮调查数据,用seaborn.heatmap可视化:

import seaborn as sns import matplotlib.pyplot as plt # 假设已计算每轮每层的V1贡献,存为DataFrame v1_contrib # v1_contrib.index = ['Round1', 'Round2', ...], columns = ['Age18-25', 'Age26-35', ...] plt.figure(figsize=(10, 6)) sns.heatmap(v1_contrib, annot=True, fmt='.1%', cmap='YlOrRd') plt.title('PSU间方差贡献热力图(V1)') plt.ylabel('调查轮次') plt.xlabel('年龄组') plt.show()

若发现某轮次中“农村地区”色块持续深红(>40%),说明该区域PSU间异质性剧增(如政策突变导致收入分化),此时应立即启动该区域的PSU细分或增加样本量——而不是等到最终报告才惊呼“结果不稳定”。这正是冯士雍强调的“抽样设计是活的过程,不是一锤定音”。


5. 我的抽样调查工作流:从翻开冯士雍教材第1页到交付最终报告的七步习惯

写了这么多技术细节,最后想说说我的个人习惯。它不是教科书流程,而是多年踩坑后固化下来的七步工作流,每一步都对应冯士雍教材的一个章节,也对应一个具体动作。它让我在面对任何新调查任务时,不再焦虑“从哪开始”,而是机械地、笃定地推进。

5.1 第1步:闭眼默写“抽样调查四要素”(对应教材第1章)

不查书,不用电脑,拿张纸默写:

  • 目标总体(Target Population):必须用一句话定义,包含时间、空间、属性三要素。例如:“2023年12月31日前,户籍在A省B市C区,且16-65周岁的常住居民”。
  • 抽样框(Sampling Frame):列出框的来源、更新日期、已知缺陷。例如:“A省公安户籍系统2023年Q3数据,缺陷:流动人口覆盖率约70%”。
  • 抽样方法(Sampling Method):精确到类型与参数。例如:“多阶段PPS抽样:第一阶段按街道户籍人口数PPS抽10个街道;第二阶段在每个入选街道内简单随机抽50户”。
  • 估计量(Estimator):写出公式,注明是否加权、如何处理无回答。例如:“人均月收入 = Σ (w_i * y_i) / Σ w_i,其中w_i为综合权重(含PSU概率、SSU概率、无回答调整)”。

为什么重要:这四要素是冯士雍全书的骨架。默写不是为了背诵,而是强迫自己把模糊想法翻译成可执行、可审计的语言。如果某一项写不出来,说明任务还没真正启动。

5.2 第2步:用Excel手算一道“最丑陋”的习题(对应教材第3-4章)

专挑那些数字不整、需要多次四舍五入、分母可能为零的习题(如第3章习题3.12)。不用Python,不用计算器,就用Excel的单元格一步步列公式。目的不是得到答案,而是感受“计算过程中的毛刺”:哪里容易溢出?哪里需要加IFERROR?哪个中间步骤的微小误差会放大最终结果?

血泪经验:曾有个项目,因在PPS抽样中忽略了k的浮点精度,导致最后一个抽样点超出累积和上限,程序崩溃。后来我养成了习惯:任何涉及cumsum和k的计算,必在Excel里用原始数据验算一遍边界情况。

5.3 第3步:为抽样框画一张“缺陷地图”(对应教材第2章)

打印抽样框的前100行,用红笔标出:

  • 红圈:明显错误(如电话号码为000-000-0000);
  • 黄线:可疑但需验证(如地址为“XX大厦1楼”,而该大厦实际无1楼);
  • 蓝点:缺失关键字段(如无年龄、无联系方式)。

然后统计三类标记的数量,计算“缺陷密度”。若红圈>5个,暂停一切,先联系数据提供方修正。

为什么有效:冯士雍说“抽样框是调查的心脏”,而缺陷地图就是心电图。它比任何统计检验都更快暴露致命伤。

5.4 第4步:在代码里硬编码所有“魔法数字”(对应教材全书参数意识)

拒绝n=300这样的裸数字。所有参数必须带注释,说明来源:

n_psu = 12 # 来源:预测试显示,12个PSU可使DEFF<2.0(见附件Pretest_Report_v2.pdf第7页) k_pps = 1500.5 # 来源:总规模15005,n=10,k=15005/10(保留一位小数,避免整数除法)

玄学时刻:当项目延期时,回看这些注释,总能找到当初决策的依据,避免甩锅式争论。

5.5 第5步:每天早会只问一个问题(对应冯士雍的“误差意识”)

无论项目进展如何,晨会第一句话永远是:“今天最大的潜在误差来源是什么?” 答案不能是“时间紧”,必须具体到技术点:“今天入户访问员反馈,城中村门牌号混乱,可能导致PSU定位偏差,建议下午校准GPS坐标”。

底层逻辑:冯士雍全

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询