Игнорирование значений nan при создании доверительных интервалов - PullRequest
0 голосов
/ 05 октября 2018

Как следует из названия, я пытаюсь создать доверительные интервалы на основе таблицы с тонной значений нан.Вот пример того, с чем я работаю.

     Attendence%    2016-10 2016-11 2017-01 2017-02 2017-03 2017-04 ...
Name
Karl                   nan    0.2     0.4     0.5      0.2     1.0  
Alice                  1.0    0.7     0.6     nan      nan     nan   
Ryan                   nan    nan     1.0     0.1      0.9     0.2       
Don                    nan    0.5     nan     0.2      nan     nan  
Becca                  nan    0.2     0.6      0       nan     nan  

Для справки, в моем фактическом фрейме данных есть больше NaN, чем нет, и они представляют месяцы, когда их не нужно было показывать, поэтому заменазначения с 0 повлияют на результат.

Теперь каждый раз, когда я пытаюсь применить доверительный интервал к каждому имени, он возвращает среднее значение как NaN, а также оба интервала.

Karl     (nan, nan, nan)
Alice    (nan, nan, nan)
Ryan     (nan, nan, nan)
Don      (nan, nan, nan)
Becca    (nan, nan, nan)

Isесть способ отфильтровать NaN, так что он просто применяет формулу, не принимая во внимание значения NaN.До сих пор я делал следующее:

unstacked - таблица, которую я визуально представлял.

def mean_confidence_interval(unstacked, confidence=0.9):
    a = 1.0 * np.array(unstacked)
    n = len(a)
    m, se = np.mean(a), scipy.stats.sem(a)
    h = se * scipy.stats.t.ppf((1 + confidence) / 2., n-1)
    return m, m-h, m+h

answer = unstacked.apply(mean_confidence_interval)
answer

1 Ответ

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

Используйте np.nanmean вместо np.mean: https://docs.scipy.org/doc/numpy/reference/generated/numpy.nanmean.html

И для scipy.stats.sem(a) замените его на пропуск scipy.stats.sem(a, nan_policy='omit').https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.sem.html

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