Rで解析:GUI操作で層別の記述統計図を作成できる「ggstratify」パッケージの紹介
統計解析では、モデルを選ぶ前に、対象とする変数の分布を層別に眺めて全体像をつかむ記述的な作業が欠かせません。しかし、複数の変数で層別した図を1枚ずつ作り、各層の観測数を図やパネルに書き入れていく作業には手間がかかります。ブラウザからインタラクティブに操作可能なパッケージの紹介です。
「ggstratify」パッケージは、点操作(ポイントアンドクリック)のGUIで記述統計の図を作成するShinyアプリケーションを提供するパッケージです。記述の対象とする変数と、その周囲に置く層別変数を選ぶと、2つ目の変数はggplot2のfacet_wrapのパネルに、3つ目以降の変数は1つずつ別々の図になります。各層はその観測数とともに図とパネルへ表示され、観測数が0の層は除外されず一覧に残されます。連続変数を四分位・等幅・任意の区切りでカテゴリー化し、層別変数として使うことも可能です。また、Kaplan-Meier曲線、時間変化を追う折れ線図、LOWESS平滑化の重ね描きも可能です。
本パッケージの利用で、モデル選択の前段にあたる記述的な集計を、GUI操作で素早く図にできるのではないかと考えます。
パッケージバージョンは0.0.1。Windows 11 x64 (build 26200)のR version 4.6.1で確認しています。
パッケージのインストール
下記コマンドを実行してください。
# パッケージのインストール
install.packages("ggstratify")
# パッケージの読み込み
library("ggstratify")コマンド例
詳細はコメント、パッケージのヘルプを確認してください。
Shinyは、RでインタラクティブなWebアプリケーションを構築するためのフレームワークです。ggstratifyの操作画面もShinyで作られており、関数を実行するとブラウザ上にアプリが開きます。
本パッケージでは、記述の対象とする1つの変数と、それを見る文脈となる層別変数(レイヤー)を画面で指定して図を作成します。渡すデータは、型変換を済ませてセッション上に用意したデータフレームである必要があります。以降は、下記のデータを共通して使用します。
# 直売所の出荷記録を模した架空データを作成する
# 地域は6水準を用意し、宮津市は出荷実績のない層として残す
地域 <- factor(
rep(c("左京区", "右京区", "伏見区", "宇治市", "亀岡市"), times = c(6, 5, 5, 4, 4)),
levels = c("左京区", "右京区", "伏見区", "宇治市", "亀岡市", "宮津市"))
# 品目は4水準を順番に割り当てる
品目 <- factor(
rep(c("九条ねぎ", "賀茂なす", "京たけのこ", "万願寺とうがらし"), length.out = 24),
levels = c("九条ねぎ", "賀茂なす", "京たけのこ", "万願寺とうがらし"))
# 栽培方法は2水準
栽培方法 <- factor(
rep(c("慣行", "有機"), length.out = 24),
levels = c("慣行", "有機"))
# 1日あたりの出荷量(kg)
出荷量 <- c(32, 28, 45, 51, 19, 38, 22, 40, 33, 27, 44, 30,
25, 36, 48, 21, 39, 29, 42, 34, 26, 47, 31, 37)
# 1kgあたりの単価(円)
単価 <- c(180, 210, 260, 150, 320, 190, 240, 170, 300, 200, 160, 280,
230, 175, 250, 310, 185, 265, 145, 295, 205, 155, 275, 195)
# データフレームにまとめる
出荷記録 <- data.frame(地域, 品目, 栽培方法, 出荷量, 単価)
データフレームからGUIで記述統計図を作成:ggstratifyコマンド
データフレームを渡すとShinyアプリが起動し、画面で対象変数と層別変数を選ぶと、図と観測数、その図を再現するggplot2のコードがまとめて表示されます。datasetに渡したオブジェクトの名前が、生成されるコードの中で参照する名前として使われます。
| オプション | 意味 | 初期値 |
|---|---|---|
| dataset | 記述の対象とするデータフレームまたは行列。セッション上に読み込み済みで、意図した型に変換済みのオブジェクトを渡す(ファイルパスは不可) | なし |
| launch.browser | shiny::runApp() に渡す値。TRUEでシステムの既定ブラウザを開く | TRUE |
| … | shiny::runApp() に渡す追加の引数 | なし |
# 対話的セッションでのみアプリを起動する
if (interactive()) {
# 出荷記録データを渡してGUIを起動する
# 画面で対象変数(例:単価)と層別変数(例:品目、地域)を選ぶ
# 宮津市は観測数0の層として一覧に表示され、図は描かれない
ggstratify(出荷記録)
# 既定ブラウザを開かず、RStudioのビューアなどで開く場合
ggstratify(出荷記録, launch.browser = FALSE)
}
この記事が誰かの役に立ちますように。