本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:順序尺度の結果を群ごとの帯グラフで比べられる「rankinPlot」パッケージ

「rankinPlot」パッケージは、改良Rankinスケール(mRS)のような順序尺度の結果を、群ごとの分布を横に積み上げた帯グラフ(Grotta Bar)や、2群の分布を比べる確率-確率プロットにできるパッケージです。渡すのは、スコアと群(必要なら層)を数え上げたクロス集計表です。プロットはggplot2で作られるので、ggplot2のスケールを後から足して見た目を整えられます。脳卒中の臨床試験だけでなく、品質の等級やアンケートの5段階評価など、順序のある結果を群で比べたい場面に使えるのではないかと考えます。

パッケージバージョンは1.2.0。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。

パッケージのインストール

下記コマンドを実行してください。

# パッケージのインストール
install.packages("rankinPlot")

# パッケージの読み込み
library("rankinPlot")
スポンサーリンク

コマンド例

詳細はコメント、パッケージのヘルプを確認してください。例は、伏見区・亀岡市・福知山市の圃場で、九条ねぎを新農法と従来農法で育て、出荷時の品質等級(0が最上、4が最下)を比べた架空のデータです。

Grotta Barは、群ごとにスコアの割合を1本の帯に積み上げ、隣り合う群の同じスコアの境目を線でつないだ図です。確率-確率プロットは、2群のスコアの累積割合を縦軸と横軸にとった図で、対角線から外れるほど2群の分布が違うことを示します。2群から1つずつ取り出した組を比べたとき、一方が良い組(勝ち)、同じスコアの組(引き分け)、悪い組(負け)の割合を色の付いた領域で示せます。

# 乱数を固定
set.seed(1234)

# 地区と地区ごとの株数
area <- c("伏見区", "亀岡市", "福知山市")
n <- c(80, 60, 50)

# 地区ごとに新農法と従来農法の品質等級(0〜4)を作成
negi <- do.call(rbind, lapply(seq_along(area), function(i) {
  rbind(
    data.frame(
      area = area[i], method = "新農法",
      grade = sample(0:4, n[i],
        replace = TRUE,
        prob = c(0.30, 0.30, 0.20, 0.12, 0.08)
      )
    ),
    data.frame(
      area = area[i], method = "従来農法",
      grade = sample(0:4, n[i],
        replace = TRUE,
        prob = c(0.15, 0.25, 0.25, 0.20, 0.15)
      )
    )
  )
}))

# 群と地区の並び順を固定
negi$method <- factor(negi$method, levels = c("新農法", "従来農法"))
negi$area <- factor(negi$area, levels = area)

# 等級・農法・地区のクロス集計表
x3 <- table(Grade = negi$grade, Method = negi$method, Area = negi$area)

# 等級・農法のクロス集計表
x2 <- table(Grade = negi$grade, Method = negi$method)
x2
     Method
Grade 新農法 従来農法
    0     64       33
    1     50       45
    2     43       54
    3     21       32
    4     12       26

スコアの分布を群ごとの帯グラフでプロット:grottaBarコマンド

オプション意味初期値
xtable()で作った2次元または3次元の表なし
groupName群の変数名を表す文字列なし
scoreNameスコアの変数名を表す文字列なし
strataName層の変数名を表す文字列NULL
colorScheme帯の色。RColorBrewerのパレット名か、ggplot2の離散の塗りスケール。FALSEで色を付けない“Blues”
colorScheme.reverseTRUEで色の並びを逆にするFALSE
printNumbers区分ごとに表示する数値。”count”、”percentage”、”count.percentage”など“count”
nCol層ごとの図を並べる列数。層が無いときは効かない1
dir層ごとの図を縦(”v”)と横(”h”)のどちらに並べるか“v”
width帯の太さ。帯の間の線の長さが変わる0.9
textSize軸などの文字の大きさ15
numberSize帯の中に表示する数値の大きさ5
textFace表示する数値の書体。”plain”、”bold”、”italic”、”bold.italic”“plain”
textColor帯の中の数値の色のベクトルNULL
lineSize線の太さ0.5
lineColor線の色“black”
drawLines群の間の境目をつなぐ線を引くかTRUE
returnDataTRUEでプロットに使ったデータを返す。上級者向けFALSE
…その他のオプション。colourSchemeとtextColourだけは対応するオプションを上書きするなし
# 新農法と従来農法の等級の分布をプロット
grottaBar(x2, groupName = "Method", scoreName = "Grade")

# 地区ごとに分け、割合で表示。緑系の色を逆順で使う
grottaBar(x3,
  groupName = "Method", scoreName = "Grade",
  strataName = "Area",
  printNumbers = "percentage",
  colorScheme = "Greens", colorScheme.reverse = TRUE
)

# 地区を群、農法を層にして横に2列で並べ、件数と割合を表示
grottaBar(x3,
  groupName = "Area", scoreName = "Grade",
  strataName = "Method",
  printNumbers = "count.percentage",
  nCol = 2, dir = "h",
  textColor = c(rep("white", 2), rep("black", 3))
)

# 色とつなぎ線を外し、ggplot2のスケールで色を付ける
grottaBar(x2,
  groupName = "Method", scoreName = "Grade",
  colorScheme = FALSE, drawLines = FALSE
) +
  ggplot2::scale_fill_brewer(palette = "YlOrBr", direction = -1)

新農法と従来農法の等級の分布をプロット

地区ごとに分け、割合で表示。緑系の色を逆順で使う

地区を群、農法を層にして横に2列で並べ、件数と割合を表示

色とつなぎ線を外し、ggplot2のスケールで色を付ける

2群の分布を確率-確率プロットで比較:pp_plotコマンド

オプション意味初期値
xtable()で作った2次元または3次元の表なし
groupName群の変数名を表す文字列なし
scoreNameスコアの変数名を表す文字列なし
strataName層の変数名を表す文字列NULL
reverse.scoresTRUEでスコアの並びを逆にするFALSE
panelTRUEで層ごとにパネルを分ける。FALSEで全ての層を1つのパネルにまとめるTRUE
panel.nCol層ごとのパネルを並べる列数。層が無いときやpanelがFALSEのときは効かないNULL
panel.dir層ごとのパネルを縦(”v”)と横(”h”)のどちらに並べるか。層が無いときやpanelがFALSEのときは効かない“h”
polygon勝ち・負け・引き分けの組の割合を示す多角形を入れるか。層があってpanelがFALSEのときは使えないpanel
polygon.alpha多角形の透明度0.4
polygon.color多角形の枠線の色“#999999”
polygon.win.fill勝ちの領域の塗りの色“#71f594”
polygon.tie.fill引き分けの領域の塗りの色“#e8e156”
polygon.loss.fill負けの領域の塗りの色“#f97194”
contour比例オッズの仮定が成り立つときに線が乗る位置を等高線で示すかFALSE
contour.color等高線の色“#555555”
contour.line.color等高線の線の色contour.color
contour.label.color等高線のラベルの色contour.color
confint各点のまわりに信頼区間を入れるかTRUE
confint.angle信頼区間を伸ばす向き。”fixed”または”proportional.odds”“fixed”
confint.level信頼区間の信頼水準0.95
bar群と層ごとの分布を示す帯を入れるかTRUE
bar.colorScheme帯の色に使うパレット名“Blues”
bar.colorScheme.reverseTRUEで帯の色の並びを逆にするFALSE
bar.width帯の太さ0.1
bar.lineColor帯の枠線の色“black”
bar.linewidth帯の枠線の太さ0.5
bar.text区分ごとに表示する数値。FALSEで表示しない“count”
bar.text.size帯の数値の大きさ5
bar.text.color帯の数値の色のベクトルNULL
bar.text.face帯の数値の書体。”plain”、”bold”、”italic”、”bold.italic”“plain”
neutral.color差が無いことを示す対角線の色“#222222”
neutral.linetype対角線の線の種類“dashed”
neutral.linewidth対角線の太さ0.5
line.color確率-確率の線の色。ggplot2の離散の色スケールを渡すと層ごとに色を変えられるNULL
line.linetype確率-確率の線の種類。ggplot2の離散の線種スケールを渡すと層ごとに変えられる“solid”
strata.text.size層のラベルの文字の大きさ。層があってpanelがFALSEのときだけ効くbar.text.size
…その他のオプション。使われないが、colourのような英国式のつづりを受け止めるなし

# 新農法と従来農法の確率-確率プロット
pp_plot(x2, groupName = "Method", scoreName = "Grade")

# 地区ごとにパネルを分け、帯を緑系にする
pp_plot(x3,
  groupName = "Method", scoreName = "Grade",
  strataName = "Area",
  panel = TRUE,
  bar.colorScheme = "Greens"
)

# 3地区の線を1つのパネルに重ね、信頼区間と帯の数値を外す
pp_plot(x3,
  groupName = "Method", scoreName = "Grade",
  strataName = "Area",
  panel = FALSE,
  confint = FALSE,
  bar.text = FALSE
)

# 比例オッズの等高線を入れ、多角形を外して仮定に合うかを見る
pp_plot(x2,
  groupName = "Method", scoreName = "Grade",
  confint.angle = "proportional.odds",
  contour = TRUE,
  polygon = FALSE,
  bar.colorScheme = "RdYlGn", bar.colorScheme.reverse = TRUE,
  neutral.color = "darkred"
)

新農法と従来農法の確率-確率プロット

地区ごとにパネルを分け、帯を緑系にする

3地区の線を1つのパネルに重ね、信頼区間と帯の数値を外す

比例オッズの等高線を入れ、多角形を外して仮定に合うかを見る


この記事が誰かの役に立ちますように。

スポンサーリンク
価格および配送状況は変更される場合があります。購入時は商品ページをご確認ください。
当サイトに表示されている商品情報はAmazonから提供されたものであり、更新または削除される場合があります。
karada-goodはAmazonアソシエイトとして、適格販売により収入を得ています。