MASSライブラリーのCars93データ,tclustライブラリーのSwiss Bankデータ(真札,偽札データ)を使い,基本統計量,層別統計量によるデータを記述する.
library(MASS);library(psych);library(car);library(knitr);library(dplyr)
library(pander);library(lattice);library(vcd);library(ggplot2);library(tclust)
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は偽札なので真札偽札という変数を追加する.
<- mutate(swissbank , class = row_number()) #連番を追加
d #Itemm名classの1-100真札をgenuine,101-200偽札をfakeという値に変更
<- mutate(d , class = if_else(class < 101, "genuine", "fake"))
swiss.b 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
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(文字)となっている.
swiss bankデータは真札,偽札データであるから,真札,偽札を層別アイテム(class)として2峰性分布であったDiagonalの層別統計量を算出してみる.ここではby関数を利用する.
by関数はデータセットのsubsetに対して,FUNで指定する処理を実行する.
引数は以下の通り
by(swiss.b$Diagonal , #集約する変数
$class , #INDICES= 層別アイテム
swiss.b#FUN= 適用する関数 describe)
## 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)は正であり正規分布より尖っている.またその傾向は真札で強い(尖っている:データが平均付近に集中し,分布の裾が重い).
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