7.13 平均
改めて平均を定義する.
Definition 7.1 (平均) 平均とは,観測されたデータ\(x_{1},\ldots,x_{n}\)に対して,
x = 1n _{i=1}^{n}
で計算される量である. また,観測データの行列\(X= (\boldsymbol x^{(1)}, \boldsymbol x^{(2)}, \ldots, \boldsymbol x^{(m)})^\top\)に対して,それぞれの列に対する平均を計算したベクトル
X = (x^{(1)}, x^{(2)}, , x{(m)})
を平均ベクトルという.
7.13.1 Rでの計算
Rではmean
という関数を利用することで平均を計算することができる.
mean(iris$Sepal.Length)
## [1] 5.843333
例えば,iris
には4つの量的変数があり,それぞれの平均を計算したいなどという場合,
最も簡単な方法はsummary
関数を利用することである.
summary(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width
## Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
## 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
## Median :5.800 Median :3.000 Median :4.350 Median :1.300
## Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
## 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
## Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
## Species
## setosa :50
## versicolor:50
## virginica :50
##
##
##
平均以外に多くの情報が得られるが,各列に対して平均をすぐに計算することができる.
7.13.2 グループ化された平均
次に,質的変数でグループ化した平均を計算する方法を紹介する.
tidyverse
を利用すると次のように実装できる.
%>%
iris as_tibble() %>%
group_by(Species) %>%
summarise(across(c(Sepal.Length, Sepal.Width), list(mean=mean)))
## # A tibble: 3 × 3
## Species Sepal.Length_mean Sepal.Width_mean
## <fct> <dbl> <dbl>
## 1 setosa 5.01 3.43
## 2 versicolor 5.94 2.77
## 3 virginica 6.59 2.97
また,列を全て指定したい場合はacross(everythingu(),...)
とするのが便利である.
%>%
iris as_tibble() %>% # tidyverseでより扱いやすい tibble という型に変換する
group_by(Species) %>%
summarise(across(everything(), list(mean=mean)))
## # A tibble: 3 × 5
## Species Sepal.Length_mean Sepal.Width_mean Petal.L…¹ Petal…²
## <fct> <dbl> <dbl> <dbl> <dbl>
## 1 setosa 5.01 3.43 1.46 0.246
## 2 versicolor 5.94 2.77 4.26 1.33
## 3 virginica 6.59 2.97 5.55 2.03
## # … with abbreviated variable names ¹Petal.Length_mean,
## # ²Petal.Width_mean
tidyverse
のライブラリ群の記法は,通常のRの記法とは異なるため,ややとっつきにくいが,
慣れると大変便利なので是非触れてみて欲しい.
Exercise 7.7 (平均の計算) 以下で利用するAirPassengers, airquality
はRのデフォルトで提供されているデータセットである.
AirPassengers
のデータセットについて各列に対する平均を計算せよ.airquality
のデータセットについてMonth
ごとにOzon, Solar.R, Wind, Temp
の平均を計算せよ.