1 基本統計量

MASSライブラリーのCars93データ,tclustライブラリーのSwiss Bankデータ(真札,偽札データ)を使い,基本統計量,層別統計量によるデータを記述する.

2 分析の準備

2.1 必要なlibrary,data読込とデータ確認

library(MASS);library(psych);library(car);library(knitr);library(dplyr)
library(pander);library(lattice);library(vcd);library(ggplot2);library(tclust)

2.2 dataの読み込みと加工

data(Cars93) #library(MASS)のCars93データを読み込む:data()関数
str(Cars93) #data構造の確認:str()関数
## 'data.frame':    93 obs. of  27 variables:
##  $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
##  $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
##  $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
##  $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
##  $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
##  $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
##  $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
##  $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
##  $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
##  $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
##  $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
##  $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
##  $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
##  $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
##  $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
##  $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
##  $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
##  $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
##  $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
##  $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
##  $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
##  $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
##  $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
##  $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
##  $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
##  $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...

スイス銀行データを読込,classという項目(カテゴリ:真札,偽札)を追加する.

dplyrパッケージのmutate関数を利用し,データセットに新しい変数を追加する。この関数では既存の変数の値を操作することもできる(データ操作の基本,8.3データ値の変換を参照)。

mutate(data, 列名=編集内容):class=row_number(),class:列名,row_number()で連番を追加

mutate(data, 列名=編集内容):class = if_else(class < 101, “genuine”, “fake”),class:列名,if_rese()を使って,class変数が101未満なら”genuine”,そうでないなら”fake”,にすると指定。

data(swissbank)    #library(tclust)のswissbankデータを読み込む:真札偽札データ
#swissbankデータは,1-100は真札,101-200は偽札なので真札偽札という変数を追加する.
d <- mutate(swissbank , class = row_number()) #連番を追加
#Itemm名classの1-100真札をgenuine,101-200偽札をfakeという値に変更
swiss.b <- mutate(d , class = if_else(class < 101, "genuine", "fake"))  
str(swiss.b) #データの型,構造確認 
## 'data.frame':    200 obs. of  7 variables:
##  $ Length  : num  215 215 215 215 215 ...
##  $ Ht_Left : num  131 130 130 130 130 ...
##  $ Ht_Right: num  131 130 130 130 130 ...
##  $ IF_Lower: num  9 8.1 8.7 7.5 10.4 9 7.9 7.2 8.2 9.2 ...
##  $ IF_Upper: num  9.7 9.5 9.6 10.4 7.7 10.1 9.6 10.7 11 10 ...
##  $ Diagonal: num  141 142 142 142 142 ...
##  $ class   : chr  "genuine" "genuine" "genuine" "genuine" ...

最終列にclassがchr(character型;文字)として追加.値はgenuineとfake

3 基本統計量

describe関数を使って基本統計量を確認する.

describe(swiss.b)
##          vars   n   mean   sd median trimmed  mad   min   max range  skew
## Length      1 200 214.90 0.38 214.90  214.89 0.30 213.8 216.3   2.5  0.19
## Ht_Left     2 200 130.12 0.36 130.20  130.13 0.44 129.0 131.0   2.0 -0.19
## Ht_Right    3 200 129.96 0.40 130.00  129.96 0.44 129.0 131.1   2.1  0.04
## IF_Lower    4 200   9.42 1.44   9.10    9.35 1.63   7.2  12.7   5.5  0.37
## IF_Upper    5 200  10.65 0.80  10.60   10.66 0.89   7.7  12.3   4.6 -0.23
## Diagonal    6 200 140.48 1.15 140.45  140.52 1.56 137.8 142.4   4.6 -0.19
## class*      7 200   1.50 0.50   1.50    1.50 0.74   1.0   2.0   1.0  0.00
##          kurtosis   se
## Length       0.71 0.03
## Ht_Left     -0.59 0.03
## Ht_Right    -0.19 0.03
## IF_Lower    -1.05 0.10
## IF_Upper     0.15 0.06
## Diagonal    -1.15 0.08
## class*      -2.01 0.04

返り値をみると,classはchr(character型;文字)であるため,右肩に*がついている.*がついた列は質的変数である.このため,mean以下は意味がない.

返り値

n;サンプルサイズ,sd;標準偏差(不偏分散の平方根).trimmed;トリム平均,上下10%のデータをomitして算出した平均値,mad;Rでは,MAD関数は1.4826倍している(正規分布の場合,標準偏差と比較しやすくするためにMADの定義を1.4826倍している). 標準偏差の方が数学的処理が便利であるのに加えて,平均値が「偏差の絶対値の総和」ではなく「偏差の2乗和」を最小にする定数 (偏差の絶対値の総和を最小にする定数は中央値) skew;歪度,kurtosis;尖度(尖っている:データが平均付近に集中し,分布の裾が重い),(データが正規分布に近い場合は歪度が0,尖度が3になる),se;標準誤差


Rの分散は不偏分散を返す.そのため標準偏差(SD)は不偏分散の平方根である.

標本分散,標本標準偏差を計算する.

