これから研究を始める高校生と指導教員のために 第2版
探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方
(これ研)
副読文書
******* V-5. データの値がそもそもばらつく対象の解析 *******
折れ線グラフを用いた解析;標準偏差を描き込む場合
--- メダカにおける、生育温度条件と成長速度の関係 ---
本章では、折れ線グラフを用いた解析の仕方を説明します(「これ研」には載っていません)。メダカの成長実験を例に解析します。生育温度条件15度・20度・25度で育て、それぞれでの成長速度を調べた実験です。各温度条件について20個体のメダカの成長を調べます。
この研究では、メダカ間で成長のばらつきがあります。そのため、標準偏差(実験結果のばらつきを示す指標)を計算し図に描きこみます。
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ヘの読み込み
15度・20度・25度の生育条件それぞれで、孵化から10日・30日・50日におけるメダカ20個体の体長を測定したとします。csvファイル「Growth.csv」(画面1)に、生育温度条件(Temperature.degree)・孵化からの日数(Day)・体長(Length.mm)が入っています(架空データです)。一行に一個体のデータです。
画面1
このファイルを使って、生育温度条件(Temperature.degree)と孵化からの日数(Day)の各組合せにおける、体長の平均(Mean.mm)・体長の標準偏差(SD.mm)を計算します(計算方法は下記を参照)。それらを、csvファイル「Growth2.csv」(画面2)のようにまとめます。このファイルは、Rでの計算結果をExcelにコピーして手作業で作ります。作図にはこのファイルを使います。
画面2
これら二つのcsvファイルをダウンロードして、あなたの作業ディレクトリに入れて下さい(作業ディレクトリの指定を参照)。
ご自身のデータを用いる場合は、そのデータが入ったcsvファイルを作業ディレクトリに入れて下さい。先頭行は必ずデータ名にして、続く行に個々のデータを書いて下さい。すべて、半角英数字で書いて下さい(日本語を入れない)。Excelで作ったファイルをcsvファイルに変換する方法は、Excelで作った解析用ファイルのcsv形式での保存を参照して下さい。
csvファイルをRに読み込み、データフレームに格納します。
d <- read.csv("Growth.csv")
d2 <- read.csv("Growth2.csv")
# csvファイル「Growth.csv」「Growth2.csv」を読み込んでデータフレームd, d2に格納します。ファイル名を""で囲みます。ファイル名の拡張子「.csv」も忘れずに書きます。
# データフレームの名称(この例ではd, d2)はお好みのものでよいです。
データフレームd2を用いた作図では、生育温度条件を範疇として扱います。15度・20度・25度という温度を範疇とみなしメダカの体長を比較するためです。しかし、csvファイル「Growth2.csv」には、15, 20, 25という数値で入っています。そのためRは、生育温度条件を数値として認識しています。以下の命令を実行し範疇として認識させます。
d2$Temperature.degree <- as.factor(d2$Temperature.degree)
# データフレームd2中のデータ列d2$Temperature.degreeに生育温度が入っています。
# as.factorと命令して範疇と認識させ、d2$Temperature.degreeの中身を上書きするためにd2$Temperatureに再格納します。
# データフレームdは、計算に用いるだけで作図には用いません。そのため、生育温度のデータを範疇として認識させる必要はありません。
扱うデータが、「15°」「20°」「25°」 (°が付いている)や「Tohoku」「Kanto」といった文字である場合はこの命令は不要です。何もしなくても範疇としてRは認識します。
d2$Temperature.degree <- factor(d2$Temperature.degree, levels=c("25", "20", "15"))
# データフレームd2における生育温度条件(15度・20度・25度)の並び順を指定します。データフレームd2中のデータ列Temperature.degreeに生育温度条件が入っています。並べたい順番に生育温度条件を書きます。範疇(文字情報)なので""で囲みます(上記で範疇として認識させた)。
# d2$Temperature.degreeの中身を上書きするためにd2$Temperature.degreeに再格納します。
# この命令文を実行しないと、数値データは小さい順に、文字データはアルファベット順に並びます。
# 25度・20度・15度の順番にしたのは、図中での色の並び順と、図の右の色の説明での並び順を一致させるためです(画面3を参照)。
# データフレームdは、計算に用いるだけで作図には用いません。そのため、データの並び順を指定する必要はありません。
2. 生育温度条件と孵化からの日数の各組合せにおける、体長の平均と標準偏差の計算
生育温度条件と孵化からの日数の各組合せにおける、メダカ体長の平均と標準偏差を計算します。
# 生育温度条件と孵化からの日数の各組合せにおける、体長の平均を計算
tapply(d$Length.mm, list(d$Temperature.degree, d$Day), mean)
# データ列d$Temperature.degree, d$Dayに入っている生育温度条件・孵化からの日数の組合せごとに、データ列d$Length.mmに入っている体長の平均を計算します。listで、複数の組合せを指定することができます。この場合は、d$Temperature.degree(15度・20度・25度)とd$Day(10日・30日・50日)の3×3=9組の計算をします。
# meanが、平均を計算する関数です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# listの中で先に書いた方(d$Temperature.degree)が縦(行)方向に、後に書いた方(d$Day)が横(列)方向に並びます。
# 生育温度条件と孵化からの日数の各組合せにおける、体長の標準偏差を計算
tapply(d$Length, list(d$Temperature.degree, d$Day), sd)# データ列d$Temperature.degree, d$Dayに入っている生育温度条件・孵化からの日数の組合せごとに、データ列d$Length.mmに入っている体長の標準偏差を計算します。
# sdが、標準偏差を計算する関数です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# listの中で先に書いた方(d$Temperature.degree)が縦(行)方向に、後に書いた方(d$Day)が横(列)方向に並びます。
こうして計算した平均と標準偏差をExcelにコピーします。そして手作業で、 画面2のようなファイルを作ります。
3. 作図;メダカにおける、生育温度と成長速度の関係
tidyverseを使っての作図の仕方を説明します。tidyverseをRに読み込んでいますか? 読み込んでいない場合は、library(tidyverse)を実行して読み込んで下さい。
作図の命令文の基本です。
ggplot(データフレーム名, aes(データ)) +
geom_描く図の英語名() +
書式の命令文 +
書式の命令文
# ggplotで、用いるデータを指定します。
# geom_で、描く図を指定します。
# 書式の命令文を+で繋げます。いくつでも繋げることができます。最後の命令文の後に+は不要です。
以下では、図の軸の説明が英語の図を描きます。しかし、日本語の論文・プレゼンテーションに使う図の説明文は日本語にしましょう。日本語にする場合の説明も添えているので参照して下さい。
メダカにおける、生育温度と体長の関係(画面3)を作図しましょう。
画面3-1
画面3-2
# position = position_dodge(width = 2)という指定の説明をしておきます。これは、データを描く場所を少しずらして(width = 2の場合は幅2ずらして)描くという指定です。この指定をしないと画面3-3のようになり、線が重なって見づらいです。見づらくない場合はこの指定は不要です。
画面3-3
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d2, aes(x = Day, y = Mean.mm, color = Temperature.degree)) +
# データフレームd2を指定します。
# x = Dayとして、孵化からの日数(Day)が入っているデータ列Dayをx軸(横軸)に指定します。xは小文字です。
# y = Mean.mmとして、平均体長(Mean.mm)が入っているデータ列Meanをy軸(縦軸)に指定します。yは小文字です。
# color = Temperature.degreeとして、Temperature.degreeに入っている温度条件(15度・20度・25度)ごとに色分けします。
# 末尾の+を忘れないで下さい。
# 折れ線グラフにおける、作図に用いるデータフレームとデータの指定
geom_line(linewidth = 1, position = position_dodge(width = 2)) +
# 描く図として折れ線グラフを指定します。
# linewidth = で太さを指定します。1にしています。
# position = position_dodge(width = 2)として、描く場所を幅2だけずらします。
# 末尾の+を忘れないで下さい。
geom_errorbar(aes(ymin = Mean.mm - SD.mm, ymax = Mean.mm + SD.mm), width = 3, position = position_dodge(width = 2))+
# 標準偏差を描きます。
# ymin =, ymax =で、標準偏差の縦棒の下端と上端の値を指定します。平均 – 標準偏差(Mean.mm - SD.mm)から平均+標準偏差(Mean.mm + SD.mm)まで縦棒を描きます。
# width =で上下の横棒の幅を指定します。3にしています。
# position = position_dodge(width = 2)として、描く場所を幅2だけずらします。ずらす幅は上記と同じにして下さい。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「geom_errorbar(aes(ymin = Mean.mm - SD.mm, ymax = Mean.mm + SD.mm), width = 3, position = position_dodge(width = 2))」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
geom_point(size = 4, position = position_dodge(width = 2)) +
# 点グラフを描き加えます。これにより、図中の点(○)が描かれます。この命令文を省略すると折れ線のみの図になります。
# size = で点の大きさを指定します。4にしています。
# position = position_dodge(width = 2)として、描く場所を幅2だけずらします。ずらす幅は上記と同じにして下さい。
labs(x = "Days from hatching", y = "Mean ± SD of body length (mm)") +
# x軸(横軸)の名称をDays from hatchingに、y軸(縦軸)の名称をMean ± SD of body length (mm)にします。SDは標準偏差です。名称を""で囲みます。x, yは小文字です。
scale_x_continuous(breaks=seq(10, 50, 20)) +
# x軸(横軸)の目盛りを10から50まで20刻みに指定します。
scale_y_continuous(limits = c(0, 35)) +
# y軸(縦軸)を描く範囲を0から35に指定します。
theme_classic() +
# 図の背景色を白にします。
theme(
axis.title.x = element_text(size = 18),
axis.text.x = element_text(size = 9),
axis.title.y = element_text(size = 18),
axis.text.y = element_text(size = 9)
)
# x軸(横軸)・y軸(縦軸)の名称(axis.title.x, axis.title.y)の文字の大きさを18に、x軸・y軸の目盛り(axis.text.x, axis.text.y)の文字の大きさを9に指定します。
画面3-2のように軸の説明を日本語にする場合は、以下の2つの命令文を書き替えます。他の命令文はそのままでよいです。
labs(x = "孵化からの日数", y = "体長の平均 ± 標準偏差 (mm)") +
# x軸(横軸)の名称を「孵化からの日数」に、y軸(縦軸)の名称を「体長の平均 ± 標準偏差 (mm)」にします。名称を""で囲みます。x, yは小文字です。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。
# 図右横のTemperature.degreeの文字を日本語にしたい場合は、この図をPowerPoint等に読み込んで修正するのが手っ取り早いです。英語を白く塗りつぶしたり切り取ったりして、日本語を書き込みましょう。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。