簡體   English   中英

Python中不同樣本量的卡方檢驗

[英]Chi square test with different sample sizes in Python

我有兩組數據,如下所示。 每個數據集都有不同的長度

X_data1Y_data1 (黑色合並數據)的長度為 40,而X_data2Y_data2 (紅色)的長度為 18k。

我想對這兩個數據進行卡方擬合優度檢驗,如下所示

from scipy import stats
stats.chisquare(f_obs=Y_data1, f_exp=Y_data2)

但我不能,因為矢量大小不一樣,我收到一個錯誤。

~/opt/miniconda3/lib/python3.9/site-packages/scipy/stats/stats.py in chisquare(f_obs, f_exp, ddof, axis) 6850 6851 """ -> 6852 return power_divergence(f_obs, f_exp=f_exp , ddof=ddof, 軸=軸, 6853 lambda_="皮爾遜")
6854

~/opt/miniconda3/lib/python3.9/site-packages/scipy/stats/stats.py in power_divergence(f_obs, f_exp, ddof, axis, lambda_) 6676 如果 f_exp 不是 None: 6677 f_exp = np.asanyarray( f_exp) -> 6678 bshape = _broadcast_shapes(f_obs_float.shape, f_exp.shape) 6679 f_obs_float = _m_broadcast_to(f_obs_float, bshape) 6680 f_exp = _m_broadcast_to(f_exp, bshape)

~/opt/miniconda3/lib/python3.9/site-packages/scipy/stats/stats.py in _broadcast_shapes(shape1, shape2) 184 n = n1 185 else: --> 186 raise ValueError(f'shapes {shape1}和 {shape2} 不能' 187 '一起廣播') 188 shape.append(n)

ValueError:形狀 (40,) 和 (18200,) 無法一起廣播

Python 有什么方法可以比較這兩個數據嗎?

在此處輸入圖像描述

除非f_expf_obs具有相同的長度,否則你不能這樣做。 您可以通過在Y_data1的 x 軸上插入Y_data2來實現您的目標。 您可以按如下方式進行:

from scipy.interpolate import InterpolatedUnivariateSpline 
spl = InterpolatedUnivariateSpline(X_data2, Y_data2)
new_Y_data2 = spl(X_data1)

由於Y_data1new_Y_data2現在具有相同的長度,您可以在stats.chisquare中使用它們,如下所示:

from scipy import stats
stats.chisquare(f_obs=Y_data1, f_exp=new_Y_data2)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM