purrr の map を使って検定を繰り返す
ずっとKJ法とかポストイットとかを使ってアンケートデータと格闘しているのでまったく統計分析はしていませんでした。少し目処が立ったので、次の研究のための予備調査を兼ねて昔のデータを見直すことにしました。
こんなデータがあるとします。
Xが性別みたいなカテゴリカル変数で、A~Dまでは7件法のデータだとします。A~Dでそれぞれt検定を行いたいのですが
t.test(hoge$A ~ hoge$X)
t.test(hoge$B ~ hoge$X)
・・・
と繰り返すのはちょっとイヤで何か簡単にt検定を繰り返すことはできないかと方法を探しました(今回のように5回くらいならガマンしますが、今後10とか20になりそうだったから)。
繰り返しだから purrr を使えばなんとかなるだろうと検索しても、なかなかお目当てのものが出てこないのでここにメモします。たぶん、検索のやり方が下手だったのだろうと思います。
実行
str(hoge) # データを確認 Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 12 obs. of 5 variables: $ X: num 1 2 2 1 1 2 1 1 2 2 ... $ A: num 4 2 1 1 4 2 3 5 3 4 ... $ B: num 7 7 3 3 1 2 3 5 3 6 ... $ C: num 7 4 6 7 3 5 6 7 6 1 ... $ D: num 1 4 7 4 5 3 2 3 2 7 ... hoge$X <- as.factor(hoge$X) # Xを因子化
ここまでで下準備OK。流れとしては
1. データからXをいったん省いて分析対象A~Dに絞り、
2. map にA~Dを流し込み、
3. t検定を繰り返し実行し、
4. 結果を kekka に保存する。
library(tidyverse) # library(purrr)もOK kekka <- hoge %>% select(-X) %>% map(~t.test(. ~hoge$X)) # t.test( の次の . が流し込まれるデータ)
無事できました。これでデータが10とか20になっても大丈夫。もっと上手な(オシャレな)方法があるのだと思います。あれば教えてください。