标准差计算的第 25 个百分位数的差异

数据挖掘 熊猫 统计数据 python-3.x 采样
2022-02-23 11:41:02

对于以下每个样本大小 [3,5,7,9],我需要计算采样值的标准偏差的第 25 个百分位。试验总数为 10 次。

数据框

US    China  Korea   India   UK
196    213    9        77    84
105    122   16        52    60
346    305  -12        78    69
155    113  -27        42    30
210    200  -5         68    65
212    190  -10        70    62
227    219  -4         90    87
106     96  -9         89    81
367    326  -11        91    80
86     104   21        69    83
200    194   -3        77    75

我的代码:

    sample_sizes = [5, 7, 9]
    num_trials = 10
    col_index = 3
    p = 25
    df=pd.read_csv(filename)
    std_list=[]
    for i in sample_sizes:
        for j in range(num_trials):
            Sample=df.sample(n=i, random_state=j)
            col=Sample.iloc[:,col_index].std()
            std_list.append(col)
        ptile=np.percentile(std_list,p)
        print(ptile)  

上面的代码给出了以下 ptile 值:

   9.079918996054708
   9.408029717257989
   11.572161922408418

但是,如果我确实删除了第一个循环并对样本大小的值进行硬编码,则该ptile值会发生变化。

    num_trials = 10
    col_index = 3
    p = 25
    df=pd.read_csv(filename)
    std_list=[]
    for j in range(num_trials):
        Sample=df.sample(n=7, random_state=j)
        col=Sample.iloc[:,col_index].std()
        std_list.append(col)
    ptile=np.percentile(std_list,p)
    print(ptile)  
The code above gives `ptile = 11.878249130348483` for sample size 7 
whereas the first code gives `ptile = 9.408029717257989` for a sample size of 7.

如果有人能解释这种不一致的原因,我将不胜感激。

1个回答

std_list发生这种情况是因为您在开始使用新样本大小后忘记重置。对代码的第一个版本进行以下更改(具有不同的i),你会得到想要的结果:

sample_sizes = [5, 7, 9]
num_trials = 10
col_index = 3
p = 25
df=pd.read_csv(filename)
for i in sample_sizes:
    std_list=[]
    for j in range(num_trials):
        Sample=df.sample(n=i, random_state=j)
        col=Sample.iloc[:,col_index].std()
        std_list.append(col)
    ptile=np.percentile(std_list,p)
    print(ptile)