Ошибка типа: неподдерживаемый тип (ы) операндов для /: 'str' и 'int' при выполнении stats.ttest_ind - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть фрейм данных, который выглядит следующим образом:

  df:
  colA      colB
  A         0.97
  A         0.67
  A         0.32
  B         0.98
  B         0.81

t,p= stats.ttest_ind(group["colA"],group["colB"])

Выдает ошибку:

TypeError: неподдерживаемые типы операндовдля /: 'str' и 'int

1 Ответ

0 голосов
/ 18 декабря 2018

Задача

Описание 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 точек данных, так что это то, что вы ожидаете.Предполагая, что в вашем реальном фрейме данных гораздо больше данных, вы, вероятно, получите лучшие результаты.

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