これから研究を始める高校生と指導教員のために 第2版
探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方
(これ研)
副読文書
IV-2. 唯一の真の値がある対象の解析
複数の対象間での真の値の違いの示し方;棒グラフの場合
(「これ研」本文の第3部2.3.1項;p. 79)
「これから研究を始める高校生と指導教員のために 第2版;探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方」(これ研)の第3部第2章「唯一の真の値がある対象の解析」(p. 71)で行っている解析と作図を、Rを使って行う方法の解説です。複数の飲料間でのカフェイン量の比較を例に、対象間での、真の値の推定値の違いの示し方を説明します。結果を棒グラフで示す場合です。「これ研」の第3部第2章(p. 71)を読んで、唯一の真の値がある対象の解析について理解しておいて下さい。
RStudioを起動して下さい。起動方法の詳しい説明は、RStusioの起動の仕方を参照して下さい。そして、作業ディレクトリの指定の説明に従って作業ディレクトリを指定します。
setwd("/Users/sakai/Documents/書籍等原稿/これ研2版/課題研究解析")
# パソコン内での作業ディレクトリの位置がわかっている場合はこの方法が便利です。作業ディレクトリの位置の知り方は作業ディレクトリの表示を参照して下さい。
# あなたの作業ディレクトリの位置を""で囲んで書きます。
# この命令文を実行しておきます。
作図にはtidyverseというものを用います。tidyverseをインストールしてありますか? まだならば、作図の準備の説明に従ってインストールして下さい。インストールしたら、tidyverseをRに読み込みます。
library(tidyverse)
# RStudioを起動しこの命令文を実行しておきます。Rstudio起動後、一度だけ実行すればよいです。Rstudioを終了して再び起動したときは再実行する必要があります。
解析では、データフレームの中の特定のデータ列を指定することを行います。指定の方法です。
データフレーム名$データ列名
# データフレーム名を書き、$を挟んで、指定したいデータ列名を書きます。
# 実行例
d$Angle.degree
d$Flying.distance.m
# データフレームdに入っているデータ列Angle.degree, flying.distance.mを指定します。
1. 解析に用いるcsvファイルのRへの読み込み
各飲料についてカフェイン量を複数回測定したとします。csvファイル「Caffeine.csv」(画面1)に、飲料の種類(Drink)および各測定におけるカフェイン量(Caffeine.mg.100g)が入っています(架空データです)。このファイルをダウンロードして下さい。
画面1
そして、ダウンロードしたファイルをあなたの作業ディレクトリに入れて下さい(作業ディレクトリの指定を参照)。
ご自身のデータを用いる場合は、そのデータが入ったcsvファイルを作業ディレクトリに入れて下さい。Excelで作ったファイルをcsvファイルに変換する方法は、Excelで作った解析用ファイルのcsv形式での保存を参照して下さい。
csvファイルをRに読み込み、データフレームに格納します。
d <- read.csv("Caffeine.csv")
# csvファイル「Caffeine.csv」を読み込んでデータフレームdに格納します。ファイル名を""で囲みます。ファイル名の拡張子「.csv」も忘れずに書きます。
# データフレームの名称(この例ではd)はお好みのものでよいです。
図中での飲料の並び順を指定したい場合は以下の命令を実行します。これを実行しないとアルファベット順に並びます。
d$Drink <- factor(d$Drink, levels=c("coffee", "green.tea", "black.tea"))
# 飲料の並び順を指定します。データフレームd中のデータ列Drinkに飲料名が入っています。並べたい順番に飲料名を書きます。飲料名は文字情報なので、飲料名を""で囲みます。
# d$Drinkの中身を上書きするためにd$Drinkに再格納します。
# この命令を実行しないとアルファベット順に飲料が並びます。
2. カフェイン量の平均と標準誤差の作図
(「これ研」本文の図3.4; p. 80)
tidyverseを使っての作図の仕方を説明します。tidyverseをRに読み込んでいますか? 読み込んでいない場合は、library(tidyverse)を実行して読み込んで下さい。
作図の命令文の基本です。
ggplot(データフレーム名, aes(データ)) +
geom_描く図の英語名() +
書式の命令文 +
書式の命令文
# ggplotで、用いるデータを指定します。
# geom_で、描く図を指定します。
# 書式の命令文を+で繋げます。いくつでも繋げることができます。最後の命令文の後に+は不要です。
以下では、図の軸の説明が英語の図を描きます。しかし、日本語の論文・プレゼンテーションに使う図の説明文は日本語にしましょう。日本語にする場合の説明も添えているので参照して下さい。
珈琲・緑茶・紅茶のカフェイン量の平均と標準誤差(画面2-1, 2-2)を作図しましょう。
画面2-1
画面2-2
標準誤差の関数を定義しておきます。この命令文を実行済みの場合は、再度実行する必要はありません。
se <- function(x){sd(x)/sqrt(length(x))}
# 標準誤差の計算式を定義します。sd(x)/sqrt(length(x))が標準誤差の計算式です。sdは、標準偏差を計算する関数、sqrtは、平方根を計算する関数、lengthは、データの数を数える関数です。()内のデータについて計算します。
# 定義した式をseに格納します。seを実行すると標準誤差が計算されるようになります。
# 関数の定義の仕方
ついで、平均と標準誤差を計算してデータフレームに格納します。
# 飲料名および、カフェイン量の平均と標準誤差の格納
x <- c("coffee","green.tea","black.tea")
# 飲料名をデータフレームxに格納します。d$Drinkでの並び順(並び順を指定した場合はその順番、指定しなかった場合はアルファベット順)通りに飲料名を並べて下さい。並びが異なっていたらデータの対応がおかしくなります。飲料名を""で囲みます。
# 格納するデータフレームの名称(この例ではx)はお好みのものでよいです。
y <- tapply(d$Caffeine.mg.100g, d$Drink, mean)
# データ列d$Drinkに入っている飲料ごとに、データ列d$Caffeine.mg.100gに入っているカフェイン量の平均を計算します。
# meanが、平均を計算する関数です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# カフェイン量の平均をデータフレームyに格納します。格納するデータフレームの名称(この例ではy)はお好みのものでよいです。
z <- tapply(d$Caffeine.mg.100g, d$Drink, se)
# データ列d$Drinkに入っている飲料ごとに、データ列d$Caffeine.mg.100gに入っているカフェイン量の標準誤差を計算します。
# seが、標準誤差を計算する関数(自分で定義したもの)です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# カフェイン量の標準誤差をデータフレームzに格納します。格納するデータフレームの名称(この例ではz)はお好みのものでよいです。
d2 <- data.frame(x, y, z)
# x, y, zのデータを統合してデータフレームd2に格納します。格納するデータフレームの名称(この例ではd2)はお好みのものでよいです。
d2$x <- factor(d2$x, levels =c("coffee", "green.tea", "black.tea"))
# 飲料の並び順を指定します。データフレームd2中のデータ列xに飲料名が入っています。並べたい順番に飲料名を書きます。飲料名は文字情報なので、飲料名を""で囲みます。この命令を実行しないとアルファベット順に飲料が並びます。
# データフレームdに対してデータの並び順を指定ずみであったとしても、データフレームd2に対しても改めて指定する必要があります。dとd2は別のデータフレームだからです。
# d2$xの中身を上書きするためにd2$xに再格納します。
# データフレームd2の中身は以下のようになっています。
データフレームd2に格納したデータを用いて画面2-1を作図します。
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d2, aes(x = x, y = y)) +
# データフレームd2を指定します。
# x = xとして、飲料名が入っているデータ列xをx軸(横軸)に指定します。「x =」のxは小文字です。
# y = yとして、カフェイン量が入っているデータ列yをy軸(縦軸)に指定します。「y =」のyは小文字です。
# 末尾の+を忘れないで下さい。
# 棒グラフにおける、作図に用いるデータフレームとデータの指定
geom_bar(stat = "identity", color = "black", fill = "white") +
# 描く図として棒グラフを指定します。
# color = で、棒の枠線の色を指定します。黒に指定しています。
# fill =で、棒の内部の色を指定します。白に指定しています。
# stat = "identity"を忘れずに書いて下さい。
# 末尾の+を忘れないで下さい。
# 棒グラフの指定
geom_errorbar(aes(ymin = y - z, ymax = y + z), width = 0.1) +
# 標準誤差を描きます。
# ymin =, ymax =で、標準誤差の縦棒の下端と上端の値を指定します。平均 – 標準誤差(y - z)から平均+標準誤差(y + z)まで縦棒を描きます。
# width =で上下の横棒の幅を指定します。0.1にしています。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「geom_errorbar(aes(ymin = y - z, ymax = y + z), width = 0.1)」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
labs(x = "", y = "Caffeine concentration (mg/100g)") +
# x軸(横軸)の名称は書かず、y軸(縦軸)の名称をCaffeine concentration (mg/100g)にします。名称を""で囲みます。x, yは小文字です。
scale_x_discrete(labels = c("Coffee", "Green tea", "Black tea")) +
# x軸(横軸)の各データ群名としてCoffee, Green tea, Black teaを書き込みます。d$Drinkでの並び順(あなたが指定した並び順またはアルファベット順)通りに飲料名を並べて下さい。並びが異なっていたらデータの対応がおかしくなります。飲料名を""で囲みます。
scale_y_continuous(limits = c(0, 65)) +
# y軸(縦軸)を描く範囲を0から65に指定します。棒グラフの場合は、y軸の最小値を必ず0にします。
theme_classic() +
# 図の背景色を白にします。
theme(
axis.text.x = element_text(size = 18),
axis.title.y = element_text(size = 18),
axis.text.y = element_text(size = 9)
)
# x軸(横軸)の目盛り(axis.text.x)には飲料名(Coffeeなど)が入っています。飲料名とy軸(縦軸)の名称(axis.title.y)の文字の大きさを18に、y軸の目盛り(axis.text.y)の文字の大きさを9に指定します。x軸(横軸)の名称(axis.title.x)は書かないので、その文字の大きさも指定しません。
画面2-2のように軸の説明を日本語にする場合は、以下の3つの命令文を書き替えます。他の命令文はそのままでよいです。
labs(x = "", y = "カフェイン量(mg/100g)") +
# x軸(横軸)の名称は書かず、y軸(縦軸)の名称をカフェイン量(mg/100g)にします。名称を""で囲みます。x, yは小文字です。
scale_x_discrete(labels = c("珈琲", "緑茶", "紅茶")) +
# x軸(横軸)の各データ群名として珈琲, 緑茶, 紅茶を書き込みます。d$Drinkでの並び順(あなたが指定した並び順またはアルファベット順)通りに飲料名を並べて下さい。並びが異なっていたらデータの対応がおかしくなります。飲料名を""で囲みます。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。