2016-05-04 16 views
5

Tôi gặp vấn đề khi thực hiện kiểm tra t trong scipy, điều đó khiến tôi từ từ phát điên. Nó phải đơn giản để giải quyết, nhưng không có gì tôi làm việc và không có giải pháp tôi có thể tìm thấy thông qua tìm kiếm rộng rãi. Tôi đang sử dụng Spyder trên bản phân phối mới nhất của Anaconda.T-Test trong Scipy với các giá trị NaN

Cụ thể: Tôi muốn so sánh các phương tiện giữa hai cột –– 'Trait_A' và 'Trait_B' –– trong khung dữ liệu gấu trúc mà tôi đã nhập từ tệp csv. Một số giá trị trong một trong các cột là 'Nan' ('Not a Number'). Cài đặt mặc định trên các chức năng t-test scipy độc lập không chứa các giá trị 'NaN'. Tuy nhiên, setting the 'nan_policy' parameter to 'omit' should deal with this. Tuy nhiên, khi tôi thực hiện, số liệu thống kê kiểm tra và giá trị p trở lại là 'NaN'. Khi tôi hạn chế phạm vi của các giá trị được đề cập đến các con số thực tế, kiểm tra hoạt động tốt. Dữ liệu và mã của tôi dưới đây; bất cứ ai có thể đề nghị những gì tôi đang làm sai? Cảm ơn!

dữ liệu:

 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ã của tôi:

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

kết quả của tôi:

Ttest_indResult(statistic=nan, pvalue=nan) 

Trả lời

10

Nó có vẻ như một lỗi. Bạn có thể thả nan s trước khi chuyển chúng đến t-test:

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

Cảm ơn rất nhiều! Điều này hoạt động chính xác như tôi hy vọng; có vẻ như đó là một lỗi chắc chắn. Tôi sẽ báo cáo cho các nhà phát triển Scipy. – Lodore66

+1

Bạn đang sử dụng phiên bản scipy nào? (nan_policy là mới trong phiên bản 0,17.) nếu là 0,17 trở lên, vui lòng gửi lỗi –

+0

Tôi đang sử dụng phiên bản 0,17 –– vâng, lỗi sẽ được gửi. – Lodore66

1

Lỗi là ở dòng 3885, trong tập tin scipy/scipy/stats/stats.py:

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

phải

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

trao đổi 'Trait_A''Trait_B' trong trường hợp của bạn giải quyết vấn đề của bạn.

+0

Hữu ích khi biết –– cảm ơn vì giải pháp! – Lodore66

Các vấn đề liên quan