Data manipulation
##第3 章データの数値化
#データを要約し数値化を考えるとき、代表的なものとして、位置の尺度、散らばりの尺度、データ間の関連、データの特性をみる量がある。
##3.1 位置の尺度
#3.1.1 算術平均
#算術平均(arithmetic mean) は、データX1, X2, Xn に対して,特に、標本から計算されたことを示すのに標本平均(sample mean) と呼ぶことがあり、R では関数mean で定義されています。
#データcars のspeed の平均を計算する
data(cars)
x<- span=""> cars$speed
mean(x)->
## [1] 15.4
#R の内部でどのようなことをしているかをみるためにはmethods を用います
methods(mean)
## [1] mean.Date mean.default mean.difftime mean.POSIXct mean.POSIXlt
mean.default #計算手法や他のオプションの設定が分かります。mean のヘルプファイルに記述されている事柄の確認ができます。
## function (x, trim = 0, na.rm = FALSE, ...)
## {
## if (!is.numeric(x) && !is.complex(x) && !is.logical(x)) {
## warning("argument is not numeric or logical: returning NA")
## return(NA_real_)
## }
## if (na.rm)
## x <- 1l="" be="" if="" is.na="" is.numeric="" length="" must="" n="" numeric="" of="" one="" stop="" trim="" x=""> 0 && n) {
## if (is.complex(x))
## stop("trimmed means are not defined for complex data")
## if (anyNA(x))
## return(NA_real_)
## if (trim >= 0.5)
## return(stats::median(x, na.rm = FALSE))
## lo <- -="" .internal="" 0x036b49b0="" 1="" bytecode:="" floor="" hi="" lo:hi="" lo="" mean="" n="" partial="unique(c(lo," sort.int="" trim="" x="">
## ->->
#3.1.2 幾何平均
#幾何平均(geometric mean) は、正の値のデータX1, X2
#平均物価上昇率、平均成長率の計算に用いられる。R には定義されていないのでコマンドprod(x)^(1/length(x)) を用いることになります
prod(x)^(1/length(x)) # x の幾何平均
## [1] 14.32501
##3.1.3 調和平均
#調和平均(harmonic mean) は、データX1, X2
# R には定義されていないのでコマンド1/sum(1/x)*length(x) を用いることになります。
1/sum(1/x)*length(x) ## x の調和平均
## [1] 12.96153
##3.1.4 重み付け平均
#データX1, X2,Xn を小さい順に並べたもの
n<- span=""> length(x);wgt<- span=""> rep(1,n);wgt[1]<- span=""> wgt[n]<- span=""> 0
sum(wgt*sort(x))/n #これは、重みwgt の第一成分と第n 成分をゼロとし、その他の重みを1 として、重み付け平均を計算しています->->->->
## [1] 14.82
#R には、weighted.mean という関数があり、データx と重みwt に対して
wt<- span=""> c(5, 5, 4, 1)/15
x <- span=""> c(3.7,3.3,3.5,2.8)
xm <- span=""> weighted.mean(x,wt)
xm->->->
## [1] 3.453333
##3.1.5 トリム平均
#n 個のデータを昇順に並べた順序統計量X(1), X(n)の上下のある割合を取り除いた観測値から算術平均を求めたものをトリム平均(刈り込み平均)という
#R ではmean(x, trim=α により計算され、trim=で取り除かれる割合α を計算しα ます。ここで、0 < α < 0:5。よって、α = 0 のときは算術平均と一致します
x<- span=""> cars$speed
mean(x,tirm=.1)->
## [1] 15.4
##3.1.6 中央値
#中央値(median)
median(x)
## [1] 15
##3.1.7 最頻値
#最頻値(mode) は、データの中で最も多くの頻度で発生した値であり、ヒストグラムを作成したときの山の一番高い階級の中央値として定義される。同じ高さの山があるときは山に対応したすべての値が最頻値となります
mode(x)
## [1] "numeric"
##3.1.8 最小値
min(x)
## [1] 4
##3.1.9 最大値
max(x)
## [1] 25
##3.1.10 下側ヒンジ
#下側ヒンジ(lower hinge) は、データX1, X2, Xn の中央値より小さな値の集まりの中央値として定義され、R では関数fivenumの2 番目の要素として与えられます
fivenum(x)
## [1] 4 12 15 19 25
fivenum(x)[2]
## [1] 12
#関数fivenum はデータセットの最小値、下側ヒンジ、中央値、上側ヒンジ、最大値の五つの値を同時に出力
##3.1.11 上側ヒンジ
#上側ヒンジ(upper hinge) は、データX1, X2, Xn の中央値より大きな値の集まりの中央値として定義され、R では関数fivenumの4 番目の要素として与えられます。
fivenum(x)[4]
## [1] 19
##3.1.12 第1 四分位点
#第1 四分位点(first quantile) は、データX1, X2, Xn の順序統計量X(1) X(2), X(n) の小さな方から25% にある値として定義され、R では関数summary の2 番目の要素として与えられます。boxplot において、次の第3 四分位点と併せて用いられていました。
##3.1.12 第1 四分位点
#第1 四分位点(first quantile) は、データX1, X2, Xn の順序統計量X(1) X(2), X(n) の小さな方から25% にある値として定義され、R では関数summary の2 番目の要素として与えられます。boxplot において、次の第3 四分位点と併せて用いられていました。
summary(x) ## x の要約値
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.0 12.0 15.0 15.4 19.0 25.0
#関数summary は最小値、第1 四分位点、中央値、平均、第3 四分位点、最大値を六つの値を同時に計算
##3.1.13 第3 四分位点
#第3 四分位点(third quantile) は、データX1, X2, Xn の順序統計量X(1), X(2), X(n) の小さな方から75% にある値として定義される。R では関数summary の5 番目の要素として与えられます。
summary(x)[5] # x の第3 四分位点
## 3rd Qu.
## 19
##3.2 散らばりの尺度##
##3.2.1 分散
#分散(variance) は、データX1, X2, Xn に対して、平均X からのXi の偏差(deviation)Xi- X の二乗和をn- 1 で割ったもの
#、R の関数var はこの式を計算しています。この分散を不偏分散とも呼ぶ。特に、抽出された標本から計算された分散を標本分散(sample variance) と呼ぶ。サンプルサイズn でなく、n - 1 で割っていることに注意
var(x)
## [1] 27.95918
#平均=157、分散=25 の正規乱数を5 個発生させ、この5 つの標本からの分散と不偏分散を計算することを1000 回繰り返すことを考える
H<- span=""> as.vector(0) # 偏差平方和を4 で割ったものを入れる
H1<- span=""> as.vector(0)# 偏差平方和を5 で割ったものを入れる
for(i in 1:1000){ # i の値を1 から順に1000 まで替えながら繰り返す
h<- span=""> rnorm(5,mean=157,sd=5) # 平均=157、分散=25 の正規乱数5 個発生
H[i]<- span=""> var(h) # 4 で割る
H1[i]<- span=""> var(h)*4/5 # 5 で割る
}
par(mfrow=c(2,2)) # 画面を2*2 に分ける
hist(H)
boxplot(H)
hist(H1)
boxplot(H1)->->->->->
par(mfrow=c(1,1)) # 画面を元の1*1 に戻す
summary(H)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2752 12.0200 20.9600 25.7200 34.8600 141.5000
summary(H1)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2201 9.6140 16.7700 20.5800 27.8900 113.2000
#上の要約値からH の平均は25 に近く、H1 の平均は20 に近いことが分かる。よって、データ数-1 で割った方が真の分散に近いもの得られる。これは数学的に証明できる事柄である。
##3.2.2 標準偏差
#標準偏差(standard deviation) は、分散の平方根
#、R ではsd によって計算されます。分散の測定単位が元の観測値の単位の二乗になるものに対して、標準偏差は観測値と同じ単位になるので、信頼区間、検定統計量、偏差値などの計算に利用される
sd(x)
## [1] 5.287644
sqrt(var(x))# 分散の平方根
## [1] 5.287644
#3.2.3 平均偏差
#平均偏差(mean deviation) は、平均X からXi の偏差Xi- X の絶対値のをn で割ったもの
#R ではsum(abs(x-mean(x)))/length(x) として計算
sum(abs(x-mean(x)))/length(x)
## [1] 4.336
##3.2.4 範囲
#範囲(range) は、最大値X(n) から引く最小値X(1) を引いたもの#
#データセットx に対してR の関数range(x) は最小値と最大値の組を与えるので、diff(range(x)) とすることで範囲が計算
range(x)
## [1] 4 25
diff(range(x)) # range(x) の差
## [1] 21
max(x)-min(x) # 最大値引く最小値
## [1] 21
##3.2.5 ヒンジ散布度
#ヒンジ散布度(hinge spread) は、上側ヒンジから下側ヒンジを引いたものとして定義
f<- span=""> fivenum(x)
f[4]-f[2]->
## [1] 7
##3.2.6 四分位範囲
#四分位範囲(interquantile range) は、第3 四分位点から第1 四分位点を引いたものとして定義され、R の関数IQR によって与えられます
IQR(x)
## [1] 7
#summary(x)[5]-summary(x)[2] によっても四分位範囲が求まります
##3.3 データの特性をみる量
#データX1, X2, Xn に対して、原点のまわりのk 次モーメント(moment)
##3.3.1 歪度
#わいど歪度(skew) とは、データX1, X2, Xn の形成する分布の非対称性を測る
#分子は平均のまわりの3 次モーメントであるから平均に対する非対称性を表し、0 に近いとき分布は対称であると考えたりします
#R では歪度を求める関数が定義されていないので、自分で定義することになります。function により、新しい関数を定義します。function 内で新たに用いる変数は作業変数となり、関数の外の値とは区別されます。library“e1071"を組み込むと、歪度の計算に関してskewness という関数を利用する
skew<- span=""> function(x){ # 関数skew の定義
m3<- span=""> sum((x-mean(x))^3)/length(x)
s3<- span=""> sqrt(var(x))^3
m3/s3
}
skew(x) # skew の値の出力->->->
## [1] -0.1105533
##3.3.2 尖度
#せんど尖度(kurtosis) とは、データX1, X2, Xn の形成する分布の尖り度を測る
#第一項の分子は平均のまわりの4 次モーメントで、正規分布を用いると第一項の値が3 であるので、3 と比較されています
#R では尖度を求める関数が定義されていないので、自分で定義することになります。library“e1071"を組み込むと、歪度の計算に関してkurtosis という関数を利用することが出来ます
#関数kurt の定義
kurt<- span=""> function(x){ # 関数kurt の定義
m4<- span=""> sum((x-mean(x))^4)/length(x)
s4<- span=""> var(x)^2
m4/s4-3
}
kurt(x) # kurt の値の出力->->->
## [1] -0.6730924
##3.3.3 変動係数
#変動係数(coefficient of variation)
#R では変動係数を求める関数が定義されていないので、自分で定義する
CV<- span=""> function(x) sd(x)/mean(x) # 関数CV の定義
CV(x) # CV の値の出力->
## [1] 0.3433535
##3.3.4 Gini の係数
#Gini の係数(Gini coefficient) 不平等度や集中度の指標として用いられる
#R では変動係数を求める関数が定義されていないので、定義する
#関数GI の定義#
GI<- span=""> function(x) { # 関数GI の定義。
n<- span=""> length(x)
y<- span=""> sort(x)
j<- span=""> seq(1,n)
2*sum(j*y)/(n^2*mean(x))-(n+1)/n
}
GI(x) # GI の値の出力。->->->->
## [1] 0.1933506
##3.4 データ間の関連
#対になっているデータ(Xi; Yi), (i = 1; 2; n) を考える。これは第i 番目の個体に対して、体重と身長を測定したときのように個体i について一組の観測値である
##3.4.1 共分散
#データ(Xi; Yi) の共分散(covariance),、R ではcov によって計算
cov(cars$speed,cars$dist)
## [1] 109.9469
##3.4.2 相関係数
#データ(Xi; Yi) の相関係数(correlation coefficient)
#R ではcor によって計算
#sXY はデータ(Xi; Yi) の共分散
cor(cars$speed,cars$dist)
## [1] 0.8068949
#履歴について#
#入力してきた履歴を見るのにはhistory() というコマンドを用います。
#history() # 全履歴の表示。