2016-05-04 17 views
5

Yavaşça beni deli eden scipy'de t-testi yapmakta bir sorunum var. Çözülmesi basit olmalı, ama hiçbir şey işe yaramıyor ve kapsamlı arama ile bulabileceğim bir çözüm yok. En son Anaconda dağıtımında Spyder kullanıyorum.NaN değerleri ile Scipy'de T-Testi

Özellikle: Bir csv dosyasından aldığım bir pandalar veri çerçevesindeki iki sütun –– 'Trait_A' ve 'Trait_B' –– arasındaki ortalamaları karşılaştırmak istiyorum. Sütunlardan birindeki değerlerin bazıları 'Nan' ('Not A Number'). Bağımsız örnekler scipy t-testi işlevindeki varsayılan ayar, 'NaN' değerlerini barındırmaz. Bununla birlikte, setting the 'nan_policy' parameter to 'omit' should deal with this. Yine de, yaptığım zaman, test istatistiği ve p değeri 'NaN' olarak geri geliyor. Gerçek sayılarla kapsanan değer aralığını kısıtladığımda, test iyi çalışıyor. Verilerim ve kodum aşağıda; yanlış yaptığımı kim önerebilir? Teşekkürler!

veri:

 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 

Kodum:

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'))  

Benim sonucu:

Ttest_indResult(statistic=nan, pvalue=nan) 

cevap

10

O bir böcek gibi görünüyor. Sen t-testi geçirmeden önce nan s bırakabilirsiniz:

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

:

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

Çok teşekkürler! Bu tam olarak umduğum gibi çalışır; kesin bir böcek gibi görünüyor. Scipy geliştiricilerine rapor edeceğim. – Lodore66

+1

Hangi scipy sürümünü kullanıyorsunuz? (Nan_policy, 0.17 sürümünde yenidir.) Eğer 0.17 veya üzerindeyse, lütfen –

+0

bir hata dosyası hazırladım 0.17'yi kullanıyorum –– evet, hata dosyalanacak. – Lodore66

1

böcek dosyasında, hat 3885 yılında scipy/scipy/istatistik/stats.py olduğunu

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

sorunu çözmek sizin durumunuzda 'Trait_A' ve 'Trait_B' takas olmalıdır.

+0

Yararlı bilgiler –– Geçici çözüm için teşekkürler! – Lodore66