重复随机抽样(子人群)

时间:2018-09-20 13:56:50

标签: python statistics

我想对样本大小为90的样本进行400次重复随机抽样(即400种不同的抽样结果)。但是,由于总人口1800(n_pop)由3个不同的子种群(300、500, 1000)正态分布在各自的标准差和均值周围,如(std_list)和(mean_list)中所示。

即300个子人口(sub_pop = 300)通常分布在std dev 40附近,平均值为50,依此类推。此外,每个子群体在样本量中所占的比例必须与我已经将其硬编码为sampleize = [10,30,50]的总人口(n_pop)中的比例成正比。

即我想要从sub_pop 300随机生成的样本大小为10,从sub_pop 500随机生成的样本大小为30,依此类推。所以我想在这里生成一个列表,以保存大小为90的400个重复随机样本的输出。这是我到目前为止所做的:

import numpy as np
n_pop = 1800 #total population (300+500+1000=1800)
obs_size = 90 #sample size
sub_pop = [300, 500, 1000] #sub population
samplesize = [10, 30, 50]  #sub sample size (10+30+50=90)
std_list = [40, 50, 60] #standard deviation
mean_list = [50, 60, 70] #mean

list = []
for i in range(300):
    list += np.random.normal(loc = 50, scale = 40, size = 10).tolist()

for i in range(500):
    list += np.random.normal(loc = 60, scale = 50, size = 30).tolist()

for i in range(1000):
    list += np.random.normal(loc = 70, scale = 60, size = 50).tolist()

我不确定如何重复执行400次以上操作,然后将结果添加到列表中。

1 个答案:

答案 0 :(得分:1)

您几乎可以看到代码了:

import numpy as np
n_pop = 1800 #total population (300+500+1000=1800)
obs_size = 90 #sample size
sub_pop = [300, 500, 1000] #sub population
samplesize = [10, 30, 50]  #sub sample size (10+30+50=90)
std_list = [40, 50, 60] #standard deviation
mean_list = [50, 60, 70] #mean

all_samples = []
for _ in range(400):
    list = []
    list += np.random.normal(loc = 50, scale = 40, size = 10).tolist()
    list += np.random.normal(loc = 60, scale = 50, size = 30).tolist()
    list += np.random.normal(loc = 70, scale = 60, size = 50).tolist()
    all_samples.append(list)

您已经描述了np.random中的子种群,因此无需对该子种群进行300次迭代。