Rでクラスごとの記述統計を効率的に算出するお話

山田(2015)の第1章、第2章を読んでいたらクラスごとの記述統計を効率的に求める関数を見つけたので備忘録としてメモ

例えば、以下のような、クラスごと(5クラス)に集計したデータがあるとする。

このデータから、全体の平均値、標準偏差、最高点、最低点およびクラスごとの平均値、標準偏差、最高点、最低点を導き出したいとする。

Rにおいて上記のデータを導き出したい場合は、

を使うことが考えられるがかなり面倒そう。そこで、以下の2つの解決策を考える。

解決策1:psychパッケージのdescribeBy()を使う。

describeBy()は

と入力し、属性ごとの記述統計を算出することができる。例えば、上記データのclassごとにscoreの記述統計量を算出したい場合、以下のように入力する。

これで、各グループ(class 1からclass 5)の記述統計量が一発で算出された。超便利。ちなみに、n=データ数、mean=平均値、sd=標準偏差、median=中央値、min=最小値、max=最大値、skew=歪度、kurtosis=尖度、se=標準誤差

解決策2:tapply()を使う

tapply()は

とすることで、グループごとに算出したい統計量を一括で導き出すことができる。例えば、先程のデータでクラスごとの平均値を処理したい場合、以下のように入力する。

上記の結果の1,2,3,4,5はそれぞれクラス1,クラス2…を指す。つまり、クラス1の平均値は357点、クラス2の平均値は427点…ということがこの関数一つで算出された。超便利。

tapply()で扱う統計量は平均値以外でも使うことができる。標準偏差や最小値、最大値も以下の通り。

また、先程のpsychパッケージのdescribe()と組み合わせることもできる。

これで解決策1のdescribeBy()と同様、各クラスごとのデータ数、平均値、SD、最小値、最大値が一発で導き出すことができた。

まとめ

上のようなデータを、csvファイルから読み込んで、Rを用いてクラスごとに分析したい場合、解決策1、解決策2ともに以下の3行でOKという話。

解決策1の場合

解決策2の場合