scipy.stats.

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] 指出,該統計量在 xy依設計不是對稱的:「…我們可能想了解 \(Y\) 是否是 \(X\) 的函數,而不僅僅是其中一個變數是否是另一個變數的函數。」請參閱 [1] 註解 1。

從 SciPy 1.9 開始,np.matrix 輸入(不建議用於新程式碼)在執行計算之前會轉換為 np.ndarray。在這種情況下,輸出將是純量或形狀適當的 np.ndarray,而不是 2D np.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])