我有一個包含以下列的資料框:完整 24 小時內的時間、藥物和移動性。
資料幀的快照
Time Drug Mobility
18 A 1.2
19 A 1.3
20 A 1.3
21 A 1.2
18 B 3.2
19 B 3.2
20 B 3.3
21 B 3.3
然后,我使用以下代碼執行雙向方差分析,以比較藥物在每個時間點對移動性的影響:
mod = ols('Mobility~Time Drug Time*Drug', data = fdf).fit()
aov = anova_lm(mod, type=2)
然后我想做一個多重比較測驗(事后),特別是 sidak 但不知道怎么做。努力在網上找到任何資源來學習。
我知道我可以使用 tukey 的測驗,但它比較了所有內容,而且我也只對同一時間點的藥物效果感興趣:
18 A - 18 B
19 A - 19 B
20 A - 20 B
不是:
18 A - 19 B
18 A - 20 B
20 A - 18 A
任何幫助都會有很大幫助
uj5u.com熱心網友回復:
如果您只對組內的比較感興趣,那么您的系數中已經有了它們。
使用示例資料集:
import statsmodels.formula.api as sm
import pandas as pd
import numpy as np
from statsmodels.stats.anova import anova_lm
from statsmodels.stats.multitest import multipletests
fdf = pd.DataFrame({'Time':np.random.choice([18,19,20],50),
'Drug':np.random.choice(['A','B'],50),
'Mobility':np.random.uniform(0,1,50)})
fdf['Time'] = pd.Categorical(fdf['Time'])
mod = sm.ols('Mobility~Time Drug Time:Drug', data = fdf).fit()
aov = anova_lm(mod, type=2)
結果如下所示:
mod.summary()
OLS Regression Results
==============================================================================
Dep. Variable: Mobility R-squared: 0.083
Model: OLS Adj. R-squared: -0.021
Method: Least Squares F-statistic: 0.7994
Date: Wed, 08 Dec 2021 Prob (F-statistic): 0.556
Time: 07:13:14 Log-Likelihood: -4.4485
No. Observations: 50 AIC: 20.90
Df Residuals: 44 BIC: 32.37
Df Model: 5
Covariance Type: nonrobust
========================================================================================
coef std err t P>|t| [0.025 0.975]
----------------------------------------------------------------------------------------
Intercept 0.4063 0.094 4.323 0.000 0.217 0.596
Time[T.19] 0.1622 0.149 1.091 0.281 -0.137 0.462
Time[T.20] -0.0854 0.133 -0.643 0.524 -0.353 0.182
Drug[T.B] 0.0046 0.149 0.031 0.975 -0.295 0.304
Time[T.19]:Drug[T.B] -0.1479 0.206 -0.717 0.477 -0.564 0.268
Time[T.20]:Drug[T.B] 0.2049 0.199 1.028 0.310 -0.197 0.607
在這種情況下, Time=18 是參考,因此Drug[T.B]B 對 A 的影響也是如此,在 Time=18 時,這是 的結果18 B - 18 A,Time[T.19]:Drug[T.B]將是19 B - 19 A并且Time[T.20]:Drug[T.B]將是20 B - 20 A。
對于多重比較調整,您可以簡單地提取這些結果并計算校正后的 p 值:
res = pd.concat([mod.params,mod.pvalues],axis=1)
res.columns=['coefficient','pvalues']
res = res[res.index.str.contains('Drug')]
res['corrected_p'] = multipletests(res['pvalues'],method="sidak")[1]
res['comparison'] = ['18 B - 18 A','19 B - 19 A','20 B - 20 A']
coefficient pvalues corrected_p comparison
Drug[T.B] 0.004630 0.975284 0.999985 18 B - 18 A
Time[T.19]:Drug[T.B] -0.147928 0.477114 0.857038 19 B - 19 A
Time[T.20]:Drug[T.B] 0.204925 0.309616 0.670942 20 B - 20 A
另請參閱多重測驗的幫助頁面
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/376263.html
標籤:Python 数据框 统计数据 统计模型 scipy.stats
