Rで作る分割表(クロス表)

分割表作成

# データフレームの作成
dat <- data.frame(
    c(rep("あり", 15),rep("なし", 15)),
    c(rep("あり", 9), rep("なし", 6), rep("あり", 5), rep("なし", 10)),
    c(rep("有効", 12), rep("無効", 3), rep("有効", 4), "無効", "有効", "有効", rep("無効", 8))
)
# 列名を変更
colnames(dat) <- c("筋トレ", "歩行練習", "効果")
# 先頭6行の確認
head(dat)

1列目(筋トレ)と3列目(歩行練習)の分割表を作成

tab1 <- xtabs(
    ~筋トレ + 効果,
    data=dat
)
print(tab1)

分割表を作業フォルダに保存する場合

write.csv(tab3, file="tab3.csv",fileEncoding="UTF-8")

エクセルなどで開いて文字化けすることが気になるのであれば、以下のように保存

write.csv(tab3, file="tab3.csv",fileEncoding="Shift-JIS")

ただし、次回読み込むときも fileEncoding=”Shift-JIS” とする

分割表の操作

周辺合計

addmargins(tab1)

列の入れ替え

tab1[c("あり","なし"), c("有効", "無効")]

転置

t(tab1)

効果の有無で層別

歩行練習の有無で層別

tab2 <- xtabs(~筋トレ + 効果 + 歩行練習, data=dat)
print(tab2)

コクラン-マンテル-ヘンツェル検定で共通オッズ比の検定

層別要因の影響を調整した条件付き独立性の検定

調整済みリスク比・オッズ比推定

mantelhaen.test(tab2) 

効果=有効のみの分割表

tab3 <- xtabs(
    ~ 筋トレ + 効果, 
    data=dat[dat$歩行練習=="あり",] 
)
print(tab3)

リスク比、オッズ比

library(Epi) 
Epi::twoby2(tab1)

Relative Risk: 相対リスク(二つのグループ間でアウトカムが発生するリスクの比率)

Sample Odds Ratio: オッズ比(二つのグループでアウトカムが発生するオッズの比率)

Conditional MLE Odds Ratio: 条件付き最尤推定(MLE)オッズ比

Probability difference: 筋トレ「あり」と「なし」グループで効果「有効」のアウトカムが発生する確率の差

基準の変更

ロジスティック回帰で基準を変更する場合

dat$効果n <- ifelse(dat$効果=="有効", 1 , 0)
glm(
    formula = 効果n ~ 筋トレ + 歩行練習,
    family = binomial,
    data = dat
)

筋トレなし群のオッズは、筋トレあり群の平均 $e^{-1.734}=0.1765767$倍になることが推定されます

関数 reveal を使用して筋トレの基準を”なし”に変更してみます

基準を操作する場合には、変数をfactorに変更します

dat$筋トレ <- factor(dat$筋トレ)
dat$筋トレ2 <- relevel(dat$筋トレ, ref="なし")
glm(
    formula = 効果n ~ 筋トレ2 + 歩行練習,
    family = binomial,
    data = dat
)

リハビリテーション研究に必要な統計学について、R(Windows, ChatGPT)を使って紹介してます。サンプルは全て架空のデータで作成しています。したがって解析結果は事実とは異なりますのでご了承ください。間違いなどのご指摘はコメント欄にご記入いただければ助かります。

統計学備忘録をフォローする

ダメ出し 間違い、分かりにくい部分などのご意見をお待ちします

タイトルとURLをコピーしました