Rの操作復習と簡単な分散分析

Hikaru GOTO

ゼミ前勉強会

統計学エンドユーザーのための分散分析(1)
2017年4月15日(土)

勉強会の目的

1. 統計学エンドユーザーが知っておいたほうがいい手法を身につける。

2. 量的分析を使った研究が理解できるようになる。

3. Rを使った量的分析ができるようになる。

今日の内容

R の機能追加と呼び出し

install.packages("car")
library(car)
library(car)  # 全部半角英数。スペルミスに注意。

データの読み込み方

やってみよう

データのインポートの練習

  1. プロジェクト(プロジェク名は半角英数)を作成し,
  2. そこに reidai.csv を入れて,
  3. reidai.csv を読み込む。

データには型がある

str(iris)
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
str(Titanic)
##  table [1:4, 1:2, 1:2, 1:2] 0 0 35 0 0 0 17 0 118 154 ...
##  - attr(*, "dimnames")=List of 4
##   ..$ Class   : chr [1:4] "1st" "2nd" "3rd" "Crew"
##   ..$ Sex     : chr [1:2] "Male" "Female"
##   ..$ Age     : chr [1:2] "Child" "Adult"
##   ..$ Survived: chr [1:2] "No" "Yes"
str(reidai)
## Classes 'tbl_df', 'tbl' and 'data.frame':    400 obs. of  13 variables:
##  $ id         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ nendai     : chr  "10dai" "10dai" "10dai" "10dai" ...
##  $ sex        : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ age        : int  19 18 16 16 16 17 17 19 19 17 ...
##  $ income     : int  1 12 12 12 5 1 12 1 12 1 ...
##  $ marriage   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ family     : int  1 2 2 2 2 2 2 2 2 2 ...
##  $ syoku_kenko: int  4 2 3 4 3 5 2 4 3 3 ...
##  $ tyoshoku   : int  4 3 4 4 4 4 2 2 1 4 ...
##  $ gaisyoku1  : int  3 4 3 3 3 3 4 4 3 2 ...
##  $ gaisyoku2  : int  4 5 4 4 4 5 5 4 5 3 ...
##  $ jitaku_cook: int  4 3 0 3 0 5 0 1 0 2 ...
##  $ tokui      : int  3 2 NA 2 NA 1 NA NA NA 2 ...
##  - attr(*, "spec")=List of 2
##   ..$ cols   :List of 13
##   .. ..$ id         : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ nendai     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_character" "collector"
##   .. ..$ sex        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ age        : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ income     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ marriage   : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ family     : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ syoku_kenko: list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ tyoshoku   : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ gaisyoku1  : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ gaisyoku2  : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ jitaku_cook: list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   .. ..$ tokui      : list()
##   .. .. ..- attr(*, "class")= chr  "collector_integer" "collector"
##   ..$ default: list()
##   .. ..- attr(*, "class")= chr  "collector_guess" "collector"
##   ..- attr(*, "class")= chr "col_spec"
head(reidai)
head(reidai, 3)
## # A tibble: 3 × 13
##      id nendai   sex   age income marriage family syoku_kenko tyoshoku
##   <int>  <chr> <int> <int>  <int>    <int>  <int>       <int>    <int>
## 1     1  10dai     1    19      1        1      1           4        4
## 2     2  10dai     1    18     12        1      2           2        3
## 3     3  10dai     1    16     12        1      2           3        4
## # ... with 4 more variables: gaisyoku1 <int>, gaisyoku2 <int>,
## #   jitaku_cook <int>, tokui <int>

一元配置/一要因の分散分析

ウソです。

応答変数と説明変数

応答(従属)変数=年収,店舗の売り上げ
説明(独立)変数=業種(X, Y, Z),立地(A, B, C, D)

分散分析とは

業種Xの平均年収 ~ 全業種の平均年収+業種Xの効果+誤差X(残差)
業種Yの平均年収 ~ 全業種の平均年収+業種Yの効果+誤差Y(残差)
業種Zの平均年収 ~ 全業種の平均年収+業種Zの効果+誤差Z(残差)

例題 reidai データを使った分散分析

応答変数は食生活の意識,説明変数は婚姻状況

res = lm(syoku_kenko ~ factor(marriage), data = reidai)
anova(res)
## Analysis of Variance Table
## 
## Response: syoku_kenko
##                   Df Sum Sq Mean Sq F value    Pr(>F)    
## factor(marriage)   3  25.06  8.3542  6.6708 0.0002106 ***
## Residuals        396 495.93  1.2524                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

「食生活の健康意識が婚姻状況によって異なるかを調べるために一要因の分散分析を行った。その結果、5%水準で有意であった(F(3, 396) = 6.67, p < 0.01)。」(“中部大学小塩研究室のページ,” n.d.)

微妙に違いますが,↓の方法はNG。

res = lm(syoku_kenko ~ marriage, data = reidai)
anova(res)
## Analysis of Variance Table
## 
## Response: syoku_kenko
##            Df Sum Sq Mean Sq F value   Pr(>F)   
## marriage    1   10.6 10.6017  8.2671 0.004254 **
## Residuals 398  510.4  1.2824                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

