これから研究を始める高校生と指導教員のために 第2版
探究活動と課題研究の進め方・論文の書き方・口頭とポスター発表の仕方
(これ研)
副読文書
IV-1. 唯一の真の値がある対象の解析
条件に依存した、真の値の推定値の変化の解析;点グラフの場合
(「これ研」本文の第3部第2章;p. 71)
「これから研究を始める高校生と指導教員のために 第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への読み込み
ペットボトルロケットの、各発射角度における飛行距離の平均と標準誤差(「これ研」本文の表3.1;p. 81)を計算します。csvファイル「Rocket.csv」(画面1)に、発射角度(Angle.degree)25, 30, 35, 40, 45度におけるロケットの飛行距離(Flying.distance.m)が入っています(架空データです)。各角度で複数回の飛行実験を行っています。このファイルをダウンロードして下さい。
画面1
そして、ダウンロードしたファイルをあなたの作業ディレクトリに入れて下さい(作業ディレクトリの指定を参照)。
ご自身のデータを用いる場合は、そのデータが入ったcsvファイルを作業ディレクトリに入れて下さい。Excelで作ったファイルをcsvファイルに変換する方法は、Excelで作った解析用ファイルのcsv形式での保存を参照して下さい。
csvファイルをRに読み込み、データフレームに格納します。
d <- read.csv("Rocket.csv")
# csvファイル「Rocket.csv」を読み込んでデータフレームdに格納します。ファイル名を""で囲みます。ファイル名の拡張子「.csv」も忘れずに書きます。
# データフレームの名称(この例ではd)はお好みのものでよいです。
図中などでの発射角度の並び順を指定したい場合は以下の命令を実行します。これを実行しないと、数値は小さい順に、文字はアルファベット順に並びます。本例の発射角度のように、小さい順番(25, 30, 35, 40, 45)に並べたい場合はこの命令は不要です(参考のため、命令文を書いておきます)。
d$Angle.degree <- factor(d$Angle.degree, levels=c("25", "30", "35", "40", "45"))
# 発射角度の並び順を指定します。データフレームd中のデータ列Angle.degreeに発射角度が入っています。並べたい順番に発射角度を書きます。数値なので、""で囲っても囲わなくてもよいです(文字の場合は必ず囲みます)。
# d$Angle.degreeの中身を上書きするためにd$Angle.degreeに再格納します。
# この命令文を実行しないと、数値データは小さい順に、文字データはアルファベット順に並びます(小さい順に並べているので、この命令文は実は不要です)。
2. ペットボトルロケットの飛行距離の平均と標準誤差の計算
(「これ研」本文の表3.1; p. 81)
前もって、標準誤差を計算する関数を定義します。Rにはこの関数が備わっていないので、自分で定義する必要があります。
se <- function(x){sd(x)/sqrt(length(x))}
# 標準誤差の計算式を定義します。sd(x)/sqrt(length(x))が標準誤差の計算式です。sdは、標準偏差を計算する関数、sqrtは、平方根を計算する関数、lengthは、データの数を数える関数です。()内のデータについて計算します。
# 定義した式をseに格納します。seを実行すると標準誤差が計算されるようになります。
# 関数の定義の仕方
平均と標準誤差の計算をします。全発射角度についてまとめて計算する方法と、特定の発射角度について計算する方法とがあります。
2.1. 全発射角度についてまとめて計算
# 各発射角度の飛行距離の平均を計算
tapply(d$Flying.distance.m, d$Angle.degree, mean)
# データ列d$Angle.degreeに入っている発射角度ごとに、データ列d$Flying.distance.mに入っている飛行距離の平均を計算します。
# meanが、平均を計算する関数です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# 各発射角度の飛行距離の標準誤差を計算
tapply(d$Flying.distance.m, d$Angle.degree, se)
# データ列d$Angle.degreeに入っている発射角度ごとに、データ列d$Flying.distance.mに入っている飛行距離の標準誤差を計算します。
# seが、標準誤差を計算する関数(自分で定義したもの)です。tapplyの中で用いる場合は、関数名の後に()を付けません。
2.2. 特定の発射角度について計算
ある特定の発射角度について計算をしたいこともあるでしょう。その場合は、その発射角度のデータを取り出して計算します。
# 特定の発射角度のデータを取り出す
d2 <- filter(d, Angle.degree == 25)
# 25度のデータを取り出す場合です。
# データフレームdの中から、データ列Angle.degreeに入っている発射角度が25度のものを取り出しd2に格納します。=を2つ繋げ==とすることに注意して下さい。数値なので、""で囲っても囲わなくてもよいです(文字の場合は必ず囲みます)。
# 平均と標準誤差を計算
mean(d2$Flying.distance.m)
se(d2$Flying.distance.m)
# d2に格納した発射角度について、平均および標準誤差を計算します。mean()で平均を、se()で標準誤差を計算します。()内に計算したいデータを入れます。
3. ペットボトルロケットの飛行距離の平均と標準誤差の作図
(「これ研」本文の図3.3; p. 80)
tidyverseを使っての作図の仕方を説明します。tidyverseをRに読み込んでいますか? 読み込んでいない場合は、library(tidyverse)を実行して読み込んで下さい。
作図の命令文の基本です。
ggplot(データフレーム名, aes(データ)) +
geom_描く図の英語名() +
書式の命令文 +
書式の命令文
# ggplotで、用いるデータを指定します。
# geom_で、描く図を指定します。
# 書式の命令文を+で繋げます。いくつでも繋げることができます。最後の命令文の後に+は不要です。
命令文を+で繋いで作っていきます。
以下では、図の軸の説明が英語の図を描きます。しかし、日本語の論文・プレゼンテーションに使う図の説明文は日本語にしましょう。日本語にする場合の説明も添えているので参照して下さい。
ペットボトルロケットの飛行距離の平均と標準誤差(画面2-1, 2-2)を作図しましょう。
画面2-1
画面2-2
csvファイル「Rocket.csv」をデータフレームdに格納済みであるとします。格納していない場合は、csvファイルのRへの読み込みの説明に従って格納して下さい。ご自身のデータを用いる場合は、そのファイルをデータフレームdに格納して下さい。
3.1. 作図に用いる値の格納
まずは、作図に用いる値(発射角度および、飛行距離の平均と標準誤差)を格納します。標準誤差の計算式を定義しておいて下さい。
# 発射角度および、飛行距離の平均と標準誤差の格納
x <- c("25", "30", "35", "40", "45")
# 発射角度をデータフレームxに格納します。d$Angle.degreeでの並び順(並び順を指定した場合はその順番、指定しなかった場合は小さい順)通りに並べて下さい。並びが異なっていたらデータの対応がおかしくなります。
# 発射角度は数値なので、""で囲っても囲わなくてもよいです。
# 格納するデータフレームの名称(この例ではx)はお好みのものでよいです。
y <- tapply(d$Flying.distance.m, d$Angle.degree, mean)
# データ列d$Angle.degreeに入っている発射角度ごとに、データ列d$Flying.distance.mに入っている飛行距離の平均を計算します。
# meanが、平均を計算する関数です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# 飛行距離の平均をデータフレームyに格納します。格納するデータフレームの名称(この例ではy)はお好みのものでよいです。
z <- tapply(d$Flying.distance.m, d$Angle.degree, se)
# データ列d$Angle.degreeに入っている発射角度ごとに、データ列d$Flying.distance.mに入っている飛行距離の標準誤差を計算します。
# seが、標準誤差を計算する関数(自分で定義したもの)です。tapplyの中で用いる場合は、関数名の後に()を付けません。
# 飛行距離の標準誤差をデータフレームzに格納します。格納するデータフレームの名称(この例ではz)はお好みのものでよいです。
d2 <- data.frame(x, y, z)
# x, y, zのデータを統合してデータフレームd2に格納します。格納するデータフレームの名称(この例ではd2)はお好みのものでよいです。
d2$x <- factor(d2$x, levels=c("25", "30", "35", "40", "45"))
# データの並び順を指定します。並べたい順番に書いて下さい。発射角度は数値なので、""で囲っても囲わなくてもよいです。小さい順で良いのならこの命令文は不要です(なので実は不要な命令文です)。
# データフレームdに対してデータの並び順を指定ずみであったとしても、データフレームd2に対しても改めて指定する必要があります。dとd2は別のデータフレームだからです。
# d2$xの中身を上書きするためにd2$xに再格納します。
# データフレームd2の中身は以下のようになっています。
3.2. 作図
データフレームd2に格納したデータを用いて画面2-1を作図します。
# 命令文が続く場合には+で繋げ、最後の命令文の後には+を付けません。
# 必須命令文
ggplot(d2, aes(x = x, y = y)) +
# データフレームd2を指定します。
# x = xとして、発射角度が入っているデータ列xをx軸(横軸)に指定します。「x =」のxは小文字です。
# y = yとして、飛行距離が入っているデータ列yをy軸(縦軸)に指定します。「y =」のyは小文字です。
# 末尾の+を忘れないで下さい。
# 点グラフにおける、作図に用いるデータフレームとデータの指定
geom_point(size = 4) +
# 描く図として点グラフを指定します。
# size =で点の大きさを指定します。4にしています。
# 末尾の+を忘れないで下さい。
geom_errorbar(aes(ymin = y - z, ymax = y + z), width = 0.2) +
# 標準誤差を描きます。
# ymin =, ymax =で、標準誤差の縦棒の下端と上端の値を指定します。平均 – 標準誤差(y - z)から平均+標準誤差(y + z)まで縦棒を描きます。
# width =で上下の横棒の幅を指定します。0.2にしています。
# 末尾の+を忘れないで下さい。ただし、以降の命令文を省略する場合は+を付けず、「geom_errorbar(aes(ymin = y - z, ymax = y + z), width = 0.2)」とします。
# 省略してもよい命令文
# 以降の命令文を省略するとデフォルトで自動で描きます。
labs(x = "Angle (degrees)", y = "Distance (m)") +
# x軸(横軸)の名称をAngle (degrees)に、y軸(縦軸)の名称をDistance (m)にします。名称を""で囲みます。x, yは小文字です。
scale_y_continuous(limits=c(30, 45)) +
# y軸(縦軸)を描く範囲を30から45に指定します。
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 = "発射角度(°)", y = "飛行距離(m)") +
# x軸(横軸)の名称を発射角度(°)に、y軸(縦軸)の名称を飛行距離(m)にします。名称を""で囲みます。x, yは小文字です。
theme_classic(base_family = "HiraKakuPro-W3") +
# 日本語のフォントとしてHiraKakuPro-W3を指定します。フォントの名称を""で囲みます。
# HiraKakuPro-W3の他にも、HiraKakuPro-W6, Meiryo, MS Gothic, Osakaなど色々なフォントがあります。お好みのフォントを設定して下さい。