chatterjeexi#
- scipy.stats.chatterjeexi(x, y, *, axis=0, y_continuous=False, method='asymptotic', nan_policy='propagate', keepdims=False)[原始碼]#
計算 xi 相關性並執行獨立性檢定
xi 相關係數是用於衡量兩個變數之間關聯性的指標;當變數獨立時,該值趨近於零,而當存在強烈關聯時,該值趨近於 1。與其他相關係數不同,即使關聯不是單調的,xi 相關性也有效。
- 參數:
- x, yarray-like
樣本:自變數和應變數的對應觀察值。(N-d) 陣列必須是可廣播的。
- axisint 或 None,預設值:0
如果為整數,則為計算統計量的輸入軸。輸入的每個軸切片(例如,行)的統計量將出現在輸出的相應元素中。如果為
None
,則在計算統計量之前將展平輸入。- method‘asymptotic’ 或
PermutationMethod
實例,可選 選擇用於計算 p 值的方法。預設值為 ‘asymptotic’。以下選項可用。
'asymptotic'
:將標準化檢定統計量與常態分佈進行比較。PermutationMethod
實例。在這種情況下,p 值是使用permutation_test
以及提供的配置選項和其他適當設定計算得出的。
- y_continuousbool,預設值:False
是否假設 y 是從連續分佈中抽取的。如果 y 是從連續分佈中抽取的,則無論是否假設這一點,結果都是有效的,但啟用此假設將加快計算速度,並且通常會產生相似的結果。
- nan_policy{‘propagate’, ‘omit’, ‘raise’}
定義如何處理輸入的 NaN。
propagate
:如果 NaN 出現在計算統計量的軸切片(例如,行)中,則輸出的相應條目將為 NaN。omit
:在執行計算時將省略 NaN。如果沿計算統計量的軸切片中剩餘的資料不足,則輸出的相應條目將為 NaN。raise
:如果存在 NaN,將引發ValueError
。
- keepdimsbool,預設值:False
如果設定為 True,則縮減的軸將保留在結果中,作為大小為 1 的維度。使用此選項,結果將正確地廣播到輸入陣列中。
- 返回:
- resSignificanceResult
包含屬性的物件
- statisticfloat
xi 相關統計量。
- pvaluefloat
關聯的 p 值:在獨立性虛無假設下,至少與觀察值一樣高的統計量的機率。
註解
目前在 x 中沒有對 ties 進行特殊處理;它們由實作任意中斷。
[1] 指出,該統計量在 x 和 y 中依設計不是對稱的:「…我們可能想了解 \(Y\) 是否是 \(X\) 的函數,而不僅僅是其中一個變數是否是另一個變數的函數。」請參閱 [1] 註解 1。
從 SciPy 1.9 開始,
np.matrix
輸入(不建議用於新程式碼)在執行計算之前會轉換為np.ndarray
。在這種情況下,輸出將是純量或形狀適當的np.ndarray
,而不是 2Dnp.matrix
。同樣地,雖然會忽略遮罩陣列的遮罩元素,但輸出將是純量或np.ndarray
,而不是mask=False
的遮罩陣列。參考文獻
[1] (1,2)Chatterjee, Sourav. “A new coefficient of correlation.” Journal of the American Statistical Association 116.536 (2021): 2009-2022. DOI:10.1080/01621459.2020.1758115.
範例
產生完美相關的資料,並觀察到 xi 相關性接近 1.0。
>>> import numpy as np >>> from scipy import stats >>> rng = np.random.default_rng() >>> x = rng.uniform(0, 10, size=100) >>> y = np.sin(x) >>> res = stats.chatterjeexi(x, y) >>> res.statistic np.float64(0.9012901290129013)
在獨立性虛無假設下,觀察到如此高統計值的機率非常低。
>>> res.pvalue np.float64(2.2206974648177804e-46)
隨著雜訊的引入,相關係數會降低。
>>> noise = rng.normal(scale=[[0.1], [0.5], [1]], size=(3, 100)) >>> res = stats.chatterjeexi(x, y + noise, axis=-1) >>> res.statistic array([0.79507951, 0.41824182, 0.16651665])
由於 y 的分佈是連續的,因此傳遞
y_continuous=True
是有效的。統計量是相同的,並且 p 值(未顯示)僅略有不同。>>> stats.chatterjeexi(x, y + noise, y_continuous=True, axis=-1).statistic array([0.79507951, 0.41824182, 0.16651665])