для цикла; выборка медиана; повторная случайная выборка - PullRequest
0 голосов
/ 16 сентября 2018
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 выборок (3 разные подгруппы (2, 5, 7), которые составляют 14 выборок, каждая из которых обычно распределена со своим собственным средним и стандартным отклонением).

Например: подгруппа населения 2 обычно распределяется со стандартным отклонением 10 и средним значением 1000. Подгруппа населения 5 обычно распределяется со стандартным отклонением 20 и средним значением 2000 и т. Д.Как мне соединить их вместе в этом случае?

1 Ответ

0 голосов
/ 16 сентября 2018

Я недавно ответил на аналогичный вопрос вчера с похожим выводом. Я не уверен, что это был ты, кто отправил это снова. Тем не менее, было несколько ошибок в определении переменной в вашем коде. Ниже приводится рабочая версия с выводом. Измененные / добавленные строки отмечены комментарием #

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

выход

enter image description here


Менее подробный способ написания кода с использованием списочных представлений

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...