これから研究を始める高校生と指導教員のために 第2版
探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方
(これ研)
副読文書
V-2. データの値がそもそもばらつく対象の解析
2種類のデータの関係性の示し方
(「これ研」本文の第3部3.3.1, 3.3.2項;p. 93)
「これから研究を始める高校生と指導教員のために 第2版;探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方」(これ研)の第3部3.3.1項「2種類のデータの関係性の示し方」(p. 93)で行っている解析と作図を、Rを使って行う方法の解説です。メダカの体長と体重と産卵数を例に、データ間の関係性の示し方を説明します。「これ研」の第3部第3章「データの値がそもそもばらつく対象の解析」(p. 83)を読んで、こうした対象の解析について理解しておいて下さい。
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ファイル「Medaka.csv」(画面1)に、メダカの地域(Locality)・体長(Length.mm)・産卵数(Egg.number)・体重(Weight.mg)が入っています(架空データです)。このcsvファイルのデータを使って解析と作図を行います。
画面1
このcsvファイルをダウンロードして、あなたの作業ディレクトリに入れて下さい(作業ディレクトリの指定を参照)。
ご自身のデータを用いる場合は、そのデータが入ったcsvファイルを作業ディレクトリに入れて下さい。Excelで作ったファイルをcsvファイルに変換する方法は、Excelで作った解析用ファイルのcsv形式での保存を参照して下さい。
csvファイルをRに読み込み、データフレームに格納します。
d <- read.csv("Medaka.csv")
# csvファイル「Medaka.csv」を読み込んでデータフレームdに格納します。ファイル名を""で囲みます。ファイル名の拡張子「.csv」も忘れずに書きます。
# データフレームの名称(この例ではd)はお好みのものでよいです。
地域の並び順を指定したい場合は以下の命令を実行します。これを実行しないとアルファベット順に並びます。
d$Locality <- factor(d$Locality, levels=c("Tohoku", "Kanto", "Kansai", "Kyushu"))
# 地域の並び順を指定します。データフレームd中のデータ列Localityに地域名が入っています。並べたい順番に地域名を書きます。地域名は文字情報なので、地域名を""で囲みます。
# d$Localityの中身を上書きするためにd$Localityに再格納します。
# この命令を実行しないとアルファベット順に地域が並びます。
2. 作図;メダカにおける、体長と産卵数の関係
(「これ研」本文の図3.11;p. 94)
tidyverseを使っての作図の仕方を説明します。tidyverseをRに読み込んでいますか? 読み込んでいない場合は、library(tidyverse)を実行して読み込んで下さい。
作図の命令文の基本です。
ggplot(データフレーム名, aes(データ)) +
geom_描く図の英語名() +
書式の命令文 +
書式の命令文
# ggplotで、用いるデータを指定します。
# geom_で、描く図を指定します。
# 書式の命令文を+で繋げます。いくつでも繋げることができます。最後の命令文の後に+は不要です。
以下では、図の軸の説明が英語の図を描きます。しかし、日本語の論文・プレゼンテーションに使う図の説明文は日本語にしましょう。日本語にする場合の説明も添えているので参照して下さい。
メダカにおける、体長と産卵数の関係(画面2-1, 2-2, 3-1, 3-2, 4-1, 4-2)を作図しましょう。csvファイル「Medaka.csv」をデータフレームdに格納済みであるとします。格納していない場合は、解析に用いるcsvファイルのRヘの読み込みの説明に従って格納して下さい。地域の並び順を指定したい場合はその指定も行って下さい。ご自身のデータを用いる場合は、そのファイルをデータフレームdに格納して下さい。
画面2-1
画面2-2
画面3-1
画面3-2
画面4-1
画面4-2
2.1. 全地域の散布図を並べて描く
全地域の散布図を並べて描く(画面2-1, 2-2)方法を説明します。
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d, aes(x = Length.mm, y = Egg.number)) +
# データフレームdを指定します。
# x = Length.mmとして、体長(Length.mm)が入っているデータ列Length.mmをx軸(横軸)に指定します。xは小文字です。
# y = Egg.numberとして、産卵数(Egg.number)が入っているデータ列Egg.numberをy軸(縦軸)に指定します。yは小文字です。
# 末尾の+を忘れないで下さい。
# 散布図における、作図に用いるデータフレームとデータの指定
geom_point(size = 1.5) +
# 描く図として散布図を指定します。
# size = で点の大きさを指定します。1.5にしています。
# 末尾の+を忘れないで下さい。
facet_wrap(~ Locality, ncol = 1) +
# 複数の図を並べて描く場合はfacet_wrap()と命令します。
# データ列Localityに入っている地域(Tohokuなど)ごとに散布図を描きます。Localityの前の~を忘れずに書いて下さい。
# 図の並べ方をncol(またはnrow)で指定します。ncol=1にすると縦1列に並びます。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「facet_wrap(~ Locality, ncol = 1)」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
geom_smooth(method = lm, se = FALSE) +
# 回帰式を描きます。描きたくない場合や、x軸(横軸)とy軸(縦軸)のデータ間に関係性が無さそうな場合はこの命令文を省略します。
# se = FALSEは、信頼区間というものを描かせないという指定です。高校のレベルを超えているので描かせません。信頼区間の意味を理解しているのなら描かせてもよいです。その場合は、se = FALSEを取り除き、「geom_smooth(method = lm)」とします。
# 回帰式の描き込み
labs(x = "Body length (mm)", y = "Egg number") +
# x軸(横軸)の名称をBody length (mm)に、y軸(縦軸)の名称をEgg numberにします。名称を""で囲みます。x, yは小文字です。
scale_x_continuous(limits = c(10, 50)) +
# x軸(横軸)を描く範囲を10から50に指定します。
scale_y_continuous(limits = c(0, 40)) +
# y軸(縦軸)を描く範囲を0から40に指定します。
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に指定します。
画面2-2のように軸の説明を日本語にする場合は、以下の2つの命令文を書き替えます。他の命令文はそのままでよいです。
labs(x = "体長(mm)", y = "産卵数") +
# x軸(横軸)の名称を体長(mm)に、y軸(縦軸)の名称を産卵数にします。名称を""で囲みます。x, yは小文字です。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。
# Tohokuといった文字を日本語にしたい場合は、この図をPowerPoint等に読み込んで修正するのが手っ取り早いです。英語を白く塗りつぶしたり切り取ったりして、日本語を書き込みましょう。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。
2.2. 全地域の散布図を一枚の図に描く
全地域の散布図を一枚の図に描く(画面3-1, 3-2)方法を説明します。
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d, aes(x = Length.mm, y = Egg.number, color = Locality)) +# データフレームdを指定します。
# x = Length.mmとして、体長(Length.mm)が入っているデータ列Length.mmをx軸(横軸)に指定します。xは小文字です。
# y = Egg.numberとして、産卵数(Egg.number)が入っているデータ列Egg.numberをy軸(縦軸)に指定します。yは小文字です。
# color = Localityとして、Localityに入っている地域名(Tohokuなど)ごとに色分けをします。
# shape = Localityとして、点(記号)の形を地域ごとに変えることもできます。すぐ下のリンクを参照して下さい。
# 末尾の+を忘れないで下さい。
# 散布図における、作図に用いるデータフレームとデータの指定
geom_point() +
# 描く図として散布図を指定します。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「geom_point()」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
geom_smooth(method = lm, se = FALSE) +
# 回帰式を描きます。描きたくない場合や、x軸(横軸)とy軸(縦軸)のデータ間に関係性が無さそうな場合はこの命令文を省略します。
# se = FALSEは、信頼区間というものを描かせないという指定です。高校のレベルを超えているので描かせません。信頼区間の意味を理解しているのなら描かせてもよいです。その場合は、se = FALSEを取り除き、「geom_smooth(method = lm)」とします。
# 末尾の+を忘れないで下さい。
# 回帰式の描き込み
labs(x = "Body length (mm)", y = "Egg number") +
# x軸(横軸)の名称をBody length (mm)に、y軸(縦軸)の名称をEgg numberにします。名称を""で囲みます。x, yは小文字です。
scale_x_continuous(limits = c(10, 50)) +
# x軸(横軸)を描く範囲を10から50に指定します。
scale_y_continuous(limits = c(0, 40)) +
# y軸(縦軸)を描く範囲を0から40に指定します。
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 = "体長(mm)", y = "産卵数") +
# x軸(横軸)の名称を体長(mm)に、y軸(縦軸)の名称を産卵数にします。名称を""で囲みます。x, yは小文字です。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。
# Locality, Tohokuといった文字を日本語にしたい場合は、この図をPowerPoint等に読み込んで修正するのが手っ取り早いです。英語を白く塗りつぶしたり切り取ったりして、日本語を書き込みましょう。PowerPoint等への図の読み込み方は、図の保存・コピーの仕方を参照して下さい。
2.3. 特定の地域の散布図を描く
特定の地域の散布図を描く(画面4-1, 4-2)方法を説明します。
まず始めに、作図に用いる値を格納します。
# Tohokuのデータを取り出す場合です。
# データフレームdから、データ列Localityに入っている地域名がTohokuのものを取り出しデータフレームd2に格納します。=を2つ繋げ==とすることに注意して下さい。地域名は文字情報なので、地域名を""で囲みます。
# 格納するデータフレームの名称(この例ではd2)はお好みのものでよいです。
# 複数の地域のデータを取り出すこともできます(すぐ下のリンクを参照)。
格納したデータを用いて散布図を作図します。
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d2, aes(x = Length.mm, y = Egg.number)) +# データフレームd2を指定します。
# x = Length.mmとして、体長(Length.mm)が入っているデータ列Length.mmをx軸(横軸)に指定します。xは小文字です。
# y = Egg.numberとして、産卵数(Egg.number)が入っているデータ列Egg.numberをy軸(縦軸)に指定します。yは小文字です。
# 末尾の+を忘れないで下さい。
# 散布図における、作図に用いるデータフレームとデータの指定
geom_point() +
# 描く図として散布図を指定します。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「geom_point()」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
geom_smooth(method = lm, se = FALSE) +
# 回帰式を描きます。描きたくない場合や、x軸(横軸)とy軸(縦軸)のデータ間に関係性が無さそうな場合はこの命令文を省略します。
# se = FALSEは、信頼区間というものを描かせないという指定です。高校のレベルを超えているので描かせません。信頼区間の意味を理解しているのなら描かせてもよいです。その場合は、se = FALSEを取り除き、「geom_smooth(method = lm)」とします。
# 末尾の+を忘れないで下さい。
# 回帰式の描き込み
labs(x = "Body length (mm)", y = "Egg number") +# x軸(横軸)の名称をBody length (mm)に、y軸(縦軸)の名称をEgg numberにします。名称を""で囲みます。x, yは小文字です。
scale_x_continuous(limits = c(10, 50)) +
# x軸(横軸)を描く範囲を10から50に指定します。
scale_y_continuous(limits = c(0, 40)) +
# y軸(縦軸)を描く範囲を0から40に指定します。
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に指定します。
# 複数の地域を取り出した場合は、全地域の散布図を並べて描くや全地域の散布図を一枚の図に描くと同じ方法で作図します。
画面4-2のように軸の説明を日本語にする場合は、以下の2つの命令文を書き替えます。他の命令文はそのままでよいです。
labs(x = "体長(mm)", y = "産卵数") +
# x軸(横軸)の名称を体長(mm)に、y軸(縦軸)の名称を産卵数にします。名称を""で囲みます。x, yは小文字です。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。
3. 相関係数の計算;メダカにおける、体長と体重の関係
(「これ研」本文の第3部3.3.2項;p. 95)
csvファイル「Medaka.csv」に入っている、メダカの体長(Length.mm)と体重(Weight.mg)の相関係数を計算しましょう。csvファイル「Medaka.csv」をデータフレームdに格納済みであるとします。格納していない場合は、解析に用いるcsvファイルのRヘの読み込みの説明に従って格納して下さい。地域の並び順を指定したい場合はその指定も行って下さい。ご自身のデータを用いる場合は、そのファイルをデータフレームdに格納して下さい。
# 地域を区別せずに、全地域のデータをまとめて相関係数を計算する場合の計算方法です。
cor(d$Length.mm, d$Weight.mg)# データフレームdに入っている、データ列Length.mmとデータ列Weight.mgの相関係数を計算します。
# 相関係数が0.9266001で、非常に強い正の相関関係があります。
# 相関係数の計算
# 地域を区別して、各地域における相関係数を計算する場合の計算方法です。東北を対象とする例です。他の地域も同じ方法で計算します。
d2 <- filter(d, Locality == "Tohoku")# データフレームdから、データ列Localityに入っている地域名がTohokuのものを取り出しデータフレームd2に格納します。=を2つ繋げ==とすることに注意して下さい。地域名は文字情報なので、地域名を""で囲みます。
# 格納するデータフレームの名称(この例ではd2)はお好みのものでよいです。
cor(d2$Length.mm, d2$Weight.mg)# データフレームd2に入っている、データ列Length.mmとデータ列Weight.mgの相関係数を計算します。
# 相関係数が0.9403134で、非常に強い正の相関関係があります。
# 相関係数の計算