Knowledge As Practice

JAIST(東京)で Transformative Service Research に取り組んでる社会人大学院生の研究・勉強メモ

purrr の map を使って検定を繰り返す

ずっとKJ法とかポストイットとかを使ってアンケートデータと格闘しているのでまったく統計分析はしていませんでした。少し目処が立ったので、次の研究のための予備調査を兼ねて昔のデータを見直すことにしました。

 
こんなデータがあるとします。

f:id:hikaru1122:20180918210302p:plain

 
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になっても大丈夫。もっと上手な(オシャレな)方法があるのだと思います。あれば教えてください。

参考(やっぱりあった)

https://sebastiansauer.github.io/looping-purrr/

クリエイティブ・コモンズ・ライセンス
この 作品 は クリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。