2016-11-07 42 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我編輯了代碼。對不起,我第一次完全沒有意識到這一點 –

相關問題