使用带有掩码数组的scipy.stats.chisquare

时间:2016-11-07 17:37:33

标签: python arrays numpy scipy chi-squared

我需要计算一组数组(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功能用于我的数据?

1 个答案:

答案 0 :(得分:1)

虽然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))