Стандартизируйте переменную по группе - почему среднее всегда равно нулю? - PullRequest
0 голосов
/ 13 октября 2018

У меня есть следующие данные:

df = pd.DataFrame({'sound': ['A', 'B', 'B', 'A', 'B', 'A'],
                   'score': [10, 5, 6, 7, 11, 1]})
print(df)

  sound  score
0     A     10
1     B      5
2     B      6
3     A      7
4     B     11
5     A      1

Если я стандартизирую (т. Е. По шкале Z) переменную score, я получу следующие значения.Среднее значение для нового столбца z в основном равно 0, а SD равно 1, оба значения ожидаются для стандартизированной переменной:

df['z'] = (df['score'] - df['score'].mean())/df['score'].std()
print(df)
print('Mean: {}'.format(df['z'].mean()))
print('SD: {}'.format(df['z'].std()))

  sound  score         z
0     A     10  0.922139
1     B      5 -0.461069
2     B      6 -0.184428
3     A      7  0.092214
4     B     11  1.198781
5     A      1 -1.567636
Mean: -7.401486830834377e-17
SD: 1.0

Однако, что меня на самом деле интересует, так это расчет Z балловна основе членства в группе (sound).Например, если оценка основана на звуке A, то конвертируйте это значение в оценку Z, используя среднее значение и SD только для звуковых значений A * .Аналогично, для звуковых оценок BZ будут использоваться только среднее значение и SD для звука B. Это, очевидно, приведет к другим значениям по сравнению с обычным расчетом Z-баллов:

df['zg'] = df.groupby('sound')['score'].transform(lambda x: (x - x.mean()) / x.std())
print(df)
print('Mean: {}'.format(df['zg'].mean()))
print('SD: {}'.format(df['zg'].std()))

  sound  score         z        zg
0     A     10  0.922139  0.872872
1     B      5 -0.461069 -0.725866
2     B      6 -0.184428 -0.414781
3     A      7  0.092214  0.218218
4     B     11  1.198781  1.140647
5     A      1 -1.567636 -1.091089
Mean: 3.700743415417188e-17
SD: 0.894427190999916

Мой вопрос: почему среднее значение для группыстандартизированные значения (zg) также в основном равны 0?Это ожидаемое поведение или есть ошибка в моих вычислениях где-то?

Баллы z имеют смысл, потому что стандартизация внутри переменной по существу приводит к значению 0. Но значения zg рассчитываются с использованием различных среднихи SD для каждой звуковой группы, поэтому я не уверен, почему среднее значение этой новой переменной также было установлено на 0.

Единственная ситуация, в которой я могу видеть это, это если сумма значений> 0равно сумме значений <0, которая при усреднении отменяет до 0. Это происходит при обычном вычислении Z-баллов, но я удивлен, что это также происходит при работе в нескольких группах, подобных этой ... </p>

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Да, это ожидаемое поведение.

В причудливых словах, используя Закон повторных ожиданий ,

enter image description here

И особенно, если группы Y являются конечными и, следовательно, счетными,

enter image description here

, где

enter image description here

Однако по построению каждый E[X|Y_j] равен 0 для всех значений Y в вашем наборе G возможных групп.

Таким образом, общее среднее значение также будет равно нулю.

0 голосов
/ 13 октября 2018

Я думаю, что это имеет смысл.Если E [abc |def] - ожидаемое значение abc, заданное def), затем в df['zg']:

m1 = E ['zg' |sound = 'A'] = (0.872872 + 0.218218 -1.091089)/3 ~ 0

m2 = E ['zg' |sound = 'B'] = (-0.725866 - 0.414781 + 1.140647)/3 ~ 0

и

E ['zg'] = (m1+m2)/2 = (0.872872 + 0.218218 -1.091089 -0.725866 - 0.414781 + 1.140647)/6 ~ 0

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