Задача
Описание scipy.stats.ttest_ind
из документов :
Рассчитать Т-критерий для средних из двух независимых выборок баллов.
Проблема, с которой вы сталкиваетесь, заключается в том, что, хотя значения в 'colB'
действительно являются допустимым примером возможных «оценок», значения в 'colA'
- это не просто: они простобуквы.Невозможно провести t-тест между группой чисел и группой букв.Они просто не сравнимы.Внутренне ttest_ind
в какой-то момент пытается разделить значения в 'colA'
на значения в 'colB'
, что приводит к ошибке.
Решение
Если ваши значения в первомстолбцы предназначены для представления успеха и неудачи, тогда вы находитесь в ситуации, когда одна из ваших групп оценивается двоично, а другая - непрерывно.В подобных случаях более подходящим является выполнение логистической регрессии .Затем вы получите значение p с помощью теста Wald .Если значения в первом столбце представляют категориальную переменную, вместо этого вы должны выполнить полиномиальную логистическую регрессию .
Сначала вы должны преобразовать свой первый столбец в кадре данных в единицы и нули.Учитывая, что A
- это успех, а B
- неудача, вот как вы выполняете преобразование:
df['colA'] = df['colA'].replace({'A':1, 'B':0})
Вам нужно установить пакет statsmodels
для следующей части (если у вас есть pip
, просто запустите pip install statsmodels
), но пакет упрощает выполнение логистической регрессии.Вам следует обратиться к statsmodels.discrete.discrete_model.Logit
документам, если у вас есть какие-либо вопросы о том, как его использовать.
Вот базовый пример:
import statsmodels.api as sm
df['intercept'] = 1.0
logit_model=sm.Logit(df['colA'], df[df.columns[1:]])
result=logit_model.fit()
print(result.summary())
, после чего вы получитевывод типа:
Optimization terminated successfully.
Current function value: 0.528480
Iterations 7
Logit Regression Results
==============================================================================
Dep. Variable: colA No. Observations: 5
Model: Logit Df Residuals: 3
Method: MLE Df Model: 1
Date: Tue, 18 Dec 2018 Pseudo R-squ.: 0.2148
Time: 11:10:54 Log-Likelihood: -2.6424
converged: True LL-Null: -3.3651
LLR p-value: 0.2293
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
colB -6.1702 6.722 -0.918 0.359 -19.345 7.004
intercept 5.3452 5.791 0.923 0.356 -6.005 16.695
==============================================================================
Не очень хорошее значение p, но есть только 5 точек данных, так что это то, что вы ожидаете.Предполагая, что в вашем реальном фрейме данных гораздо больше данных, вы, вероятно, получите лучшие результаты.