Случайное распределение групп для психологического эксперимента в python? - PullRequest
1 голос
/ 07 августа 2020

Я собираюсь провести эксперимент по моторному обучению со случайной и блокированной практикой. У меня есть кластерный план выборки, в котором я отбираю различные тренировочные группы (примерно по 12 спортсменов в каждой группе). Я проведу предварительное тестирование со спортсменами, из которого я произведу случайное распределение в случайную и заблокированную группу.

Однако, поскольку я ожидаю, что спортсмены в группе будут иметь довольно широкий диапазон результатов, мне нужно чтобы выполнить стратификацию производительности, чтобы убедиться, что у случайной и заблокированной группы есть app. равное количество хороших и плохих исполнителей. Чтобы выполнить sh это, я написал функцию в Python, которая сначала сортирует значения в столбце «производительность» фрейма данных от меньшего к большему. Затем он разбивает их на две группы, как на этом рисунке:

Трещина Я использовал следующий код Python, чтобы выполнить sh это:

    @staticmethod
    def allokereIGrupper():
    df1 = groupby.sort_values(by='PRESTASJON', ascending=True)
    mask = np.arange(len(df1)) % 2
    global group1
    group1 = df1.loc[mask == 0]
    global group2
    group2 = df1.loc[mask == 1]
    return group1, group2

Теперь, когда я приложение. иметь равное количество хороших и плохих спортсменов, я хочу распределить спортсменов в каждой группе (группы 1 и 2) на случайную и заблокированную группы. Я использовал метод python random sample (), чтобы выполнить sh это. Я создал две функции, по одной для каждой группы.

    @staticmethod
    def velgerGR1():
    grupper = ['RANDOM', 'BLOCKED']
    for i in group1['BIB#'].unique():
        velger = random.sample(grupper, k=1)
    group1['GRUPPE'] = velger
    return group1

    @staticmethod
    def velgerGR2():
    grupper = ['RANDOM', 'BLOCKED']
    for i in group2['BIB#'].unique():
        velger = random.sample(grupper, k=1)
    group2['GRUPPE'] = velger
    return group2

Два приведенных выше статических метода создают новый столбец либо со СЛУЧАЙНЫМ, либо с БЛОКИРОВАННЫМ. Следующий статический метод просто выбирает тех спортсменов, которые были назначены в случайную и заблокированную группу внутри каждой группы, а затем объединяет их в фрейм данных для случайного выбора и фрейм данных для заблокированных.

    @staticmethod
    def lageDataFrames():
    global dfJoinedRandom
    hentRandom = group1.query('GRUPPE == "RANDOM"')
    hentRandom2 = group2.query('GRUPPE == "RANDOM"')
    dfJoinedRandom = pd.concat([hentRandom, hentRandom2])

    global dfJoinedBlocked
    hentBlocked = group1.query('GRUPPE == "BLOCKED"')
    hentBlocked2 = group2.query('GRUPPE == "BLOCKED"')
    dfJoinedBlocked = pd.concat([hentBlocked, hentBlocked2])

    return dfJoinedRandom, dfJoinedBlocked

работай. Мой код не возвращает никаких ошибок, и я получаю два DataFrames с тем, что хочу. Однако мне интересно:

  1. Является ли это допустимым / хорошим способом выполнения случайного распределения?
  2. Есть ли лучший способ выполнить эту задачу в Python?

Для моего статистического теста я собираюсь использовать модель многоуровневой регрессии.

Ура

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