2016-05-04 17 views
5

Mam problem z wykonaniem testu t-sci w scipy, który doprowadza mnie do szaleństwa. Powinno to być łatwe do rozwiązania, ale nic, co robię, nie działa i nie ma rozwiązania, które można znaleźć poprzez obszerne wyszukiwanie. Używam Spydera w najnowszej dystrybucji Anacondy.Test T w Scipy z wartościami NaN

W szczególności: Chcę porównać średnie między dwiema kolumnami - "Trait_A" i "Trait_B" - w ramce danych pandy, którą zaimportowałem z pliku csv. Niektóre wartości w jednej z kolumn to "Nan" ("Nie liczba"). Domyślne ustawienie niezależnej próbki t-testowej nie uwzględnia wartości "NaN". Jednak setting the 'nan_policy' parameter to 'omit' should deal with this. Niemniej jednak, gdy to zrobię, statystyki testowe i wartość p powrócą jako "NaN". Kiedy ograniczam zakres wartości objętych rzeczywistymi liczbami, test działa dobrze. Moje dane i kod znajdują się poniżej; czy ktoś może sugerować, co robię źle? Dzięki!

danych:

 Trait_A Trait_B 
0 1.714286 0.000000 
1 4.275862 4.000000 
2 0.500000 4.625000 
3 1.000000 0.000000 
4 1.000000 4.000000 
5 1.142857 1.000000 
6 2.000000 1.000000 
7 9.416667 1.956522 
8 2.052632 0.571429 
9 2.100000 0.166667 
10 0.666667 0.000000 
11 2.333333 1.705882 
12 2.768145  NaN 
13 0.000000  NaN 
14 6.333333  NaN 
15 0.928571  NaN 

Mój kod:

import pandas as pd 
import scipy.stats as sp 
data= pd.read_csv("filepath/Data2.csv") 
print (sp.stats.ttest_ind(data['Trait_A'], data['Trait_B'], nan_policy='omit'))  

Mój wynik:

Ttest_indResult(statistic=nan, pvalue=nan) 

Odpowiedz

10

Wydaje się błąd. można upuścić nan s przed przekazaniem ich do testu t:

sp.stats.ttest_ind(data.dropna()['Trait_A'], data.dropna()['Trait_B']) 
Ttest_indResult(statistic=0.88752464718609214, pvalue=0.38439692093551037) 
+1

Dziękuję bardzo! Działa to dokładnie tak, jak miałem nadzieję; wygląda na to, że to błąd. Opowiem o tym programistom Scipy. – Lodore66

+1

Którą wersję scipy używasz? (nan_policy jest nowością w wersji 0.17.) jeśli jest 0.17 lub wyższy, zrób plik o błędzie –

+0

Używam wersji 0.17 - więc tak, błąd zostanie zgłoszony. – Lodore66

1

Błąd w linii 3885, w pliku scipy/scipy/statystyki/stats.py:

# check both a and b 
contains_nan, nan_policy = (_contains_nan(a, nan_policy) or 
          _contains_nan(b, nan_policy)) 

musi być

contains_nan    = (_contains_nan(a, nan_policy)[0] or 
          _contains_nan(b, nan_policy)[0]) 

swapping 'Trait_A' i 'Trait_B' w przypadku rozwiązania problemu.

+0

Warto wiedzieć - dzięki za obejście problemu! – Lodore66

Powiązane problemy