Rで解析:ggplot2へのスプライン補間と密度推定の追記に便利です「ggalt」パッケージ


投稿日: Rの解析に役に立つ記事

ggplot2はstat_functionコマンドで統計情報を図に追記することができます。stat_functionコマンドでも多くの作業が可能ですが、簡単にスプライン補間、カーネルによる推定、2変数の密度分布を追記できるパッケージの紹介です。

なお、ggplot2を並べてプロットするときには「grid」パッケージを利用することが多いと思います。データ範囲が異なるプロットでは図の高さや幅が揃わない場合があります。そんな時は「cowplot」パッケージを利用してみてはいかがでしょうか。

・Rで解析:ggplot2の体裁を整える!「cowplot」パッケージ
 https://www.karada-good.net/analyticsr/r-102/

パッケージバージョンは0.1。実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。


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

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

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

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("ggalt")
library("ggplot2")
library("grid")

###データ例の作成#####
n <- 10
TestData <- data.frame(Group = sample(paste0("Group", 1:4), n, replace = TRUE),
                       Data1 = rnorm(n),
                       Data2 = rnorm(n) + rnorm(n) + rnorm(n))
#######

#ポイントをスプライン補間で結ぶ:geom_xsplineコマンド
#補間値を指定:spline_shapeオプション;値は-1から1の範囲
#プロットエリアの分割
grid.newpage()
#分割内容の指定
pushViewport(viewport(layout = grid.layout(3, 2)))
#ベース内容のプロット
PointPlot <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) +
             geom_point() + labs(title = "Base Plot")
#プロット
print(PointPlot, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
###スプライン補間を追加####
#描写列の設定
PosRow <- c(1, rep(2, 2), rep(3, 2))
#描写行の設定
PosCol <- c(2, rep(1:2, 2))
#スプライン値の設定
SplineValue <- seq(-1, 1, by = 0.5)
#プロット
for(i in seq(length(SplineValue))){

print(PointPlot + geom_xspline(spline_shape = SplineValue[i], size = 0.5) +
      labs(title = paste0("spline_shape: ", SplineValue[i])),
      vp = viewport(layout.pos.row = PosRow[i], layout.pos.col = PosCol[i]))
}

#カーネルによる推定:stat_bkdeコマンド
#塗りつぶしのアルファ値:alphaオプション
#平滑化パラメータ値:bandwidthオプション
StatBk1 <- ggplot(TestData, aes(x = Data1)) +
           stat_bkde(alpha = 1, bandwidth = 0.25) + labs(title = "alpha = 1, bandwidth = 0.25")
StatBk2 <- ggplot(TestData, aes(x = Data1, fill = Group)) +
           stat_bkde(alpha = 0.5, bandwidth = 0.25) + labs(title = "alpha = 0.5, bandwidth = 0.25")
#プロットエリアの分割
grid.newpage()
#分割内容の指定
pushViewport(viewport(layout = grid.layout(2, 1)))
#プロット
print(StatBk1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(StatBk2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))

#2変数の密度分布:stat_bkde2dコマンド
StatBk2d1 <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) +
             geom_point() + stat_bkde2d(bandwidth = c(0.3, 2)) + labs(title = "stat_bkde2d")
StatBk2d2 <- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) +
             geom_point() + stat_bkde2d(bandwidth = c(0.3, 2), aes(fill = ..level..), geom = "polygon") +
             labs(title = "stat_bkde2d fill")
#プロットエリアの分割
grid.newpage()
#分割内容の指定
pushViewport(viewport(layout = grid.layout(2, 1)))
#プロット
print(StatBk2d1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(StatBk2d2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))

出力例

・geom_xsplineコマンド
geom_xspline

・stat_bkdeコマンド
stat_bkde

・stat_bkde2dコマンド
stat_bkde2d


少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク