【问题标题】:for loop; sample median; repeated random samplingfor 循环;样本中位数;重复随机抽样
【发布时间】:2019-02-20 15:58:35
【问题描述】:
repeat = 50
samplesize = 14
samplesize_list = [2, 5, 7] 
std_list = [10, 20, 30]
mean_list = [1000, 2000, 3000]

repeat_median = np.empty(repeat, dtype = float)
for j in range(len(samplesize_list)):
    size = samplesize_list[j]
    for z in range(len(std_list)):
        std_list = std_list[z]
        for m in range(len(mean_list)):
            mean_list = mean_list[m]
            for i in range(repeat):
                sample_data = np.random.normal(mean_list, std_list, size)
                repeat_median[i] = np.median(sample_data)
    plt.subplot(len(samplesize_list), 1, j+1)
    sns.distplot(repeat_median, color = 'blue')
    plt.legend(loc = "upper right")
    plt.show()

我的代码中的 for 循环有点问题。我正在尝试使用 50 个不同结果的重复随机抽样来找到样本中位数的样本分布。所以我应该只有一个图表来显示 14 个样本的样本中位数的分布(构成 14 个样本的 3 个不同的子组(2、5、7)每个都具有各自的均值和标准差的正态分布)。

例如:总体 2 的子组呈正态分布,标准差为 10,均值为 1000。总体 5 的子组呈正态分布,标准差为 20,均值为 2000,依此类推。在这种情况下如何将它们循环在一起?

【问题讨论】:

    标签: python matplotlib plot statistics


    【解决方案1】:

    我昨天最近回答了类似的问题,输出类似。不知道是不是你又发了。然而,在您的代码中定义变量时有几个错误。以下是带有输出的工作版本。修改/添加的行用注释标记#

    repeat = 50
    samplesize = 14
    samplesize_list = [2, 5, 7] 
    std_list = [10, 20, 30]
    mean_list = [1000, 2000, 3000]
    
    repeat_median = np.empty(repeat, dtype = float)
    for j in range(len(samplesize_list)):
        size = samplesize_list[j]
        for z in range(len(std_list)):
            std = std_list[z] # modified, you used the same name as variable
            for m in range(len(mean_list)):
                mean = mean_list[m] # modified, you used the same name as variable
                for i in range(repeat):
                    sample_data = np.random.normal(mean, std, size)
                    repeat_median[i] = np.median(sample_data)
        plt.subplot(len(samplesize_list), 1, j+1)
        sns.distplot(repeat_median, color = 'blue', label='Size %d'%samplesize_list[j]) # added legend
        plt.legend(loc = "upper right")
    plt.tight_layout() # added for better subplot adjustment
    

    输出


    使用列表推导式编写代码的一种不那么冗长的方式

    for j, size in enumerate(samplesize_list):
        for z, std in enumerate(std_list):
            for m, mean in enumerate(mean_list):
                for i in range(repeat):
                    sample_data = np.random.normal(mean, std, size)
                    repeat_median[i] = np.median(sample_data)
    

    【讨论】:

    • 如果说,我想要一个显示样本大小为 14 的样本中位数的样本分布的单个图表怎么办?而不是每个子组中样本中位数的样本分布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多