分割表の基礎
分割表を作成します
#検査結果 0=陰性、1=陽性
検査結果 <- c(rep("陰性",70), rep("陽性",75))
#罹患 0=無し、1=あり
罹患 <- c(
rep("無し", 45),
rep("あり", 25),
rep("無し", 8),
rep("あり", 67)
)
tab <- xtabs(~ 検査結果 + 罹患)
print(tab)
レベルの確認、基準の変更
分割表の左上が「検査陽性」、「罹患あり」になるように検査結果の「陽性」を上段に移行します。まず各変数(検査結果、罹患)にレベルを付与するためにファクター変数に変換します。
検査結果 <- factor(検査結果)
罹患 <- factor(罹患)
変数の種類(データ型)を調べます
class(検査結果)
class(罹患)
データ型がfactor変数になったので変数にlevelが付与されます。確認してみます。
levels(検査結果)
levels(罹患)
levels:先に記載されている方がデータの『基準』となります。検査結果の基準は”陰性”、罹患の基準は”あり”になっています。
正確に言うと基準ではなく、検査結果のlevelは、陰性=1、陽性=2、罹患のlevelはあり=1、無し=2としてRが認識するということになります。
as.integer(検査結果)
as.integer(罹患)
検査結果の基準(1)を”陽性”に変更します。
検査結果2<- factor(検査結果, levels = c(“陽性”, “陰性”))
としても同じ結果を得ることができます
“陽性”が先に表示されています。したがって検査結果のレベルの基準(1)は”陽性”になりました。再度、分割表を作成します(間違いないように検査結果2という変数名に変更しておきます)。
tab2 <- xtabs(~ 検査結果2 + 罹患)
print(tab2)
これで馴染みのある並び方になりました
参考(ChatGPTの回答)
分割表を作成
# データフレームの作成
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(tab1, file="tab1.csv",fileEncoding="UTF-8")
エクセルなどで開いて文字化けすることが気になるのであれば、以下のように保存
write.csv(tab1, file="tab1.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)
リスク比、オッズ比
例)治療あり群が転倒するリスクを調査します
*ここでは暴露=治療
tab4 <- matrix(c(3, 9, 12, 6), 2, 2)
rownames(tab4) <- c("治療あり", "治療なし")
colnames(tab4) <- c("転倒あり", "転倒なし")
View(tab4)
パッケージ mgcv を使用します(パッケージのインストール)
library(mgcv)
Epi::twoby2(tab4)
Relative Risk: 相対リスク(二つのグループのリスクの比率、リスク=暴露群が転倒するリスク)
相対リスク$=\dfrac{3}{15} /\dfrac{9}{15}$
Sample Odds Ratio: オッズ比(二つのグループのオッズの比率、オッズ=暴露割合/非暴露割合)
後ろ向き研究の場合を想定して、暴露オッズ比を求めます
オッズ比$=\dfrac{3}{9} /\dfrac{12}{6}$
Conditional MLE Odds Ratio: 条件付き最尤推定(MLE)オッズ比
Probability difference: 治療「あり」と「なし」グループで効果「有効」のアウトカムが発生する確率の差
確率差$=\dfrac{3}{15}-/\dfrac{9}{15}$
後ろ向きケース・コントロール研究ではリスクが計算できません。
そのためオッズ比を計算して関連性を検証します!
比を求める場合は、分母がコントロール群となります!!!
基準の変更
ロジスティック回帰で基準を変更する場合
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
)
コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください