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コマンド
| オプション | 意味 | 初期値 |
|---|---|---|
| x | table()で作った2次元または3次元の表 | なし |
| groupName | 群の変数名を表す文字列 | なし |
| scoreName | スコアの変数名を表す文字列 | なし |
| strataName | 層の変数名を表す文字列 | NULL |
| colorScheme | 帯の色。RColorBrewerのパレット名か、ggplot2の離散の塗りスケール。FALSEで色を付けない | “Blues” |
| colorScheme.reverse | TRUEで色の並びを逆にする | 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 |
| returnData | TRUEでプロットに使ったデータを返す。上級者向け | 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のスケールで色を付ける

<おすすめのRに関する書籍です>
2群の分布を確率-確率プロットで比較:pp_plotコマンド
| オプション | 意味 | 初期値 |
|---|---|---|
| x | table()で作った2次元または3次元の表 | なし |
| groupName | 群の変数名を表す文字列 | なし |
| scoreName | スコアの変数名を表す文字列 | なし |
| strataName | 層の変数名を表す文字列 | NULL |
| reverse.scores | TRUEでスコアの並びを逆にする | FALSE |
| panel | TRUEで層ごとにパネルを分ける。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.reverse | TRUEで帯の色の並びを逆にする | 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のような英国式のつづりを受け止める | なし |
<おすすめのRに関する書籍です>
# 新農法と従来農法の確率-確率プロット
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つのパネルに重ね、信頼区間と帯の数値を外す

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

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