2016-11-07 46 views
0

我需要计算一组数组(observedexpected)的卡方拟合。阵列尺寸相同,但expected的一些元素是None,因为我不知道预期值。我想用scipy.stats.chisquare来计算数据的卡方拟合。由于我的一些数据是None,我得到的错误:将scipy.stats.chisquare与蒙版数组一起使用

TypeError: unsupported operand type(s) for -: 'float' and 'NoneType' 

我试图解决这个问题只包括不None

import numpy.ma 
import scipy.stats 

expected = [None, 2,3,4] 
observed = [1,2.2,3.3,4.4] 

expMasked = numpy.ma.masked_where(expected == None, expected) 
obsMasked = numpy.ma.masked_where(expected == None, observed) 

chi2 = scipy.stats.chisquare(obsMasked, f_exp=expMasked) 

这个数据只是给我同样的错误。

如何在我的数据中使用scipy.stats.chisquare函数?

+0

'expMasked'仍然有'None'。您需要使用'numpy.ma.masked_where(期望== np.array(无),预计)'而不是。 –

回答

1

虽然逻辑上似乎numpy.ma.masked_where(expected == None, expected)实际上会掩盖expected其中None发生,numpy.ma不承认None为相当于expected,所以None必须强制转换为np.array。您的代码将如此工作

import numpy as np 
import scipy.stats 

expected = [None, 2,3,4] 
observed = [1,2.2,3.3,4.4] 

expMasked = np.ma.masked_where(expected == np.array(None), expected) 
obsMasked = np.ma.masked_where(observed == np.array(None), observed) 

expMasked[expMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH) 
obsMasked[obsMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH) 

chi2 = scipy.stats.chisquare(np.array(obsMasked), f_exp=np.array(expMasked)) 
+0

这仍然给我同样的答案。请参阅:http://ideone.com/8rjzVQ – jlconlin

+0

@jlconlin您需要用某些东西来替换蒙面值。您现在可以执行'expMasked [expMasked.mask] = 0'或任何您想要的替换值。 –

+0

@jlconlin我编辑了代码。对不起,我第一次完全没有意识到这一点 –