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

Rの解析に役に立つ記事
スポンサーリンク

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

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

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

パッケージバージョンは2.13。実行コマンドはR version 4.2.2で確認しています。

スポンサーリンク

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

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

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

実行コマンド

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

<pre class="wp-block-syntaxhighlighter-code">
#&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#35501;&#12415;&#36796;&#12415;
library("ggalt")
#tidyverse&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
#grid&#12497;&#12483;&#12465;&#12540;&#12472;&#12364;&#12394;&#12369;&#12428;&#12400;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
if(!require("grid", quietly = TRUE)){
  install.packages("grid");require("grid")
}

###&#12487;&#12540;&#12479;&#20363;&#12398;&#20316;&#25104;#####
n &amp;lt;- 10
TestData &amp;lt;- data.frame(Group = sample(paste0("Group", 1:4), n, replace = TRUE),
                       Data1 = rnorm(n),
                       Data2 = rnorm(n) + rnorm(n) + rnorm(n))
#######

#&#12509;&#12452;&#12531;&#12488;&#12434;&#12473;&#12503;&#12521;&#12452;&#12531;&#35036;&#38291;&#12391;&#32080;&#12406;:geom_xspline&#12467;&#12510;&#12531;&#12489;
#&#35036;&#38291;&#20516;&#12434;&#25351;&#23450;:spline_shape&#12458;&#12503;&#12471;&#12519;&#12531;;&#20516;&#12399;-1&#12363;&#12425;1&#12398;&#31684;&#22258;
#&#12503;&#12525;&#12483;&#12488;&#12456;&#12522;&#12450;&#12398;&#20998;&#21106;
grid.newpage()
#&#20998;&#21106;&#20869;&#23481;&#12398;&#25351;&#23450;
pushViewport(viewport(layout = grid.layout(3, 2)))
#&#12505;&#12540;&#12473;&#20869;&#23481;&#12398;&#12503;&#12525;&#12483;&#12488;
PointPlot &amp;lt;- ggplot(TestData, aes(x = Data1, y = Data2, group = Group, color = Group)) +
             geom_point() + labs(title = "Base Plot")
#&#12503;&#12525;&#12483;&#12488;
print(PointPlot, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
###&#12473;&#12503;&#12521;&#12452;&#12531;&#35036;&#38291;&#12434;&#36861;&#21152;####
#&#25551;&#20889;&#21015;&#12398;&#35373;&#23450;
PosRow &amp;lt;- c(1, rep(2, 2), rep(3, 2))
#&#25551;&#20889;&#34892;&#12398;&#35373;&#23450;
PosCol &amp;lt;- c(2, rep(1:2, 2))
#&#12473;&#12503;&#12521;&#12452;&#12531;&#20516;&#12398;&#35373;&#23450;
SplineValue &amp;lt;- seq(-1, 1, by = 0.5)
#&#12503;&#12525;&#12483;&#12488;
for(i in seq(length(SplineValue))){

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

#&#12459;&#12540;&#12493;&#12523;&#12395;&#12424;&#12427;&#25512;&#23450;:stat_bkde&#12467;&#12510;&#12531;&#12489;
#&#22615;&#12426;&#12388;&#12406;&#12375;&#12398;&#12450;&#12523;&#12501;&#12449;&#20516;:alpha&#12458;&#12503;&#12471;&#12519;&#12531;
#&#24179;&#28369;&#21270;&#12497;&#12521;&#12513;&#12540;&#12479;&#20516;:bandwidth&#12458;&#12503;&#12471;&#12519;&#12531;
StatBk1 &amp;lt;- ggplot(TestData, aes(x = Data1)) +
           stat_bkde(alpha = 1, bandwidth = 0.25) + labs(title = "alpha = 1, bandwidth = 0.25")
StatBk2 &amp;lt;- ggplot(TestData, aes(x = Data1, fill = Group)) +
           stat_bkde(alpha = 0.5, bandwidth = 0.25) + labs(title = "alpha = 0.5, bandwidth = 0.25")
#&#12503;&#12525;&#12483;&#12488;&#12456;&#12522;&#12450;&#12398;&#20998;&#21106;
grid.newpage()
#&#20998;&#21106;&#20869;&#23481;&#12398;&#25351;&#23450;
pushViewport(viewport(layout = grid.layout(2, 1)))
#&#12503;&#12525;&#12483;&#12488;
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&#22793;&#25968;&#12398;&#23494;&#24230;&#20998;&#24067;:stat_bkde2d&#12467;&#12510;&#12531;&#12489;
StatBk2d1 &amp;lt;- 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 &amp;lt;- 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")
#&#12503;&#12525;&#12483;&#12488;&#12456;&#12522;&#12450;&#12398;&#20998;&#21106;
grid.newpage()
#&#20998;&#21106;&#20869;&#23481;&#12398;&#25351;&#23450;
pushViewport(viewport(layout = grid.layout(2, 1)))
#&#12503;&#12525;&#12483;&#12488;
print(StatBk2d1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(StatBk2d2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
</pre>

出力例

・geom_xsplineコマンド

geom_xspline

・stat_bkdeコマンド

stat_bkde

・stat_bkde2dコマンド

stat_bkde2d

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

タイトルとURLをコピーしました