我需要计算一组数组(observed
和expected
)的卡方拟合。数组的大小相同,但expected
的某些元素是None
,因为我不知道预期的值。
我想使用scipy.stats.chisquare
来计算数据的卡方拟合。由于我的部分数据为None
,因此出现错误:
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 :(得分: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))