心理学実験データの解析例

従属変数を実験条件ごとに平均する

以下のような形式のファイルを解析したいとする [サンプルファイル]。

属変数はRT,実験条件は参加者内要因2x2

Frequency:high, low

Congruency:congruent, incongruent

その他の列は呈示刺激(単語)の属性

とりあえず一人分のデータファイルを処理する

準備とデータの読み込み

# ワーキングディレクトリの設定

# メニューバーからSession → Set Working Directory → Choose Directoryでもよい

# csvデータファイルが存在するディレクトリを設定する(個々人によってパスが異なるので注意)

setwd("C:/Users/xxxxxx/xxxxxx/xxxxxx/xxxxxx/")


# 一度dplyrのパッケージをインストールしてから実行する

# インストールはRStudioでは「Tools→Install packages..」で可能

# 複数の条件を指定したフィルタリングに使用する

library(dplyr)


# データの読み込み(一人分

# 古いwindowsのデフォルトがShift-JIS

# ファイルの読み込みがうまくいかない場合には(NAが出るなど),fileEncoding = "Shift-JIS"を削除する

# あるいは,fileEncoding = "UTF-8"とする

data <- read.csv("001_1_2023-05-16 13_43_49.csv", fileEncoding = "Shift-JIS")

# コンソールに出力して読み込めているか確認

print(data)

各条件の値を取得する(一人分

# dplyrパッケージのfilter関数を使って,ある条件に当てはまるデータを取得する

a1 <- filter(data, Frequency.group=="high", Congruency=="congruent")

a2 <- filter(data, Frequency.group=="high", Congruency=="incongruent")

a3 <- filter(data, Frequency.group=="low", Congruency=="congruent")

a4 <- filter(data, Frequency.group=="low", Congruency=="incongruent")

各条件の平均値を取得する(一人分

m1 <- mean(a1$RT..ms.)

m2 <- mean(a2$RT..ms.)

m3 <- mean(a3$RT..ms.)

m4 <- mean(a4$RT..ms.)


# 4条件のデータをまとめる

one_sub <- c(m1,m2,m3,m4)

# コンソールに出力して確認

print(one_sub)

# コンソールに出力して確認

print(one_sub)

csvファイルに出力する(一人分のファイル)

# 出力ファイル名はoutput.csvとなっている。適宜変更すること。

write.table(t(one_sub),"output.csv",row.names=FALSE, sep = ",", col.names=c("High-Cong","High-Incong","Low-Cong","High-Incong"))

上の作業を参加者数(データファイル)分一括処理する


# 新しいセッションを始める場合には,ライブラリの読み込みを忘れないこと

# セッションを継続している場合には読み込みは不要

library(dplyr)


# 現在のディレクトリのパスを取得(データが存在するディレクトリを作業ディレクトリに指定している前提)

# 作業ディレクトリとデータのディレクトリが異なる場合などには,getwd()を使わず,直接文字列としてディレクトリを指定するのでもOK

path <- getwd()


# ファイル名に「2023」を含むファイルを取得(なので,余計なファイルは別ディレクトリに移動させておく!

files <- list.files(path, pattern="2023")


# 被験者数(ファイル数)

n <- length(files)


# 変数を用意

all_sub <- matrix(0, nrow = n, ncol = 4)

print(all_sub)


for (i in 1:n) {

  # データの読み込み

  # 作業ディレクトリにデータがない場合,paste(path,"/",files[i], sep="")のような形でファイル名を指定するのでもOK

  # ファイルの読み込みがうまくいかない場合にはEncodingを変える(一人分の解析を参照)

  data <- read.csv(files[i], fileEncoding = "Shift-JIS")

  

  # 各条件の値を取得する

  a1 <- filter(data, Frequency.group=="high", Congruency=="congruent")

  a2 <- filter(data, Frequency.group=="high", Congruency=="incongruent")

  a3 <- filter(data, Frequency.group=="low", Congruency=="congruent")

  a4 <- filter(data, Frequency.group=="low", Congruency=="incongruent")

  

  # 各条件の平均値を取得する

  m1 <- mean(a1$RT..ms.)

  m2 <- mean(a2$RT..ms.)

  m3 <- mean(a3$RT..ms.)

  m4 <- mean(a4$RT..ms.)


  # 4条件のデータをまとめる

  all_sub[i,] <- c(m1,m2,m3,m4)

}


# 確認する

print(all_sub)

          

# 出力する

write.table(all_sub,"output_ALL.csv",row.names=FALSE, sep = ",", col.names=c("High-Cong","High-Incong","Low-Cong","High-Incong"))

↑で出力されたファイルはanovakunでそのまま読み込める形になっている(被験者内要因計画)。

output_ALL.csvを使用して分散分析をする

# anovakunのソースファイルを読み込む

source("XXXXXXXXX/anovakun_XXX.txt")

# データを読み込む

data <- read.csv("output_ALL.csv",header=F)

# anovakunを実行

anovakun(data,'sAB',2,2,holm=T,peta = T)

# 平均値一括処理と同じセッション内であれば,そのままall_subを使って解析も可能

anovakun(all_sub,'sAB',2,2,holm=T,peta = T)