【问题标题】:Using scipy.stats.chisquare with masked arrays使用带有掩码数组的 scipy.stats.chisquare
【发布时间】:2016-11-07 17:37:33
【问题描述】:

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

【问题讨论】:

  • expMasked 中仍然有 None。您需要改用numpy.ma.masked_where(expected == np.array(None), expected)

标签: python arrays numpy scipy chi-squared


【解决方案1】:

虽然numpy.ma.masked_where(expected == None, expected) 实际上会掩盖None 出现的expected 似乎是合乎逻辑的,但numpy.ma 无法将None 识别为与expected 相当,因此None 必须转换为@ 987654328@。您的代码将像这样工作

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

【讨论】:

  • @jlconlin 您需要用静止的东西替换掩码值。您现在可以使用expMasked[expMasked.mask] = 0 或任何您想要的替换值。
  • @jlconlin 我编辑了代码。抱歉,我第一次完全忽略了这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 2020-04-23
  • 2017-06-24
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2018-05-06
相关资源
最近更新 更多