リハビリ 人工知能 理学療法 Deep learning Deep Neural Network ディープラーニング AI 鍼灸

人工知能・リハビリ・日記・理学療法

タイトルはAIですが、個人的な日記なので、あまり気になさらないように。

Pythonで共分散分析(One-Way ANCOVA)をしてみた:Analysis of Covariance

どうも、お久しぶりです。

本日は、簡単に共分散分析ANCOVA:Analysis of Covariance)をPythonで行いましたので記事にしてみました。

 

 

まず、分散分析(ANOVA)は、三つ以上の独立したグループの平均値に統計的に有意な差があるか否かを決定するために使用する検定です。例えば、

FIM移動項目(”自立”, "見守り", "介助")の3群では歩行速度に差があるか?

という解析を行いたいとします。

 

一般的には、自立が歩行速度が速くて、介助の方が遅いという解釈です。しかし、年齢というFactorがありますよね。歩行自立の方が年齢が若いかもしれません。この年齢が共変量(交絡)となっている可能性がありますよね。

 

この年齢という共変量を考慮して解析するのが、共分散分析ANCOVA)です。先ほどの例で言うと、年齢を考慮しても、歩行速度に有意差があるのか?と言うことですね。

 

ANCOVAにはいくつかの前提条件があります。

・共変量と因子変数(群)は独立している

・分散の均一性

・独立性

・正規性

・極端な外れ値がない

これらの条件をクリアしていればANCOVAへGoです。

 

まずは、必要なものをインストール

pip install pingouin 

 

import numpy as np
import pandas as pd

from pingouin import ancova

 

データは適当です。(FIM、年齢、歩行速度)

df = pd.DataFrame({'fim_idou': np.repeat(['介助', '見守り', '自立'], 7),
                   'age': [67,88, 75, 77, 85,77,77,
                                     92, 69, 77, 74, 88, 70,66,
                                     96, 91, 88, 82, 80,67,56],
                   'gait_speeds': [0.8, 0.7, 0.6, 0.9, 0.4,0.3,0.5,
                                  1.2, 1.4, 1.2, 1.9, 1.7,1.5,1.9,
                                  1.0, 2.1, 1.5, 2.5, 2.8,1.9,2.0]})

 

結果を出力 !!!!

ancova(data=df, dv='gait_speeds', covar='age', between='fim_idou')

 

このような感じになりました。

f:id:Takuma_AI:20211125223659p:plain

 

FIM移動のp値は0.000016です。

年齢を考慮しても、歩行速度に差があったと言う解釈になります。

(どの群間に差があったかは、事後検定が必要です!)

 

別のコード

import pandas as pd

from dfply import *
df=pd.read_csv("ancova2.csv")

 

df >> group_by(X.group) >> summarize(n=X['bmi'].count(), mean=X['bmi'].mean(), std=X['bmi'].std())

f:id:Takuma_AI:20211127190309p:plain

 

import seaborn as sns
import matplotlib.pyplot as plt

 

fig, axs = plt.subplots(ncols=2)
sns.scatterplot(data=df, x="grip_strength", y="group", hue=df.group.tolist(), ax=axs[0])
sns.boxplot(data=df, x="knee_strength", y="group", hue=df.group.tolist(), ax=axs[1])
plt.show()

f:id:Takuma_AI:20211127190356p:plain

 

from pingouin import ancova

ancova(data=df, dv='knee_strength', covar='grip_strength', between='group')

 

握力を共変量にしたの膝伸展筋力の差の検定

 

 

前回の記事↓

takuma-ai.hatenablog.com

 

takuma-ai.hatenablog.com

 

takuma-ai.hatenablog.com

 

 

 

 

やさしいR入門 初歩から学ぶR-統計分析ー [ 赤間世紀 ]

価格:2,860円
(2021/11/24 21:30時点)
感想(0件)

 

Rではじめる統計基礎講座