外国語教育研究における
を用いた統計処理入門
川口 勇作
愛知学院大学 教養部
ykawa@dpc.agu.ac.jp
FLEAT VII ワークショップ@早稲田大学
2019/8/6
自己紹介
• 川口 勇作 (KAWAGUCHI Yusaku)
–所属: 愛知学院大学 教養部
• 教養科目の英語授業などを担当しています
–専門: 外国語教育学
• コンピュータを用いた英語教育・学習
–Nagoya.R 主催
–R歴:約7年
この講習について
• 目的
–Rを用いた、外国語教育研究における統計処理の手法を
習得すること
• 内容
–R の(必要最小限の)操作方法の導入
–外国語教育研究においてよく用いられる分析方法の実
習
この講習で扱うもの・扱わないもの
○ 扱うもの
• 最低限のRの仕様・操作
• 記述統計量の算出方法
• よく用いられる各種検定・分析の
実行方法と算出方法、結果の見方
– t 検定
– 分散分析
– 効果量の算出
– 相関分析
– 回帰分析
❌ 扱わないもの
• 細かいRの仕様・操作
• よく用いられる各種検定・分析の
詳細な説明
• 高度な統計分析
– ベイズ統計、一般化線形混合効果モ
デル、構造方程式モデリング、項目
反応理論、などなど
• 文字列処理・コーパス分析
• データハンドリング・管理
導入編
• Rの基本操作
• 変数・関数
• ベクトルと行列
• データの読み込み
• パッケージのインストール・読み込み
とは
• 統計処理のためのプログラミング言語で、無償+
オープンソースのソフトウェア
• 無償の追加機能(パッケージ)をインストールするこ
とで、外国語教育研究で用いられる多くの統計処理
が可能
スクリプト編集画面
データ確認画面
コンソール
コードを選択して
F5キーを押すと
コンソールで実行されます
Windows ユーザーの方へ
• ユーザー名(ユーザーフォルダ名)に、2バイト文字
(漢字・ひらがな・カタカナ)が含まれていないか確認
–後々不具合が発生するおそれがある
• 対策
–ユーザー名を英数字のみに変更する
–R使用時専用の、名前が英数字のみのユーザーを新規作
成する
RStudio
• Rのための統合開発環境(IDE)
• Rがより使いやすくなります(詳細は割愛)
• 特別な事情がない限りはぜひインストールを
• https://www.rstudio.com/products/rstud
io/download/
スクリプト編集画面
データ確認画面
コンソール
変数一覧
履歴
ファイル一覧
作図スペース
パッケージ
ヘルプ
コードを選択して
Shift + Enterを押すと
コンソールで実行されます
の基本操作
以下 > から始まる式を
コンソールに 入力してください
> は入力不要です
#から始まる部分はコメント行なので、
入力不要です
R version 3.0.1 (2013-05-16) -- "Good Sport"
Copyright (C) 2013 The R Foundation for Statistical Computing
Platform: i386-w64-mingw32/i386 (32-bit)
R は、自由なソフトウェアであり、「完全に無保証」です。
一定の条件に従えば、自由にこれを再配布することができます。
配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。
R は多くの貢献者による共同プロジェクトです。
詳しくは 'contributors()' と入力してください。
また、R や R のパッケージを出版物で引用する際の形式については
'citation()' と入力してください。
'demo()' と入力すればデモをみることができます。
'help()' とすればオンラインヘルプが出ます。
'help.start()' で HTML ブラウザによるヘルプがみられます。
'q()' と入力すれば R を終了します。
>|
← ここから入力
入力している部分は赤く表示されます
命令の入力方法
• 命令を入力して、 Enter を押す
• 四則演算をしてみましょう
> 3+5
> 10-3
> 2*3
> 100/20
8
7
6
5
便利な機能
• 履歴機能
–矢印キーの上下(↑↓)を押すと、今まで入力した命令を
遡って呼び出すことができる
• 補完機能
–関数や変数、パッケージ名(後述)の一部を入力してTab
キーを押すと、一番それっぽいものを提案してくれる
R基本操作 まとめ
• 命令を打ち込んでEnter、それだけ
• 過去に入力したものは、履歴機能で呼び出すと楽
• 入力の途中でTabを押すと楽ができる(かも)
変数を使う
変数とは
• 1つ以上のデータをまとめて入れておく「箱」のよう
なもの
• 変数に数値を入れることを「代入」という
• 統計処理を行う際には、複数のデータをまとめて扱
うことが多いため、変数を用いてデータをまとめる
ことが重要
変数に データを 代入する
• 変数の名前を書き、- と > で矢印を作る
• 右辺には、変数に入れたいデータを記入する
> # hakoという名の変数に 5 という数字を代入する
> hako <- 5
> # hakoという名の変数の中身を確認
> hako
[1] 5
変数の名前
• どのような名前でもOK
–2バイト文字も使用できるが、変換が面倒なので使わな
い
• 後で見返したときに、どんなデータが入っているか
わかるような名前をつける
• 既存の変数にデータを代入すると、
新しいデータで上書きされる
> hako <- 5
> hako <- 10
> hako
[1] 10
変数に データを 代入する
1. 変数の名前を ”hako” とする
2. c関数で、値を1つにまとめる
– このまとまりをベクトルと呼ぶ
3. まとめた値を ”hako” という変数に代入する
<- は矢印を表現
4. 代入したら中身を確認する
> hako <- c(1, 2, 3, 4, 5)
> hako
入力中に「+」が出たら
• 入力途中に Enter キーを押すと、待機状態を示す
「+」が出る
–そのまま入力を続けても問題ない
–気になる人は、 ボタン、もしくは Escキーで入力を
キャンセル
> hako <- c(
+
関数を使う
関数とは
• 指定した値(引数)に対して、何らかの処理をして結
果を出すしくみ
–引数は、関数名の後ろの()の中に入る
–英語の文法に例えると、関数は他動詞、引数は目的語
–引数(目的語)を複数とる関数もある
• 統計分析では必ず関数を使うため、使い方に慣れて
おく必要がある
平方根を算出
• sqrt という関数を使用
( sqrt = square root )
> sqrt(2)
1.414214
> sqrt(144)
12
> sqrt(104976)
324
平方根を一気に
> hako <- c(1, 2, 3, 4, 5)
> sqrt(hako)
[1] 1.000000 1.414214 1.732051 2.000000
[5] 2.236068
変数を使うとこんなに楽
使った場合
> sqrt(hako)
使わない場合
> sqrt(1)
> sqrt(2)
> sqrt(3)
> sqrt(4)
> sqrt(5)
変数と関数 まとめ
• 変数を使って、複数のデータをまとめて扱う
• 関数で、変数の中の値を一気に処理
• 統計分析を行う際には、変数でデータをまとめて、統
計分析用の関数で処理
ベクトルと行列
ベクトルとは
• 数値が一列に並べられたもの
–全員の勉強時間
–全員のテスト得点
–全員の覚えている単語の数
行列とは
• ベクトルを縦横に並べたもの
–全員の勉強時間とテストの得点
–全員の勉強時間と覚えている単語の数
1 2 3
4 5 6
7 8 9
1 2 3
4 5 6
7 8 9
行列の要素を取り出す
• 行列の中から、ベクトルとして取り出したい行や列を
指定
–行を取り出す:変数名[行番号,]
–列を取り出す:変数名[,列番号]
> #2列目を取り出す場合
> 変数名[,2]
[1] 2 5 8
> #2行目を取り出す場合
> 変数名[2,]
[1] 4 5 6
イメージ
[,1] [,2] [,3] [,4] [,5]
[1,]
[2,]
[3,]
[4,]
[5,]
ベクトルと行列 まとめ
• ベクトル
–数字や文字の列
• 行列
–ベクトルを縦横に並べたもの
–横方向が行、縦方向が列
–行列から必要な要素を取り出すには、変数名[行番号,列
番号]
データの読み込み
データ読み込み
• 下準備
–getwd関数で、現在の作業ディレクトリの場所を確認
• 作業ディレクトリ:データを読み込みたいファイルを置く場所
–その作業ディレクトリに、配布したcsvファイルを移動し
てください
> getwd()
[1] "C:/Users/yusaku/Documents"
データ読み込み
• read.csv関数
–データフレーム形式のカンマ区切りデータを読み込む
–1つ目の引数を"ファイル名"とする
• ファイル名には、拡張子(.csv)を含める
> read.csv("ファイル名", header = T)
データ読み込み
• read.csv関数
–2つ目の引数(header)で見出し行(1行目にある項目名
などの書かれた行)の有無を指定
• Tなら1行目を見出し行として読み込み
• Fなら1行目をデータ行として読み込み
> # 見出し行がある場合
> read.csv("ファイル名", header = T)
> # 見出し行がない場合
> read.csv("ファイル名", header = F)
データ読み込み
• 読み込んだデータを分析に使う場合は、必ず変数に
代入する
–読み込むだけでは、コンソールにデータの中身が表示さ
れるだけで、分析できる状態で残らない
> # 読み込んだデータを、 datという変数に代入する
> dat <- read.csv("ファイル名", header = T)
演習
• 見出し行のあるテストのデータを、csvファイル
(test.csv)から読み込んで、「dat」という名前の変
数に代入してみましょう
> dat <- read.csv(“test.csv", header=T)
データ読み込み まとめ
• Rにデータを読み込む際は、
–データはcsv形式で用意
• 管理もしやすい
• 配布・公開もしやすい
–作業ディレクトリにcsvファイルを移動したら、
read.csv関数で読み込み
–見出し行の有無は、headerオプションで指定
パッケージを使う
パッケージとは
• パッケージとは、便利な機能・関数がまとめられてい
るもの
• Rにデフォルトで入っているパッケージだけでも色々
できる
• デフォルトで入っていない関数を使うためには、パッ
ケージを追加する必要がある
パッケージのインストール
• メニューを使ってインストールする
–Rのメニューの中の「パッケージ」> 「パッケージのインス
トール」> ほしいパッケージを選択
–簡単だが、複数のパッケージをインストールする場合、何
度もクリックする手間がかかる
パッケージのインストール
• パッケージをインストールする関数
–install.packages("ほしいパッケージ名")
• " "で囲むことを忘れないように
• インストールできたらlibrary 関数で読み込む
–library(読み込みたいパッケージ名)
> install.packages("psych")
> library(psych)
パッケージ まとめ
• パッケージは、
–install.packages 関数でインストール
–library関数で読み込み
記述統計量の算出
記述(要約)統計量とは
• 標本の分布の特徴を要約して記述する値
• 標本の各変数について平均値・分散を求めたり、度
数分布を調べたり、2変数間の相関関係を示す散布
図を描いたりする。相関係数を求めたり、クロス集計
表を作成することもこれに含まれる (青木, 2002)
記述統計量を算出する関数一覧
• データの個数 length • 最大値 max
• 平均値 mean • 最小値 min
• 中央値 median • 標準偏差 sd
記述統計
• summary関数
–平均値・第1四分位・中央値・第3四分位・最小値を算出で
きる
• 事前テストの得点の記述統計をsummary関数で算
出してみましょう
> summary(dat$pre)
記述統計
• 歪度(skewness)・尖度(kurtosis)
–分布の偏り具合・尖り具合
–デフォルトではこれらを算出できる関数が用意されてい
ない
–以下のパッケージ・関数を用いて、歪度・尖度を算出可能
• e1071パッケージのskewness関数・kurtosis関数
• psychパッケージのskew関数・kurt関数
記述統計
• psychパッケージのdescribe関数を用いて記述統
計を一通り算出できる
> install.packages(“psych”)
> library(psych)
> describe(dat)
結果の見方
ヒストグラムの作成
• hist関数でヒストグラム(度数分布図)を描き、事前テス
ト/事後テストの分布を観察する
–さきほどの練習で作った変数 test のデータを使う
> hist(dat[,1]) #事前テストのヒストグラム
> hist(dat[,2]) #事後テストのヒストグラム
2つのヒストグラム
事前テストの分布 事後テストの分布
Histogram of dat[, 1]
dat[, 1]
Frequency
30 40 50 60 70 80 90
0510152025
Histogram of dat[, 2]
dat[, 2]
Frequency
30 40 50 60 70 80 90
05101520
箱ひげ図の作成
• boxplot関数で箱ひげ図(box plot)を作成
–事前テスト・事後テストの分布を、箱ひげ図を観察して比
較しましょう
> boxplot(dat)
箱ひげ図
最大値
中央値
最小値
第1四分位点
第3四分位点
蜂群図を箱ひげ図に重ねる
• 蜂群図(beeswarm plot)を箱ひげ図に重ね描きして、
一人ひとりのばらつきを把握する
–beeswarmパッケージのbeeswarm関数を使用
–さっき描いた箱ひげ図はそのままで以下のコードを入力
> beeswarm(dat, add = T) # addは重ね描きをするオプション
と、その前に
• beeswarm関数はそのままでは使えない
–Rにはもともと入っていない関数だから
–まず、beeswarm関数が含まれている、beeswarm
パッケージをインストールし、読み込まないといけない
> install.packages("beeswarm")
> library(beeswarm)
> beeswarm(dat, add = T) #addは重ね描きをするオプション
箱ひげ図&蜂群図
t 検定
2つの変数の平均値の差をみる
こんなときに使う
• それぞれ異なる学習方略で学習した、2つのグルー
プのテストの平均得点の間に統計的に有意な差があ
るか確かめたい
→対応なし(繰り返しなし)のt 検定
• 学習者グループの、ある学習方略で学習する前と後
のテストの平均得点の間に、統計的に有意な差があ
るか確かめたい
→対応あり(繰り返しあり)のt 検定
その前に
• 分析の前提条件を満たしているか確認(本日は割愛)
– データが名義尺度ではないか
– データが正規分布しているか
– 標本サイズに偏りがないか
• 記述統計量、特に平均、標準偏差、尖度・歪度は確認した
か
• ヒストグラムや箱ひげ図を確認したか
• 最低限、これらを行ってから分析に移りましょう
やってみよう
• 事前テストと事後テストの得点を比較する
–同じ人が2回テストを受けている →対応ありt 検定
• t.test関数を使う
–引数1:事前テストのデータ
–引数2:事後テストのデータ
–pairedオプションで対応あり/なしを選ぶ(T:あり)
> t.test(dat$pre, dat$post, paired = T)
やってみよう
• 事前テストと事後テストの間の効果量を算出する
• t 検定の場合は、Cohen’s d と呼ばれる効果量を
用いる
–effsizeパッケージのcohen.d関数でd が算出できる
> install.packages(“effsize”)
> library(effsize)
> cohen.d(dat$pre, dat$post)
結果の見方
• t 値、自由度(df )、p 値を読み取る
• t 値の小数第3位以降は不要なので四捨五入
• p 値は紙面の許す限り、少数第2, 3位までの
正確な値を報告(APA, 2010)
• .001を下回る場合はp < .001でよい
• 効果量も後ろに付記する
本文中での報告例
t (62) = -5.29, p < .001, d = 0.91
一元配置分散分析
3つ以上の変数の平均値の差をみる
こんなときに使う
• それぞれ異なる学習方略で学習した、3つのグループの
テストの平均得点の間に統計的に有意な差があるか確か
めたい
→被験者間計画(対応なし・繰り返しなし)の一元配置分散分析
• 学習者グループの、ある学習方略で学習する前と後、そ
のさらに後の3つのテストの平均得点の間に、統計的に
有意な差があるか確かめたい
→被験者内計画(対応あり・繰り返しあり)の一元配置分散分析
やってみよう
• 事前テストと事後テストと遅延事後テストの得点を
比較する
–同じ人が3回テストを受けている →被験者内計画
• ANOVA君を使う
–井関龍太先生(大正大学)が作成された、分散分析用関数
–多重比較、効果量の算出も一度にでき、非常に便利
> source("anovakun_483.txt")
> source("anovakun_483.txt", encoding = 'CP932')
# Mac/Linuxの方はこちら
やってみよう
• anovakun関数を使う
– 引数1:データ
– 引数2:要因計画
• “sA”:被験者内計画(今回はこれ)
• “As”:被験者間計画
– 引数3:要因の水準数
• 今回は事前・事後・遅延の3水準
– holmオプションをTにし、多重比較の方法をHolm法に
– etaオプションをTにし、効果量(イータ二乗)を算出
> anovakun(oneway, “sA”, 3, holm = T, eta = T)
結果の見方
結果の見方
• F 値、自由度(df )、p 値を読み取る
• 自由度は、要因のもの(A)と誤差(s x A)
のものをピックアップする
• F 値の小数第3位以降は不要なので四捨五入
• 多重比較の結果を確認し、報告(t 検定と同様)
本文中での報告例
F (2, 98) = 43.64, p < .001, η2 = 0.39
二元配置分散分析
2つの要因とその水準間の平均値の差をみる
こんなときに使う
• 2種類の指導方法と2種類の教室環境で学習した4つの異なる
学習者グループのテストの平均得点の間に統計的に有意な差が
あるか確かめたい
→被験者間計画(対応なし・繰り返しなし)の二元配置分散分析
• 1つの学習者グループを、2種類の指導法で指導し、2種類の教
室環境で学習したとき、テストの平均得点の間に統計的に有意な
差があるか確かめたい
→被験者内計画(対応あり・繰り返しあり)の二元配置分散分析
• 2つの学習者グループを、それぞれ異なる指導法で指導し、その
前と後の2つのテストの平均得点の間に、統計的に有意な差があ
るか確かめたい
→被験者内・被験者間混合計画の二元配置分散分析
やってみよう
• 協同学習ベースと個別学習ベースの授業をおこなっ
た2つの学習者グループの、事前テストと事後テスト
の得点を比較する
–同じ人が2回テストを受けている →被験者内計画
–学習方法(学習者グループ)は2つ →被験者間計画
• ANOVA君を使う
> source("anovakun_483.txt")
> source("anovakun_483.txt", encoding = 'CP932')
# Mac/Linuxの方はこちら
やってみよう
• anovakun関数を使う
– 引数1:データ
– 引数2:要因計画
• “sAB”:被験者内計画
• “AsB”:被験者内・被験者間混合計画(今回はこれ)
• “ABs”:被験者間計画
– 引数3, 4:1つ目・2つ目の要因の水準数
• 今回は協同学習G・個別学習Gの2水準と事前・事後の2水準
– holmオプションをTにし、多重比較の方法をHolm法に
– petaオプション(etaではない)をTにし、効果量(偏イータ二乗)を算出
> anovakun(twoway, “AsB”, 2, 2, holm = T, peta = T)
結果の見方
結果の見方
• 交互作用が有意
• 単純主効果の分析へ
本文中での報告例
F (1, 90) = 15.40, p < .001, η2
partial = 0.14
結果の見方
相関
2つの変数間の関係をみる
こんなときに使う
• リーディングテストと語彙テストの得点との間に、ど
のような関係(=片方が大きいとき、もう片方がどう変化するか)
があるかを明らかにしたい
• 動機づけの質問紙調査の結果(数値)と、学習方略の
質問紙調査の結果(数値)との間にどのような関係
があるかを明らかにしたい
散布図
• 散布図を作成して、相関関係を観察
–csvファイル「toeic.csv」を読み込んで、「toeic」という
変数に代入
–plot関数で、散布図を描画して、TOEICスコアと英作文
の語数の相関関係を観察しましょう
> toeic <- read.csv("toeic.csv", header=T)
> plot(toeic$score, toeic$words)
300 400 500 600 700 800 900 1000
150200250300350
toeic$score
toeic$words
相関係数
• 2つの変数の相関関係の強さを0~1の間で数量的
に表現
–ピアソンの積率相関係数
• データが正規分布していたり、間隔尺度以上のときに使用
–スピアマンの順位相関係数・ケンドールの順位相関係数
• データが正規分布していなかったり、順序尺度のときに使用
やってみよう
• 変数「toeic」の中の、TOEICスコアと英作文の語数
とのピアソンの積率相関係数を算出する
> # 相関係数の算出
> cor(toeic$score, toeic$words, method = “pearson")
> # 相関係数、p値、信頼区間の算出
> cor.test(toeic, method = “pearson")
回帰分析
ひとつの変数から、ひとつの変数を予測する
こんなときに使う
• 語彙テストの得点からTOEICの得点を予測する
→単回帰分析
–従属変数 = a + b × 独立変数
• 読解力・聴解力・語彙力のうち、TOEICの得点を
もっとも予測するものはどれか明らかにする
→重回帰分析
–従属変数 = a + b1 × 独立変数1 + b2 × 独立変数2
+ b3 × 独立変数3 + ... + bn × 独立変数n +
やってみよう
• 単回帰分析で、読解テストの得点からTOEICの得点
を予測する
> res1 <- lm(kaiki$toeic ~ kaiki$read)
> summary(res1)
結果の見方 • 導かれる回帰式:
TOEIC得点の予測値 = 149.12 + 4.81 × 読
解テストの得点
• 決定係数 0.24、自由度調整済み決定係数0.22
TOEIC得点の分散の22~24%が説明されてい
る
やってみよう
• 重回帰分析で、読解テストの得点、聴解テストの得点、
ごテストの得点のうち、最もTOEICの得点を予測す
るものはどれかを明らかにする
> res2 <- lm(kaiki$toeic ~ kaiki$read + kaiki$listen + kai
ki$vocab)
> summary(res2)
結果の見方
• 導かれる回帰式:
TOEIC得点の予測値 = 89.43 + 2.29 × 読
解テストの得点 + 3.14 × 聴解テストの得点 +
1.51 × 語彙テストの得点
• 偏回帰係数が有意だったのは聴解テストのみ
→TOEIC得点を最も予測するものは聴解テスト
• 決定係数 0.34、自由度調整済み決定係数0.31
TOEIC得点の分散の約30%が説明されている
より深くRを学びたくなった方へ
• 日本全国にあるRコミュニティにどうぞ
• Japan.R
• Tokyo.R
• SappoRo.R
• Nagoya.R
• Kobe.R
• HiRoshima.R
• Fukuoka.R
外国語教育研究における
を用いた統計処理入門
連絡先: 川口 勇作(愛知学院大学 教養部)
ykawa@dpc.agu.ac.jp
https://y-kawaguchi.com

外国語教育研究におけるRを用いた統計処理入門