「Rにおけるエラーバーを伴ったグループ化された棒グラフ」

『グループ化された棒グラフにエラーバーを追加』

データの準備と可視化に関する包括的なガイド

Photo by Paulius Dragunas on Unsplash

バープロットは、いくつかの理由から必須で広く使用される可視化ツールです。数値とカテゴリ変数の関係を視覚化するために優れた選択肢であり、カテゴリやグループ間の違いを理解しやすくします。数え上げ、頻度、比率、割合を表現できるため、さまざまなデータタイプに対応しています。

Rでは、カテゴリデータを分析し、バープロットで表現することができます。しかし、Rプログラミングに初めて取り組む初心者は、平均、標準誤差の推定、およびエラーバー付きのグループ化されたバープロットの作成に関する課題に直面することがよくあります。これらの課題に対処するためには、データのタイプ、データ構造、およびデータ分析に必要な操作に基本的な理解が必要です。

このチュートリアルでは、異なる種類のデータタイプとそれらをデータ分析に適した形式に変換する方法を理解するために、単純なデータセットの作成から始めます。その後、平均と標準誤差の推定のプロセスについて詳しく説明します。それに続いて、エラーバー付きのグループ化されたバープロットを作成します。初心者のサポートのために、コードをステップバイステップで細かく解説して、プログラミングプロセスを十分に理解できるようにします。

読者はRパッケージのインストールと読み込みのプロセスについて理解していることを前提とします。そうでない場合は、ガイダンスのためにSTHDAを参照してください。

では、データセットの作成、変更、および可視化に取り組んでみましょう。以下に示すように、必要なライブラリを読み込むことから始めます。

library(tidyverse)library(ggthemes)library(ggpubr)

tidyverseは、データ操作と分析のためのdplyrおよびデータ可視化のためのggplot2を含む、Rのコアコレクションです。 ggthemesは、ggplot2のプロットをスタイル付けするための代替テーマとテーマコンポーネントを提供します。 ggpubrは、カスタマイズ可能な寸法、解像度、ファイル形式でプロットを保存するためのggsave()を提供しています。これらのパッケージを詳しく調査するには、提供されるハイパーリンクをクリックしてください。

データフレームの作成

以下のコードでは、data.frame()関数を使用して、dfという名前の3つの列(AnimalsCategoryCounts)を持つデータフレームを初期化しています。

df <- data.frame(Animals = c("cats", "dogs", "cows",                              "cats", "dogs", "cows",                             "cats", "dogs", "cows",                             "cats", "dogs", "cows"),                Category = c("Domestic", "Domestic", "Domestic",                             "Domestic","Domestic","Domestic",                             "Stray", "Stray", "Stray",                              "Stray", "Stray", "Stray"),                  Counts = c("28", "22", "45",                              "30", "18", "43",                              "40", "65","10",                             "35", "72", "8"))

💡 または、Excelでデータフレームを作成し、ファイルをRにインポートすることもできます。

view()関数を使用して、データフレームdfを表示します。

view(df)

‘Animals’列には、さまざまな種類の動物の名前が含まれています。この列には「cats」、「dogs」、および「cows」の3つの一意の動物があります。各種類の動物を4回ずつサンプリングしたため、合計12行になります。‘Category’列は動物を「Domestic」または「Stray」に分類しています。6つの「Domestic」と6つの「Stray」があります。‘Counts’列は、与えられた‘Category’と‘Animals’の列における各動物の数を表しています。

データ型とデータ操作

Rでは、異なる種類のデータ型に対して異なる操作や関数が適用されるため、変数のデータ型を理解することが重要です。データセットでは、2種類のデータ型(文字列と数値)があります。文字列のデータ型は、名前、ラベル、説明、テキスト情報などのテキストデータを扱うために必要です。数値のデータ型は、整数や実数(実数値)を含む数値を表します。

データフレームdfの変数のデータ型を知るために、glimpse()関数を使用してデータフレームのサマリーを取得しましょう。

glimpse(df)

Rows: 12Columns: 3$ Animals  <chr> "cats", "dogs", "cows", "cats", "dogs", "cows", "cats", "dogs", "cows", "…$ Category <chr> "Domestic", "Domestic", "Domestic", "Domestic", "Domestic", "Domestic", "…$ Counts  <chr> "28", "22", "45", "30", "18", "43", "40", "65", "10", "35", "72", "8"

dfデータフレームは、12行(観測)と3列(変数)で構成されていることがわかります。特に、AnimalsおよびCategory変数は文字列のデータ型として識別され、<chr>として表されています。これらの変数内の値はダブルクォーテーションで囲まれており、文字列として表示されます。しかし、興味深い観察結果として、Counts変数も文字列のデータ型として識別されています。実際には数値であり、文字列ではありません。このデータ型の誤分類は、数値演算を行う際に問題を引き起こす可能性があります。この問題を解決し、数値演算を容易にするために、Counts変数を数値データ型に変換する必要があります。

