применить z-критерий пропорции к каждой записи в кадре данных - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть код ниже, где я пытаюсь применить ztest пропорции одного образца к значениям в каждой строке в моих данных.У меня есть пример данных ниже из моего dataframe df.Я пытаюсь сравнить каждую пропорцию в значении с пропорцией, полученной из значения в счетчике, и количества испытаний из значения в obs.Я хочу значение ap для каждой записи.Вместо этого я, кажется, получаю одно значение p для всех записей.У меня есть несколько строк желаемого вывода ниже, чтобы проиллюстрировать, что я имею в виду.Может кто-нибудь подсказать, пожалуйста, что я делаю не так и как это исправить?Или предложить более привлекательный способ сделать это?Похоже, должен быть способ сделать это с пандами.

# code:

def pvl(x):
    return sm.stats.proportions_ztest(x['count'], 
                              x['value'],
                              x['obs'], 
                              alternative='larger')[1]



df['pval']=df.apply(pvl,
                    axis=1
      )



# sample data:

print(df)

count   value     obs                         
211.0  0.013354  15800.0
18.0   0.001139  15800.0
310.0  0.019620  15800.0
114.0  0.007215  15800.0
 85.0  0.005380  15800.0


# sample output:

count   value     obs     pval                      
211.0  0.013354  15800.0  0.5
18.0   0.001139  15800.0  0.5
310.0  0.019620  15800.0  0.5
114.0  0.007215  15800.0  0.5
 85.0  0.005380  15800.0  0.5


# desired output:

count   value     obs     pval                      
211.0  0.013354  15800.0  0.49
18.0   0.001139  15800.0  4.1454796845134295e-41
310.0  0.019620  15800.0  0.9999999999965842

1 Ответ

1 голос
/ 28 сентября 2019

В вашей функции pvl есть ошибка.Функция proportion_ztest() из модели статистики принимает входные данные в следующем порядке: count, nobs, value .Поэтому вы должны определить свою функцию следующим образом:

def pvl(x):
    return sm.stats.proportions_ztest(x['count'], x['obs'], 
                          x['value'], alternative='larger')[1]

Однако с вашими данными я получаю результаты, очень близкие к 0,5, а не те, которые вы указали в качестве желаемого результата.Мне интересно, как вы получили второй и третий результаты, потому что они кажутся мне неправильными (если я не понял ваш вопрос).

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