7 基本的な統計分析

7.1 概要

このページでは

について解説します。

7.2 データセット

本ページで使うデータセットをまずは用意します。
本項では datarium パッケージのデータセットを利用することにします。

datarium パッケージはデータ分析の演習に適した様々なデータセットを提供しています。下記のページでデータセットの一覧とその概要を見ることができます。
https://rpkgs.datanovia.com/datarium/reference

datarium パッケージがインストールされていない場合はまずインストールしておきます。

パッケージの読み込みをします。

このパッケージが持つデータセットのうち jobsatisfactionmarketing の中身を確認してみます。

jobsatisfaction は仕事満足度(score)のデータで、説明変数として性別(male/female)と学歴(school/college,university)の2要因があります。

marketing はメディア(youtube/facebook/newspaper)への広告出稿料と売上げ額(sales)のデータです。

変数名が長いので、短い変数名で使えるようにしておきます。

7.3 各種統計量の計算

7.3.2 様々な統計料をまとめて計算する

pastecs::stat.desc()

pastecs パッケージの stat.desc() 関数を使うとさらに多くの統計量の計算が可能です。

どのような統計量を計算するかを引数で変更することができます。

  • basic : 欠損値の数や最小値最大値など
  • desc : 平均値やその標準偏差(SE.mean)や95%信頼区間(CI.mean.0.95)など
  • norm : 正規分布の統計量(歪度や尖度)と正規性の検定
  • p: 信頼区間の計算に使う確率水準

グループごとの統計量を計算する

psych パッケージの describeBy() 関数を使うと、グループごとの統計量を計算できます。

library( psych )

# 性別ごとの score の統計量
describeBy( job$score, group = list( gender = job$gender ) )
## 
##  Descriptive statistics by group 
## gender: male
##    vars  n mean   sd median trimmed  mad  min max range skew kurtosis   se
## X1    1 28 7.06 1.76   6.34       7 1.34 4.78  10  5.22 0.46    -1.54 0.33
## -------------------------------------------------------- 
## gender: female
##    vars  n mean   sd median trimmed  mad  min  max range skew kurtosis
## X1    1 30 6.87 1.31   6.45    6.76 1.07 4.93 9.57  4.64 0.64    -0.84
##      se
## X1 0.24

# 性別 x 学歴の score の統計量
describeBy( job$score,
    group = list( education = job$education_level, gender = job$gender ) )
## 
##  Descriptive statistics by group 
## education: school
## gender: male
##    vars n mean   sd median trimmed  mad  min  max range  skew kurtosis
## X1    1 9 5.43 0.36   5.51    5.43 0.43 4.78 5.94  1.16 -0.29     -1.2
##      se
## X1 0.12
## -------------------------------------------------------- 
## education: college
## gender: male
##    vars n mean   sd median trimmed  mad  min  max range  skew kurtosis
## X1    1 9 6.22 0.34    6.3    6.22 0.31 5.58 6.74  1.16 -0.35    -0.89
##      se
## X1 0.11
## -------------------------------------------------------- 
## education: university
## gender: male
##    vars  n mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 10 9.29 0.44   9.21    9.28 0.43 8.7  10   1.3 0.45    -1.25 0.14
## -------------------------------------------------------- 
## education: school
## gender: female
##    vars  n mean   sd median trimmed  mad  min  max range  skew kurtosis
## X1    1 10 5.74 0.47   5.72    5.76 0.43 4.93 6.38  1.45 -0.12     -1.3
##      se
## X1 0.15
## -------------------------------------------------------- 
## education: college
## gender: female
##    vars  n mean   sd median trimmed  mad  min max range  skew kurtosis
## X1    1 10 6.46 0.47   6.45    6.49 0.43 5.65 7.1  1.45 -0.13     -1.3
##      se
## X1 0.15
## -------------------------------------------------------- 
## education: university
## gender: female
##    vars  n mean   sd median trimmed  mad  min  max range  skew kurtosis
## X1    1 10 8.41 0.94   8.48     8.5 0.86 6.52 9.57  3.05 -0.58    -0.81
##     se
## X1 0.3

7.4 t 検定

t 検定では2つのグループ間の平均値に差があるかを調べます。

t.test 関数を使って t 検定が行えます。
関数の引数の与え方として以下の2通りがあります。

  1. t.test( formula = , data = ) : データフレームを使う
  2. t.test( x = , y = ) : 各グループごとの数値ベクトルを使う

formula には ~ の左側に検定したい列名、右側にグループ分けに使う列名を書きます。
data にはデータフレームを入れます。

どちらの方法でも同じ結果になっているのが確認できます。
t = 0.47084 (p = 0.6398) で、性別によってスコアに有意な差があるとは言えません。

相関係数の検定と同様、alternative 引数を使って片側検知もできます。
また、対応のある t 検定をする場合には引数に paired = TRUE を加えます。
(デフォルトでは paired = FALSE、つまり対応のない t 検定をします)

7.5 相関

相関係数は量的変数同士の関係を記述するのに利用されます。相関係数は -1 から 1 までの範囲の値を取り、値の絶対値が大きいほど関係性の強さを示します。このセクションでは相関係数の計算方法と優位性検定について解説します。

7.5.1 marketing のデータ

datarium パッケージの marketing データの相関係数を計算します。
その前に、まずは散布図を描いてデータを視覚的に確認しましょう。

pairs() 関数を使うとペアごとの散布図をまとめて描くことができます。
第1引数で ~ 記号の右側に図に含めたい要素(列名)を + でつないで記述します。

これを見ると youtube と sales、facebook と sales の間には正の相関がありそうです。

7.5.2 cor() 関数による相関係数の計算

cor() 関数を使うと相関係数の計算ができます。

上記の3つ目のように cor 関数にデータフレームごと入れれば全てのペアの相関係数が計算できて便利ですが、今回の分析ではSNS同士の相関には興味はないのでちょっと冗長です。

例えば以下のようにすれば、各 SNS への広告と sales 額の相関のみを計算できます。

相関係数の種類

cor() 関数では method 引数で相関係数の種類を指定できます。

  • method = "pearson" : ピアソンの積率相関係数(デフォルト設定)
  • method = "spearman" : スピアマンの順位相関係数
  • method = "kendall" : ケンドールの順位相関係数

7.5.3 相関係数の検定

cor.test() 関数で相関係数の検定が行えます。

t 値は 17.668 で p 値は 2.2e-16 未満(p-value < 2.2e-16)と極めて小さく、有意な相関だと言えます。

cor.test() 関数は alternative という引数も持ち、デフォルトでは “two.sided” となっています(両側検定)。片側検定も可能で、正の相関を想定する場合は alternative = "greater"、負の相関を想定する場合は alternative = "less" とします。

2.2e-16 というのは 0.00000000000000022 のことですが、これは実際のところ .Machine$double.eps の値であり統計学的に意味のある値ではありません。この値について詳しくは help( .Machine ) を参照。

cor.test() 関数では一度にひとつの相関についてしか計算ができません。

psych パッケージの corr.test 関数を使うとペアごとの相関の検定が一度に行えます。

相関係数と p 値が出力されます。

cor.test も corr.test も関数の返り値はリストであり、相関係数や p 値以外にも様々な計算結果が含まれています。