res = lm(syoku_kenko ~ as.factor(marriage), data = reidai)
anova(res)
res = lm(syoku_kenko ~ factor(marriage), data = reidai)
anova(res)

私たちは何をやっているのか?

練習問題

reidai データで分散分析

  1. 婚姻状況によって外食頻度(gaisyoku1)は異なりますか?
  2. 家族との同居状態(family)によって,自炊の頻度(jitaku_cook)は異なりますか?
  3. 年齢層(nendai)によって,食生活の意識(syoku_kenko)は異なりますか?
res1 = lm(gaisyoku1 ~ factor(marriage), data = reidai)
anova(res1)
## Analysis of Variance Table
## 
## Response: gaisyoku1
##                   Df Sum Sq Mean Sq F value   Pr(>F)   
## factor(marriage)   3  23.86  7.9534  4.2728 0.005506 **
## Residuals        396 737.12  1.8614                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
res2 = lm(jitaku_cook ~ factor(family), data = reidai)
anova(res2)
## Analysis of Variance Table
## 
## Response: jitaku_cook
##                 Df  Sum Sq Mean Sq F value Pr(>F)
## factor(family)   2    6.96  3.4799  0.8691 0.4201
## Residuals      397 1589.54  4.0039
res3 = lm(syoku_kenko ~ factor(nendai), data = reidai)
anova(res3)
## Analysis of Variance Table
## 
## Response: syoku_kenko
##                 Df Sum Sq Mean Sq F value    Pr(>F)    
## factor(nendai)   5  44.56  8.9114  7.3694 1.277e-06 ***
## Residuals      394 476.44  1.2092                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

多重比較

tajyu = aov(syoku_kenko ~ factor(nendai), data = reidai)
TukeyHSD(tajyu)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = syoku_kenko ~ factor(nendai), data = reidai)
## 
## $`factor(nendai)`
##                   diff         lwr       upr     p adj
## 20dai-10dai 0.01666667 -0.55829452 0.5916279 0.9999994
## 30dai-10dai 0.05714286 -0.49690361 0.6111893 0.9996974
## 40dai-10dai 0.11428571 -0.43976075 0.6683322 0.9916230
## 50dai-10dai 0.50000000 -0.05404646 1.0540465 0.1034992
## 60dai-10dai 0.90000000  0.34595354 1.4540465 0.0000657
## 30dai-20dai 0.04047619 -0.51357027 0.5945227 0.9999447
## 40dai-20dai 0.09761905 -0.45642742 0.6516655 0.9959881
## 50dai-20dai 0.48333333 -0.07071313 1.0373798 0.1270497
## 60dai-20dai 0.88333333  0.32928687 1.4373798 0.0000969
## 40dai-30dai 0.05714286 -0.47516777 0.5894535 0.9996319
## 50dai-30dai 0.44285714 -0.08945348 0.9751678 0.1648768
## 60dai-30dai 0.84285714  0.31054652 1.3751678 0.0001115
## 50dai-40dai 0.38571429 -0.14659634 0.9180249 0.3025057
## 60dai-40dai 0.78571429  0.25340366 1.3180249 0.0004206
## 60dai-50dai 0.40000000 -0.13231062 0.9323106 0.2630214

「食生活の健康意識が年齢層によって異なるか検討するため一要因の分散分析を行った。その結果、5%水準で有意であった(F(5, 394) = 7.37, p <0.01)。さらに Tukey の HSD 法(5%水準)による多重比較を行ったところ,60代と10代,60代と20代,60代と30代,60代と40代の間でいずれも60代の平均値が有意に高かった。」

tapply(reidai$syoku_kenko, reidai$nendai, mean)
##    10dai    20dai    30dai    40dai    50dai    60dai 
## 3.600000 3.616667 3.657143 3.714286 4.100000 4.500000
tajyu2 = aov(gaisyoku1 ~ factor(marriage), data = reidai)
TukeyHSD(tajyu2)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = gaisyoku1 ~ factor(marriage), data = reidai)
## 
## $`factor(marriage)`
##            diff        lwr        upr     p adj
## 2-1 -0.61770245 -1.8204774  0.5850725 0.5475303
## 3-1 -0.03357546 -0.3927413  0.3255903 0.9950611
## 4-1 -2.31214689 -4.0918946 -0.5323992 0.0048616
## 3-2  0.58412698 -0.6140664  1.7823204 0.5904297
## 4-2 -1.69444444 -3.8096677  0.4207788 0.1658877
## 4-3 -2.27857143 -4.0552261 -0.5019168 0.0056222

今日のまとめ

補足

次回予告

References

中部大学小塩研究室のページ. (n.d.). Retrieved April 8, 2017, from http://psy.isc.chubu.ac.jp/~oshiolab/teaching_folder/data_b/04/04.html

嶋田・阿部. (2017). Rで学ぶ統計学入門. 東京化学同人.

自炊と健康意識に関するアンケート調査|マーケティングリサーチ・市場調査のマーシュ. (n.d.). Retrieved April 8, 2017, from https://www.marsh-research.co.jp/examine/2809jisui.html

馬場. (2015). 平均・分散から始める一般化線形モデル入門. プレアデス出版.