Сравните пропорции и статистическую значимость между более чем 2 группами - PullRequest
0 голосов
/ 20 мая 2019

Я создал фрейм данных, чтобы сравнить пропорции трех или более групп (реальные данные имеют более 50 000 строк).В левом столбце 0 указывает на выживание, 1 указывает на смерть, а 0,1,2,3 в правом столбце указывает на оценку.

В приведенном для примера кадре данных пропорции по классам, по-видимому, не отличаются,но я хочу вывести p-значение независимо от того, является ли оно статистически значимым или нет.

Показатели выживаемости, полученные из примеров, следующие:

оценка 0 57,14%

оценка 1 66,66%

оценка 2 50,0%

оценка 3 60,0%

Я пытался использовать тесты Кая и Ановы.Однако я не знаю точно, какой метод является правильным.

ex_df = pd.DataFrame({"Survive":[0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1],
              "grade":[2,1,2,3,0,0,0,3,0,2,1,1,0,0,0,1,2,3,1,2,1,3,3,2]})

Я хочу вычислить значение p

значение p: 0.xxxx ....

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Это проблема, которую лучше всего проанализировать с помощью логистической регрессии. (Предлагаемый метод использования биномиального теста групп классов по всему семанту статистически неверен.) Использование R (поскольку я не питонист), это легко продемонстрировать, и я подозреваю, что есть аналог Python. Результаты R могут быть использованы для проверки правильности любой реализации Python. Как вы можете видеть, структура данных в Pandas была скопирована с R, как и многие ее статистические процедуры:

ex_df = data.frame(Survive = c(0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,0,1,1,1,0,0,0,1),
               grade=factor(c(2,1,2,3,0,0,0,3,0,2,1,1,0,0,0,1,2,3,1,2,1,3,3,2)) )
 glm(Survive~grade, data=ex_df, family="binomial")
#--- output---
Call:  glm(formula = Survive ~ grade, family = "binomial", data = ex_df)

Coefficients:
(Intercept)       grade1       grade2       grade3  
    -0.2877      -0.4055       0.2877      -0.1178  

Degrees of Freedom: 23 Total (i.e. Null);  20 Residual
Null Deviance:      32.6 
Residual Deviance: 32.25    AIC: 40.25
#----------

summary( glm(Survive~grade, data=ex_df, family="binomial") )
#-------output------
Call:
glm(formula = Survive ~ grade, family = "binomial", data = ex_df)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.1774  -1.0579  -0.9005   1.3018   1.4823  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -0.2877     0.7638  -0.377    0.706
grade1       -0.4055     1.1547  -0.351    0.725
grade2        0.2877     1.1180   0.257    0.797
grade3       -0.1178     1.1902  -0.099    0.921

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 32.601  on 23  degrees of freedom
Residual deviance: 32.247  on 20  degrees of freedom
AIC: 40.247

Number of Fisher Scoring iterations: 4
0 голосов
/ 31 мая 2019

Тест Anova требует, чтобы ваши данные были нормально распределены, а ваши - нет (только 0 и 1). Вы можете попробовать биномиальный тест , приняв гипотетическую вероятность выживания равной общему количеству единиц в ваших данных, деленному на общее количество измерений, независимо от оценки. Затем сделайте биноминальный тест для каждого сорта. Функция python, с которой я связан, возвращает значение p.

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