おそらく気づいたかもしれませんが、最初にデータフレームdfを作成した際には意図的に数値の値をダブルクォーテーションで囲んで、Counts変数を文字列のデータ型として表しました。データフレームの構造を明確に理解したので、この問題を解決していきましょう。これを行うために、dfデータフレーム内のCounts変数を現在の文字列データ型から数値データ型に変換します。

df$Counts <- as.numeric(df$Counts)

df$Countsは、dfデータフレームのCounts列を選択します。as.numeric()は、入力を数値データ型に変換します。

glimpse(df)

Rows: 12Columns: 3$ Animals  <chr> "cats", "dogs", "cows", "cats", "dogs", "cows", "cats", "dogs", "cows", "…$ Category <chr> "Domestic", "Domestic", "Domestic", "Domestic", "Domestic", "Domestic", "…$ Counts  <dbl> 28, 22, 45, 30, 18, 43, 40, 65, 10, 35, 72, 8

今やCounts変数は数値データ型として識別され、<dbl>と表示されます。この変数内の値は、数値であり、文字列ではないことを示しています。

<dbl>は「倍精度浮動小数点数」を表します。これは、実数を保存し、実数に対して算術演算を実行するために使用される数値データ型であり、小数点を含む数値を表します。

平均と標準誤差の推定

以下のコードは、既存のデータフレームdfに対してデータの要約と集計を行い、mean_dfという新しいデータフレームを作成します。

<pre><code>mean_df <- df %>%   group_by(Animals, Category) %>%   summarise(mean= mean(Counts),            se = sd(Counts)/sqrt(n()))</code></pre>
<p>コードをステップごとに分解してみましょう:</p>
<ol type="1">
<li>パイプ(%>%)演算子は、既存のデータフレーム dfを受け取り、コードの次の部分に渡します。これにより、dfを後続の操作の入力として設定します。Rでは、%>%演算子は左側の関数の結果を取得し、右側の次の関数の最初の引数として渡すことができ、一連の操作を明確かつ順序立ててチェーンすることができます。</li>
<li>group_by()関数は、AnimalsCategoryの列でデータフレームをグループ化し、これら2つの変数の一意の組み合わせに基づいてデータフレーム内にサブグループを作成します。</li>
<li>summarise()関数は、平均と標準誤差を推定し、それぞれ新しい変数meanseに割り当てます。</li>
</ol>
<ul>
<li>mean()関数は、group_by()操作によって作成される各サブグループにおけるCounts列の平均を計算します。</li>
<li>sd()関数は、group_by()によって作成された各サブグループのCounts列の標準誤差(se)を計算します。標準誤差は、Counts列の標準偏差(sd())をサンプルサイズの平方根で割ることによって計算されます(sqrt(n()))。</li>
</ul>
<p>データフレームmean_dfの概要を見てみましょう。</p>
<pre><code>glimpse(mean_df)

Rows: 6
Columns: 4
$ Animals  <chr> "cats", "cats", "cows", "cows", "dogs", "dogs"
$ Category <chr> "Domestic", "Stray", "Domestic", "Stray", "Domestic", "Stray"
$ mean     <dbl> 29.0, 37.5, 44.0, 9.0, 20.0, 68.5
$ se       <dbl> 1.0, 2.5, 1.0, 1.0, 2.0, 3.5</code></pre>
<p>すべて設定されました!今や4つの列または変数があり、meanseの2つの新しい変数が、グループ化基準に基づいてCounts列に対して計算されました。この新しいデータフレーム「mean_df」を使用してデータの視覚化に進みましょう。</p>
<h2 id="visualizing-the-data">データの視覚化</h2>
<p>以下のコードは、データフレームmean_dfggplot2に渡し、グループ化された棒グラフを作成するために%>%演算子を使用しています。</p>
<pre><code>barplot <- mean_df %>%   ggplot(    aes(x = Animals, y = mean, fill = Category))+    geom_col( position = "dodge", width = 0.5, alpha = 0.5, color = "black", size = 0.1)</code></pre>
<p>💡注意点として、パイプ(%>%)演算子はデータの操作と分析に使用されることがありますが、ggplot2関数内で追加のレイヤーを追加するためのデータの視覚化プロセスでは使用できません。代わりに、上記のように「+」記号を使用します。</p>
<p>コードをステップごとに分解してみましょう:</p>
<ol type="1">
<li>aes()関数は、データセット内の変数をプロット内の視覚的な要素にどのようにマッピングするかを指定するためのものです。この場合、x軸はAnimals変数、y軸はmean変数、バーの色はCategory変数に基づいて指定されます。</li>
<li>geom_col()は、mean列の値に基づいて各バーの高さを計算します。geom_col()関数で使用されるパラメータの解説は以下のとおりです:</li>
</ol>
  • position = "dodge": これにより、棒グラフをカテゴリに基づいて並べる(押し込む)ように指定されます。これにより、グループ化された棒グラフが作成されます。
  • width = 0.5: 棒の幅を決定します。この場合、棒の幅は0.5です。
  • alpha = 0.5: 棒の透明度を制御します。alpha値が0.5の場合、棒はある程度透明になります。
  • color = "black": 棒の境界色を黒に設定します。
  • size = 0.1: 棒の周りの境界のサイズを指定します。この場合、境界線は比較的薄くなります。

