最近工作上有件事情需要抽样计算样本容量,作为一名统计学专业毕业的,对于抽样知识已经完全还给了老师,没办法,只能重新捡起抽样的相关方法论重新学习一遍,在网上搜了很多资料关于样本容量如何计算,也踩过坑,为了防止以后忘了,写了这个做个备忘。
分层随机抽样,也称类型随机抽样,是指首先将调查对象的总体单位按照一定的标准分成各种不同的类别(或组),然后根据各类别(或组)的单位数与总体单位数的比例确定从各类别(或组)中抽取样本的数量,最后按照随机原则从各类(或组)中抽取样本。
对于分层抽样,在总的样本量一定时,一个重要的问题是各层应该分配多少样本量。实际工作中有不同的分配方法,可以按对各层进行常数分配,也可以按各层单位数占总体单位数的比例分配,还可以采用在总费用一定条件下使估计量方差达到最小的最优分配等,其中等比例分配是较为常用的方法。
分层抽样是对每一组抽样,不存在样本组间误差,抽样平均误差取决于各组内方差的平均水平,即以各组样本单位数为权数,计算各组内方差的平均数。因此可用组内方差平均数计算出抽样平均误差。
2.1 样本容量概念
样本是从总体中抽出的部分单位的集合,样本中所包含的单位数被称为样本容量,一般用n表示。确定样本容量是制定抽样调查方案中的一个非常重要的环节。
2.2 计算公式
2.2.1重复抽样时的样本容量
在重复抽样条件下,样本容量的计算公式为:
或
2.2.2不重复抽样时的样本容量
在不重复抽样条件下,样本容量的计算公式为:
或
2.2.3各层样本量的确定
3.1 抽样平均误差
抽样平均误差时抽样平均数的(或抽样成数)的标注按察,它反映抽样平均数(或抽样成数)于总体平均数(或总体成数)的平均差异程度。由于从一个总体可能抽取多个样本,因此抽样指标(如平均数,抽样成数等),就有多个不同的数值,因而对全及指标(如总体平均数、总体成数等)的离差也就有大有小,这就必须用一个指标来衡量抽样误差的一般水平。
抽样平均数的平均数等于总体平均数,抽样成数的平均数等于总体总数,因而抽样平均数(或抽样成数)的标准差实际上反映了抽样平均数(或抽样成数)与总体平均数(或总体成数)的平均差异程度。
抽样平均误差的计算:
3.2 抽样极限误差
样本容量的计算公式是由样本极限误差的公式推导而来,两者可以互相推导。当初,看到样本容量公式中的允许误差
四、点估计和区间估计
点估计和区间估计是抽样推断的两种方法。点估计是在抽样推断中不考虑抽样误差,直接以抽样指标代替全体指标的一种推断方法。因为个别样本的抽样指标不等于全体指标,所以,用抽样指标直接代替全体指标,不可避免的会有误差。区间估计是抽样推断中根据抽样指标和抽样误差去估计全体指标的可能范围的一种推断方法。在从抽样指标推断全体指标时,用一定概率保证误差不超出某一给定范围。 [1]
这个给定的误差范围,叫允许误差,用△表示。如果用μ表示平均误差,t表示平均误差的倍数,即概率度,则允许误差与平均误差的关系式就是: △=tμ。如果推断的可信程度用P表示,则P为概率度t的函数。数理统计证明: 当t=1时,P=0.6827; t=2时,P=0.9545; t=3时,P=0.9973。t值愈大,P值愈趋近于1,即愈趋近于完全可信程度。实际工作中,可根据不同的t值,从概率表中查得相应的P值,也可根据预定的可信程度P值,查得相应的概率度t,以便于计算全及指标的可能范围。
五、样本容量确定的经验法则
在抽样调查中,除上述利用公式来计算样本容量,还有一种常用的方法,即采用经验法则。经验法则是建立在过去抽取满足统计方法要求的样本量所累积下来的经验。使用这个方法时很少需要统计方法知识,但是得出的样本大小很接近统计方法计算出的结果。在采用经验法则时,有关样本量大小的一项原则是:总体越小,要得到精确样本,即有较高概率得出与总体相同结果的样本,抽样比率就要越大。较大的总体能够使较小的抽样比得出同样好的样本。这是因为随着总体人数的增长,样本大小的精确性会随之增加。
对于规模较小的总体(1000人以下),研究者需要比较大的抽样比率(大约30%)为要有较高的精确性,这时需要大约300个样本;对于中等规模的总体(如10000人),要达到同样的精确度,抽样比率为10%或大约1000个样本量就可以了。就大规模的总体(超过150000)而言,抽样比率为1%或大约1500个样本量就能得出正确的结果。如果是非常大的总体(超过1000万)。研究者可以使用0.025%抽样比或者大约2500个样本,就能够得出精确的结果。当抽样比率非常小时,总体大小的影响力就不那么重要了。从2亿总体中抽取一个2500左右的样本,与从1000万总体中抽出同样规模的样本,它们的精确程度是完全相同的。
六、python代码实现分层抽样
#1.根据分层抽样,计算好每层的应抽样本容量
samples_rate1=samples_distribution.rename(columns={'index':'groupid'})
#2.将样本容量与原始数据df合并
df2=pd.merge(df,samples_rate1,on=['citygroup','category_custom','cut1'],how='inner')
df2['样本容量Ni']=df2['样本容量Ni'].apply(lambda x:int(x)) #设置为int类型
df2.head()
[out]:
#stand_merchant_id shop_name brand_name city_code 201902 201903 201904 201905 201906 201907 ... c1name name category_custom sales_75 shop_city city citygroup cut1 groupid 样本容量Ni
#0 000016025866db9bdb2c73b12c126d81 正宗云南大理寺过桥米线 正宗云南大理寺过桥米线 571 267.0 251.0 217.0 156.0 173.0 NaN ... 中式快餐 中式快餐 中式快餐 267.00 杭州 杭州 长三角地区 [200,1000) 86 2275
#3.将样本改为dict形式,
#如下,sampling1有groupid,样本容量Ni两列数据框 ,groupid为层号,将其设置为index
sampling1=samples_rate1[['groupid','样本容量Ni']].set_index('groupid')
sampling_dic21=sampling1.to_dict(orient='dict')
print (sampling_dic21) #字典套字典
[out]:{'样本容量Ni': {0: 267,
1: 3490,
2: 1355,
3: 393,
4: 74,
5: 832,
6: 338,
7: 79,
8: 120,
9: 530,
10: 413,
11: 15,
12: 37,
13: 783,
14: 318,
15: 70}}
sampling_dic22=sampling_dic21['样本容量Ni']
sampling_dic22 #我这里列了一部分分组的样本容量
[out]:{0: 267,
1: 3490,
2: 1355,
3: 393,
4: 74,
5: 832,
6: 338,
7: 79,
8: 120,
9: 530,
10: 413,
11: 15,
12: 37,
13: 783,
14: 318,
15: 70}
def typicalsamling(group,sampling_dic):
name =group.name
n = sampling_dic[name]
return group.sample(n=n)
#4.对样本进行分组
sampling_res2=df2.groupby('groupid',group_keys=False).apply(typicalsamling,sampling_dic22)
引用:
[1]:https://baike.baidu.com/item/%E6%8A%BD%E6%A0%B7%E6%9E%81%E9%99%90%E8%AF%AF%E5%B7%AE/5854193?fr=aladdin
[2]:https://baike.baidu.com/item/%E7%82%B9%E4%BC%B0%E8%AE%A1%E5%92%8C%E5%8C%BA%E9%97%B4%E4%BC%B0%E8%AE%A1
[3]:https://baike.baidu.com/item/%E6%8A%BD%E6%A0%B7%E5%B9%B3%E5%9D%87%E8%AF%AF%E5%B7%AE/168826#2