5. データの要約(記述統計と度数分布表)

扱うデータは、はじめにデータ全体を概観して、どんなデータであるかを把握することが重要です。そこで統計解析を行う前に、平均や分散を求めることでデータの全体像を把握していきます。ここではdemo.csvを使用して試してみましょう。

サンプルデータ(data.csv)

data.csvには、100名の年齢と性別のサンプルデータが含まれています。

図5-1 サンプルデータ(data.csv)

変数は大きく量的変数と質的変数に分けることができます。量的変数は数値として表せる変数であり、例えば身長や体重があてはまります。一方で質的変数はあるカテゴリに属するか否かを表す変数であり、例えば性別や血液型があてはまります。

In [1]:
#作業ディレクトリの処理は既に行っていれば不要(復習)
getwd() #作業ディレクトリの確認
setwd("R:/WinPython/WinPython-64bit-3.6.1.0Qt5/notebooks/data") #作業ディレクトリの変更
'R:/WinPython/WinPython-64bit-3.6.1.0Qt5/notebooks'
In [2]:
#データの読み込み(復習)
data = read.csv("5-1.csv", header =TRUE)
data #データの確認をする場合
agesex
55 女性
56 男性
28 女性
24 女性
25 男性
45 女性
42 男性
35 男性
46 男性
34 女性
55 女性
28 男性
31 女性
42 男性
35 男性
52 女性
21 女性
32 男性
42 男性
40 女性
30 男性
48 男性
39 女性
42 女性
45 女性
51 女性
39 女性
49 男性
52 男性
53 女性
......
28 男性
39 女性
30 女性
40 女性
55 男性
48 女性
48 女性
49 女性
56 男性
44 男性
43 男性
61 女性
37 男性
29 女性
30 女性
48 男性
51 女性
40 女性
66 女性
61 女性
61 女性
32 女性
25 男性
47 男性
59 女性
25 女性
63 女性
41 男性
66 男性
20 男性

5.1 要約統計量の算出 summary(data)

Summary関数を使うと、年齢(量的変数)については最小値、第1四分位数、中央値、平均値、第3四分位数、最大値が一度で求まります。性別(質的変数)については各カテゴリの観測数が求まります。

In [3]:
summary(data) #データフレームの要約
      age          sex    
 Min.   :20.00   女性:53  
 1st Qu.:31.75   男性:47  
 Median :42.50            
 Mean   :42.26            
 3rd Qu.:52.00            
 Max.   :66.00            
1列のデータを取り出す場合

データから1列を取り出すには、data$ageと[データ名$変数名]として表します。

In [4]:
summary(data$age)#dataの「年齢」についての要約
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  20.00   31.75   42.50   42.26   52.00   66.00 

5.2 その他の主な関数

Rには、summary関数以外にも要約統計量を求める関数が用意されています。ここではdemo.csvの年齢データを対象として一例を示します。

In [5]:
length(data$age) #度数
max(data$age) #最大値
min(data$age) #最小値
max(data$age)-min(data$age) #範囲(最大値ー最小値)
mean(data$age) #平均値
sd(data$age)/sqrt(length(data$age)) #標準誤差
sd(data$age) #標準偏差
var(data$age) #不偏分散
var(data$age)*(length(data$age)-1)/length(data$age) #標本分散
mean((data$age-mean(data$age))^3/sd(data$age)^3) #歪度
mean((data$age-mean(data$age))^4/sd(data$age)^4) #尖度
100
66
20
46
42.26
1.24296972504311
12.4296972504311
154.497373737374
152.9524
-0.0527821248180483
1.94120832874821

歪度(わいど): 分布の左右対称性をあらわす。左右対称なら歪度が0になる。右に偏った分布なら0より大きくなり、左に偏った分布なら0より小さくなる。

歪度の例

In [6]:
data = read.csv("5-2.csv", header =TRUE)
data #データの確認をする場合
hist(data$groupA)
mean((data$groupA-mean(data$groupA))^3/sd(data$groupA)^3) #groupA歪度
hist(data$groupB)
mean((data$groupB-mean(data$groupB))^3/sd(data$groupB)^3) #groupB歪度
groupAgroupB
1311
1512
1324
1829
1629
1731
1830
1631
2532
2634
2632
3040
3040
2836
2640
2739
3039
3140
3435
3342
3241
3144
2545
2545
2241
2345
2442
2541
2141
2045
2142
2244
2543
2545
2250
2448
3648
3548
4253
5055
5453
1.11240567476126
-1.04682636884427

尖度(せんど): データ分布の集中度をあらわす。正規分布なら尖度が0、中心への集中度が高ければ0より大きく、中心への集中度が低ければ0より小さくなる。

尖度の例

In [7]:
data = read.csv("5-3.csv", header =TRUE)
data #データの確認をする場合
hist(data$groupA)
mean((data$groupA-mean(data$groupA))^4/sd(data$groupA)^4) #groupA尖度
hist(data$groupB)
mean((data$groupB-mean(data$groupB))^4/sd(data$groupB)^4) #groupB尖度
groupAgroupB
1013
1912
1514
2015
2350
2348
2449
2445
2246
2631
2933
2533
2635
2735
2732
2740
4540
4541
4543
5245
3551
3255
3551
3417
3419
3419
3224
3320
3120
3721
4025
3929
3628
3629
3625
3530
4337
4136
4439
4039
4538
2.50926870587485
1.88473041032504

5.3 関数の作成 function関数

平均や標準偏差などはRに標準で実装されていますが、標準で実装されていない関数や複雑な処理を行うにはプログラムを作成することもできます。 function関数はfunction(){}のように使用し、丸括弧()には関数内で利用する引数を、波括弧{}には実際の処理を入力します。

標本分散を求める

Rに標準で実装されている分散を求める関数varは不偏分散を求める関数です。ここではfunction関数を使用して、標本分散を求める関数varianceを作成します。関数名は自由です。

In [8]:
variance = function(x){var(x)*((length(x)-1)/length(x))}
variance(data$age)
Error in var(x):  'x' が NULL です 
Traceback:

1. variance(data$age)
2. var(x)   # at line 1 of file <text>

5.4 度数分布表の作成

度数分布表

度数分布表は、対象とするデータの各値が現われた個数を表示する表です。

In [ ]:
table(data$age) #年齢の度数分布表を出力する

ヒストグラム(度数分布図)

次に、ヒストグラムを作成します。ヒストグラムは度数分布を柱状のグラフで表したものです。横軸に階級、縦軸に度数をとり、各階級の度数の分布を示します。度数分布表やヒストグラムを作成することで、標本の散らばりを確認することができます。

In [ ]:
hist(data$age) #年齢のヒストグラムを出力する