これらのパラメータの組み合わせにより、バープロットでの棒の外観がカスタマイズされ、薄く、多少透明で黒い境界が付いた、異なるカテゴリのために並べられたものとなります。これにより、データの視覚的表現が向上します。

プロットを見てみましょう:

plot(bar_chart)

素晴らしいです!バープロットが正常に作成されましたが、現在の棒には標準偏差がありません。プロットに標準偏差を組み込みましょう。

棒に標準偏差を追加し、バーの色をカスタマイズする

最初に、上記のコードをコピーして貼り付け、以下に示すようにgeom_errorbar()関数を追加してください。

barplot <- mean_df %>%   ggplot(aes(x = Animals, y = mean, fill = Category))+  geom_col( position = "dodge", width = 0.5, alpha = 0.7, color = "black", size = 0.1)+  geom_errorbar(aes(ymin = mean-se, ymax = mean+se),                position =  position_dodge(width = 0.5), width = 0.2) 

geom_errorbar()関数で使用されるコンポーネントを解説しましょう:

  1. yminおよびymaxは、計算された平均値と標準誤差に基づいてエラーバーの下限値と上限値を定義します。
  2. position引数は、エラーバーを側面に並べるためにposition_dodge()に設定され、width = 0.5でドッジ幅を設定します。幅のパラメータを調整すると、バーの位置が変わることに注意してください。
  3. width = 0.2はエラーバーの幅を設定します。この場合、エラーバーの幅は0.2になります。

プロットを見てみましょう:

plot(barplot)

素晴らしいです!エラーバーを含むグループ化された棒グラフが作成されました。このグラフはほぼ出版に適した状態ですが、いくつかの細かな調整により、外観の向上が大いに期待できます。たとえば、バーとx軸のラベルの間に隙間があることに気付いたかもしれません。それを削除しましょう。また、バーの色を変更し、図の凡例をグラフ内に配置し、清潔でシンプルな視覚的表示を提供するための事前定義されたテーマを使用することで、全体的なプレゼンテーションを向上させることができます。

出版用のクオリティの高いグラフの作成

上記のコードをコピーして貼り付け、以下に示すように追加のレイヤーを追加します。

barplot <- mean_df %>%   ggplot(aes(x = Animals, y = mean, fill = Category))+  geom_col( position = "dodge", width = 0.5, alpha = 0.7, color = "black", size = 0.1)+  geom_errorbar(aes(ymin = mean-se, ymax = mean+se),                position =  position_dodge(width = 0.5), width = 0.2)+  scale_y_continuous(expand = expansion(0),                     limits = c(0,100))+  scale_fill_manual(values = c("blue", "gray"),                    name = NULL)+ # NULL removes the legend title "Category".  theme_par()+  theme(legend.position = c(0.2, 0.80))

ステップバイステップでコードを解説しましょう。

  1. scale_y_continuous()expand引数は、パディングを除去するために「expansion(0)」に設定され、limits引数は0から100のy軸の範囲を設定するために「c(0, 100)」に設定されています。
  2. scale_fill_manual()は、塗りつぶしのエステティック(バーの色)の凡例をカスタマイズし、凡例のタイトルを「NULL」に設定して「Category」というタイトルを削除するために使用されます。
  3. theme_par()は、プロットのテーマをカスタマイズするために使用され、クリーンな白い背景とコンパクトなグラフィックスを提供します。それぞれの利点と欠点があります。
  4. theme()legend.position引数は、凡例の位置をプロット内で指定するためにc(0.2, 0.80)に設定されました。この引数を調整して、より良く理解するために試してみてください。

💡 theme_par()のような事前定義されたテーマは、その後に適用されるテーマコンポーネントを上書きします。この問題に対処するために、theme_par()関数の後に theme(legend.position)を追加しました。

プロットを見てみましょう:

plot(barplot)

ここに、視覚的に魅力的で出版に適したエラーバー付きの棒グラフがあります。このグラフは、動物の個体数の変動を効果的に示しています。 「野良」のカテゴリでは、犬が猫や牛よりも多く、また、「家畜」のカテゴリでは、牛が明らかに猫や犬よりも多いことがわかります。

パブリケーション用のプロットの保存

以下のコードは、ggpubrライブラリからggsave()関数を利用しています。プロットを保存するためには、ggplotオブジェクトbar_chartを指定し、グラフィック形式のファイル名を指定する必要があります。この例では、「barchart_animals.tiff」というファイル名を使用し、TIFF画像としてチャートを保存します。また、解像度のために「width」と「height」のインチ単位の寸法および「dpi」(1インチ当たりのドット数)も設定しました。

ggsave(bar_chart, filename = "barchart_animals.tiff", width = 5, height = 4, dpi = 300)

これで、標準誤差棒を含む出版に適した棒グラフを作成する準備が整いました。創造プロセスを楽しんで、データをプロットしましょう! 🎉✨

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more