нужна помощь в понимании этой строки кода - PullRequest
0 голосов
/ 20 сентября 2018

Я провожу 300 повторных случайных выборок размером 50 (14 + 20 + 16) из следующей нормально распределенной подгруппы:

sub_pop = [14, 20, 16]
mean_list = [100, 200, 300]
std_list = [40, 70, 80]

Моя цель состоит в том, чтобы визуализировать распределение выборкиМедиана этого образца с помощью 300 повторных случайных выборок.

вот что я сделал:

groups = [{'label': 'sub_one', 'mean': 100, 'std_dev': 40, 'size': 14}, 
          {'label': 'sub_two', 'mean': 200, 'std_dev': 70, 'size': 20},
          {'label': 'sub_three', 'mean': 300, 'std_dev': 80, 'size': 16}]

def median(mean, std_dev):
    data = np.random.normal(mean, std_dev) # indented function
    get_median = np.median(data)
    return get_median

group_all = []

for i in range(300):
    for i in range(groups[0]['size']):
        group_all.append(median(groups[0]['mean'], groups[0]['std_dev']))

for i in range(groups[1]['size']):
    group_all.append(median(groups[1]['mean'], groups[1]['std_dev']))

for i in range(groups[2]['size']):
    group_all.append(median(groups[2]['mean'], groups[2]['std_dev']))

sample = [abs(x) for x in group_all]
sns.distplot(sample, color = 'blue')
plt.show()

я сомневаюсь ... я не совсем понимаю первые 4строки кода.распознает ли Python, что я хочу случайным образом отобрать 300 выборок из каждой из 3 нормально распределенных подпопуляций и что каждая из подпопуляции обычно распределяется со своим собственным соответствующим средним и стандартным отклонением?большое спасибо!

1 Ответ

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

Сама функция и создание вашей группы правильные, но есть некоторые небольшие ошибки и вещи, которые можно было бы сделать лучше.

Вы можете сделать, как вы сделали, и итерировать медианную функцию по размеру группы.Но функция np.random.normal может принимать третий параметр, который является именно этим.Таким образом, функция может быть переписана

def median(mean, std_dev, size):
    data = np.random.normal(mean, std_dev, size)
    get_median = np.median(data)
return get_median

Циклы немного проблематичны.Вы повторяете 300 раз, что равняется вашим 300 желаемым имитациям, но затем каждый индивидуум добавляется в group_all.Не медиана каждого населения, как я думаю, вы хотели.Это исправлено в приведенной выше функции с помощью параметра size.

Тогда есть два вложенных цикла с одинаковым именем переменной.В этом случае это работает, но это плохая практика.Первая переменная цикла for не используется, поэтому ее лучше назвать _.Также два других цикла находятся вне первого цикла for и не будут повторяться.Циклы можно изменить на

groups_data = [[] for _ in range(3)]
for _ in range(300):
    for i, group in enumerate(groups):
        groups_data[i].append(median(group['mean'], group['std_dev'], group['size']))

Вы также можете построить несколько групп на одном графике.Просто сложите их перед вызовом plt.show ().

for group in groups_data:
    sns.distplot(group)
plt.show()

Я думаю, что этот код чище и, надеюсь, ближе к тому, чего вы хотели достичь.Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...