當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy stats.dunnett用法及代碼示例


本文簡要介紹 python 語言中 scipy.stats.dunnett 的用法。

用法:

scipy.stats.dunnett(*samples, control, alternative='two-sided', random_state=None)#

Dunnett 檢驗:將平均值與對照組進行多重比較。

這是 Dunnett 原始 single-step 測試的實現,如 [1] 中所述。

參數

sample1, sample2, … 一維數組

每個實驗組的樣本測量值。

control 一維數組

對照組的樣本測量值。

alternative {‘雙麵’,‘less’, ‘greater’},可選

定義備擇假設。

原假設是樣本和對照的分布均值相等。可以使用以下替代假設(默認為“雙麵”):

  • “雙麵”:樣本和對照的分布均值不相等。

  • ‘less’:樣本基礎分布的均值小於對照基礎分布的均值。

  • ‘greater’:樣本基礎分布的均值大於控件基礎分布的均值。

random_state {無,整數, numpy.random.Generator },可選

如果random_state是 int 或 None,一個新的numpy.random.Generator是使用創建的np.random.default_rng(random_state).如果random_state已經是一個Generator實例,然後使用提供的實例。

隨機數生成器用於控製 multivariate-t 分布的隨機 Quasi-Monte 卡羅積分。

返回

res DunnettResult

包含屬性的對象:

統計 浮點數數組

每次比較的測試的計算統計量。索引i 處的元素是組i 與對照組之間比較的統計數據。

p值 浮點數數組

每次比較的檢驗的計算 p 值。索引 i 處的元素是組 i 與對照之間比較的 p 值。

以及以下方法:

confidence_interval(confidence_level=0.95):

計算對照組平均值的差異+-津貼。

注意

與 independent-sample t-test 一樣,Dunnett 檢驗 [1] 用於推斷樣本的分布均值。然而,當在固定顯著性水平下執行多個t-tests時,“family-wise錯誤率”(在至少一次檢驗中錯誤拒絕零假設的概率)將超過顯著性水平。 Dunnett 的測試旨在執行多重比較,同時控製 family-wise 錯誤率。

鄧尼特檢驗將多個實驗組的平均值與單個對照組的平均值進行比較。 Tukey 的誠實顯著差異測試是另一個控製 family-wise 錯誤率的 multiple-comparison 測試,但是scipy.stats.tukey_hsd施行全部組間的兩兩比較。當不需要實驗組之間的成對比較時,鄧尼特檢驗因其較高的功效而更可取。

該測試的使用依賴於幾個假設。

  1. 觀察在組內和組間是獨立的。

  2. 每組內的觀察值呈正態分布。

  3. 從中抽取樣本的分布具有相同的有限方差。

參考

[1] (1,2,3)

查爾斯·W·鄧尼特。 “將幾種治療方法與對照進行比較的多重比較程序。”美國統計協會雜誌,50:272, 1096-1121,DOI:10.1080/01621459.1955.10501294,1955 年。

例子

在[1]中,研究了藥物對三組動物血細胞計數測量的影響。

下表總結了實驗結果,其中兩組接受不同的藥物,一組作為對照。記錄血細胞計數(每立方毫米數百萬個細胞):

>>> import numpy as np
>>> control = np.array([7.40, 8.50, 7.20, 8.24, 9.84, 8.32])
>>> drug_a = np.array([9.76, 8.80, 7.68, 9.36])
>>> drug_b = np.array([12.80, 9.68, 12.16, 9.20, 10.55])

我們想看看任何組之間的方法是否有顯著差異。首先,目視檢查盒須圖。

>>> import matplotlib.pyplot as plt
>>> fig, ax = plt.subplots(1, 1)
>>> ax.boxplot([control, drug_a, drug_b])
>>> ax.set_xticklabels(["Control", "Drug A", "Drug B"])  
>>> ax.set_ylabel("mean")  
>>> plt.show()
scipy-stats-dunnett-1_00_00.png

注意藥物 A 組和對照組的重疊四分位數範圍以及藥物 B 組和對照組之間的明顯分離。

接下來,我們將使用 Dunnett 檢驗來評估組均值之間的差異是否顯著,同時控製 family-wise 錯誤率:做出任何錯誤發現的概率。令零假設為實驗組與對照組具有相同的均值,而替代假設為實驗組與對照組不具有相同的均值。我們認為 5% family-wise 錯誤率是可以接受的,因此我們選擇 0.05 作為顯著性閾值。

>>> from scipy.stats import dunnett
>>> res = dunnett(drug_a, drug_b, control=control)
>>> res.pvalue
array([0.62004941, 0.0059035 ])  # may vary

A 組與對照組之間的比較對應的 p 值超過 0.05,因此我們不拒絕該比較的原假設。然而,與 B 組和對照組之間的比較相對應的 p 值小於 0.05,因此我們認為實驗結果是反對零假設的證據,有利於替代方案:B 組的平均值與對照組不同。

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.stats.dunnett。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。