var(swiss.b$Length) #不偏分散
## [1] 0.141793
sqrt(var(swiss.b$Length)) #不偏分散の平方根
## [1] 0.3765541
#不偏分散から標本分散を計算する.不偏分散を(n-1)/n倍すればいい
var(swiss.b$Length)*(length(swiss.b$Length)-1)/length(swiss.b$Length)
## [1] 0.141084
#標本分散から標本標準偏差を計算する.
sqrt(var(swiss.b$Length)*(length(swiss.b$Length)-1)/length(swiss.b$Length))
## [1] 0.3756115

summary関数で5数要約+平均値を確認する.

summary(swiss.b)
##      Length         Ht_Left         Ht_Right        IF_Lower     
##  Min.   :213.8   Min.   :129.0   Min.   :129.0   Min.   : 7.200  
##  1st Qu.:214.6   1st Qu.:129.9   1st Qu.:129.7   1st Qu.: 8.200  
##  Median :214.9   Median :130.2   Median :130.0   Median : 9.100  
##  Mean   :214.9   Mean   :130.1   Mean   :130.0   Mean   : 9.418  
##  3rd Qu.:215.1   3rd Qu.:130.4   3rd Qu.:130.2   3rd Qu.:10.600  
##  Max.   :216.3   Max.   :131.0   Max.   :131.1   Max.   :12.700  
##     IF_Upper        Diagonal        class          
##  Min.   : 7.70   Min.   :137.8   Length:200        
##  1st Qu.:10.10   1st Qu.:139.5   Class :character  
##  Median :10.60   Median :140.4   Mode  :character  
##  Mean   :10.65   Mean   :140.5                     
##  3rd Qu.:11.20   3rd Qu.:141.5                     
##  Max.   :12.30   Max.   :142.4

classは,Length(長さ)200,Class(データの型),character(文字)となっている.

4 層別分析

4.1 層別統計量:by()関数

swiss bankデータは真札,偽札データであるから,真札,偽札を層別アイテム(class)として2峰性分布であったDiagonalの層別統計量を算出してみる.ここではby関数を利用する.

by関数はデータセットのsubsetに対して,FUNで指定する処理を実行する.

引数は以下の通り

by(swiss.b$Diagonal , #集約する変数                 
  swiss.b$class ,   #INDICES= 層別アイテム
  describe)      #FUN= 適用する関数
## swiss.b$class: fake
##    vars   n   mean   sd median trimmed  mad   min   max range  skew kurtosis
## X1    1 100 139.45 0.56  139.5  139.51 0.44 137.8 140.6   2.8 -0.98     1.06
##      se
## X1 0.06
## ------------------------------------------------------------ 
## swiss.b$class: genuine
##    vars   n   mean   sd median trimmed  mad   min   max range  skew kurtosis
## X1    1 100 141.52 0.45  141.5  141.54 0.44 139.6 142.4   2.8 -0.77     1.96
##      se
## X1 0.04

上段がfake(偽札),下段がgenuine(真札)である.describe関数を適用しているので,統計量は3.基本統計量参照

代表値をみると,平均値,中央値,トリム平均ともに真札の方が大きい.データ範囲をみてもレンジは同じであるが,真札の方が大きい方にズレている.歪度(skew)はマイナスの値であることから,ともに左に歪んだ分布であり,偽札で歪みが大きい.尖度(kurtosis)は正であり正規分布より尖っている.またその傾向は真札で強い(尖っている:データが平均付近に集中し,分布の裾が重い).

4.2 aggregate関数

aggregate(Cars93[c("Price")], list(Cars93$Origin), mean)
##   Group.1    Price
## 1     USA 18.57292
## 2 non-USA 20.50889
aggregate(Cars93[c("Price")], list(Cars93$Type,Cars93$Origin), mean)
##    Group.1 Group.2    Price
## 1  Compact     USA 12.82857
## 2    Large     USA 24.30000
## 3  Midsize     USA 21.78000
## 4    Small     USA 10.04286
## 5   Sporty     USA 19.37500
## 6      Van     USA 18.26000
## 7  Compact non-USA 22.40000
## 8  Midsize non-USA 31.75000
## 9    Small non-USA 10.22857
## 10  Sporty non-USA 19.41667
## 11     Van non-USA 20.15000
aggregate(cbind(Cars93[c("Price")],Cars93[c("RPM")]),
          list(Cars93$Type,Cars93$Origin), mean)
##    Group.1 Group.2    Price      RPM
## 1  Compact     USA 12.82857 5085.714
## 2    Large     USA 24.30000 4672.727
## 3  Midsize     USA 21.78000 4920.000
## 4    Small     USA 10.04286 5557.143
## 5   Sporty     USA 19.37500 5131.250
## 6      Van     USA 18.26000 4680.000
## 7  Compact non-USA 22.40000 5577.778
## 8  Midsize non-USA 31.75000 5683.333
## 9    Small non-USA 10.22857 5671.429
## 10  Sporty non-USA 19.41667 5741.667
## 11     Van non-USA 20.15000 4825.000