将 scipy.stats.chisquare 与屏蔽数组一起使用

Using scipy.stats.chisquare with masked arrays

我需要计算一组数组(observedexpected)的卡方拟合。数组大小相同,但是 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 函数?

虽然 numpy.ma.masked_where(expected == None, expected) 实际上会掩盖 expected 出现 None 似乎合乎逻辑,但 numpy.ma 无法识别 Noneexpected,因此 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))