例として,Rに組み込まれているcars$speed
データを使う(自分で同じことをcars$dist
でやってみよう).summary
は,第0四分位数(=最小値),第1四分位数,第2四分位数(=中央値),第3四分位数,第4四分位数(=最大値)と平均値を返す.
summary(cars$dist)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.00 26.00 36.00 42.98 56.00 120.00
範囲を算出するにはrange
を使うか,max
とmin
を使う.
range(cars$speed)[2]-range(cars$speed)[1]
## [1] 21
max(cars$speed)-min(cars$speed)
## [1] 21
四分位数を返すquantile
を使って,四分位範囲を算出する.
q_speed<-quantile(cars$speed)
unname(q_speed[4]-q_speed[2])
## [1] 7
箱ひげ図はboxplot
で描ける.
boxplot(cars$speed)
ヒストグラム(赤色縦線が各分位数).
hist(cars$speed,breaks = 15,freq = FALSE, col="skyblue",main = "",axes = FALSE)
abline(v = q_speed,col="red",lty=2,lwd=2)
axis(side = 1, at = q_speed)
axis(side = 2)
経験分布関数(赤色点線が各分位数).
plot(sort(cars$speed),(1:length(cars$speed))/length(cars$speed),type="s",
xlab="x",ylab="F(x)",axes = FALSE)
segments(0,0.25,q_speed[2],0.25,col="red",lty=2,lwd=2)
segments(q_speed[2],0.25,q_speed[2],0,col="red",lty=2,lwd=2)
segments(0,0.5,q_speed[3],0.5,col="red",lty=2,lwd=2)
segments(q_speed[3],0.5,q_speed[3],0,col="red",lty=2,lwd=2)
segments(0,0.75,q_speed[4],0.75,col="red",lty=2,lwd=2)
segments(q_speed[4],0.75,q_speed[4],0,col="red",lty=2,lwd=2)
segments(0,1,q_speed[5],1,col="red",lty=2,lwd=2)
segments(q_speed[5],1,q_speed[5],0,col="red",lty=2,lwd=2)
axis(side = 1, at = q_speed)
axis(side = 2, at = c(0,0.25,0.5,0.75,1))
Rには分散の関数として,var
が用意されている.ただし,var
はn-1で割る「不偏標本分散」である.
var(cars$speed)
## [1] 27.95918
mean_speed<-mean(cars$speed)
n<-length(cars$speed)
sum((cars$speed-mean_speed)^2)/(n-1)
## [1] 27.95918
sum((cars$speed-mean_speed)^2)/n
## [1] 27.4
mean(cars$speed^2)-mean(cars$speed)^2
## [1] 27.4
nで割る分散の関数は用意されていないので,自分でvar_p
という関数を定義する.
var_p<-function(x, na.rm = TRUE) {
if (!na.rm && any(is.na(x)))
return(NA_real_)
x<-na.omit(x)
m<-mean(x)
n<-length(x)
sum((x-m)^2)/n
}
var_speed<-var_p(cars$speed)
var_speed
## [1] 27.4
標準偏差も同様に,組み込み関数として用意されているsd
はn-1で割る定義である.
sd(cars$speed)
## [1] 5.287644
sqrt(sum((cars$speed-mean_speed)^2)/(n-1))
## [1] 5.287644
sqrt(sum((cars$speed-mean_speed)^2)/n)
## [1] 5.234501
こちらも自分で,nで割る標準偏差の関数を定義する.
sd_p<-function(x, na.rm = TRUE) {
if (!na.rm && any(is.na(x)))
return(NA_real_)
x<-na.omit(x)
m<-mean(x)
n<-length(x)
sqrt(sum((x-m)^2)/n)
}
sd_speed<-sd_p(cars$speed)
sd_speed
## [1] 5.234501
データを昇順に並べる(赤色横線は平均).
barplot(sort(cars$speed), col="skyblue",ylim = c(0,max(cars$speed)))
abline(h = mean_speed,col="red",lty=1,lwd=2)
平均からの偏差のグラフ(赤色横線は偏差の平均).
dist_from_mean<-cars$speed-mean_speed
barplot(sort(dist_from_mean), col="skyblue")
abline(h = mean(dist_from_mean),col="red",lty=1,lwd=2)
平均からの偏差平方のグラフ(赤色横線は偏差平方の平均,つまり分散).
distsq_from_mean<-(cars$speed-mean_speed)^2
barplot(distsq_from_mean, col="skyblue")
abline(h = var_speed,col="red",lty=1,lwd=2)
最後にもう一度,cars$speed
のヒストグラム(赤色縦線が平均,点線が1σ範囲).
hist(cars$speed,breaks = 15, freq = FALSE, col="skyblue")
abline(v = mean_speed,col="red",lty=1,lwd=2)
abline(v = mean_speed+sd_speed,col="red",lty=2,lwd=2)
abline(v = mean_speed-sd_speed,col="red",lty=2,lwd=2)