ミュラーリヤー実験

>>>練習する(角度2条件の上昇・下降系列1回ずつ、計4回です)

>>>実験を実施する(角度5条件 x 上昇・下降 x 2回反復で20回です)

教示修正版(長い方を選ぶ)。

>>>練習する(角度2条件の上昇・下降系列1回ずつ、計4回です)

>>>実験を実施する(角度5条件 x 上昇・下降 x 2回反復で20回です)

背景

  • 錯視とは・・・
    • 知覚と物理的な性質の乖離。
    • さまざまな幾何学錯視がある。
  • ミューラリヤー錯視の紹介
    • 先の両端の矢羽によって長さが変わる。
    • 内向きの場合は短く、外向きの場合は長く見える。
  • 実験の目的
    • ミュラーリヤー錯視における矢羽の角度の効果を追試。

方法

  • 標準刺激(矢羽付き横棒)と比較刺激(横棒)の長さを比較して、比較刺激が標準刺激に比べて長いか短いかを判断する、という実験です。
  • 標準刺激は左側、比較刺激は右側に出でてきます。

手続き

1要因の被験者内計画です。

  • 矢羽の角度 (5水準)
    • 60, 120, 180, 240, 300°
    • それぞれの条件に対して、上昇系列と下降系列を2回ずつ繰り替えします。
    • 全部で20系列の閾値測定を行います。

測定法

  • 極限法(上下法・2択)
    • 上昇系列:比較刺激は最初は短く、だんだん長くなります。「長い」反応が出現したら系列終了です。
    • 下降系列:比較刺激は最初は長く、だんだん短くなります。「短い」反応が出現したら系列終了です。

分析

サンプルデータ

  • sampleData.xlsx を置いておきます。
  • 内容は以下のとおりです。

データ定義

  • rt: 反応時間。この実験では無視してOK
  • sequence_index: 系列のインデクス(0-indexed)
  • response_index: 系列内の反応のインデクスです(0-indexed)
  • std_angle: 比較刺激の矢場の角度。
  • up_down: 上昇系列 or 下降系列
  • comp_len: 比較刺激の長さ。
  • response: 反応。

分析方法

  • 見てわかるとおり、上昇系列では”long”、下降系列では”short”の反応が出たら系列終了です。
  • 各系列のPSEは、各系列の最後の長さと、最後から2番目の長さの平均を取ればいいです。
  • 各系列のPSEを算出したあとに、条件ごとのPSEの平均を計算します。
    • これが、各被験者の代表値なので、これを提出してもらうのが良さそうです。
  • この計算を行うRのコードを載せておきます。
    • 結果をエクセルに貼り付けて、sampleData.xlsxというファイル名(これは任意)で保存してあるとします。
library(readxl) # エクセルファイルの読み込みに使う。
dt = read_excel("sampleData.xlsx") # 読み込む
head(dt) # データの構造を確認しましょう。
## # A tibble: 6 × 7
##       rt sequence_index response_index std_angle up_down comp_len response
##    <dbl>          <dbl>          <dbl>     <dbl> <chr>      <dbl> <chr>   
## 1 1388.               0              0       300 down         230 long    
## 2   45.1              0              1       300 down         220 long    
## 3  295.               0              2       300 down         210 long    
## 4  891.               0              3       300 down         200 long    
## 5 1257.               0              4       300 down         190 long    
## 6  455.               0              5       300 down         180 short
str(dt) # データの構造を確認しましょう。
## tibble [165 × 7] (S3: tbl_df/tbl/data.frame)
##  $ rt            : num [1:165] 1388.2 45.1 294.5 891.1 1256.6 ...
##  $ sequence_index: num [1:165] 0 0 0 0 0 0 1 1 1 1 ...
##  $ response_index: num [1:165] 0 1 2 3 4 5 0 1 2 3 ...
##  $ std_angle     : num [1:165] 300 300 300 300 300 300 60 60 60 60 ...
##  $ up_down       : chr [1:165] "down" "down" "down" "down" ...
##  $ comp_len      : num [1:165] 230 220 210 200 190 180 100 110 120 130 ...
##  $ response      : chr [1:165] "long" "long" "long" "long" ...
summary(dt) # データの要約に変なところがないか確認しましょう。
##        rt          sequence_index  response_index     std_angle    
##  Min.   :  45.15   Min.   : 0.00   Min.   : 0.000   Min.   : 60.0  
##  1st Qu.: 211.60   1st Qu.: 5.00   1st Qu.: 2.000   1st Qu.:120.0  
##  Median : 454.75   Median :11.00   Median : 4.000   Median :180.0  
##  Mean   : 581.47   Mean   :10.13   Mean   : 3.897   Mean   :181.1  
##  3rd Qu.: 807.63   3rd Qu.:15.00   3rd Qu.: 6.000   3rd Qu.:240.0  
##  Max.   :2663.86   Max.   :19.00   Max.   :11.000   Max.   :300.0  
##    up_down             comp_len     response        
##  Length:165         Min.   :100   Length:165        
##  Class :character   1st Qu.:130   Class :character  
##  Mode  :character   Median :160   Mode  :character  
##                     Mean   :164                     
##                     3rd Qu.:190                     
##                     Max.   :230
# 各系列のPSEを抽出します。

# ホントは1行で書けますが、あえてtidyverseは使わずbase functionで行きます。
PSE = c()
for (si in unique(dt$sequence_index)) {
  tmp = subset(dt, sequence_index == si)
  pse = mean(tail(tmp, 2)$comp_len) # 最後の2行のcomp_lenの平均
  PSE = rbind(PSE, data.frame(std_angle = tmp$std_angle[1], pse = pse))
}

knitr::kable(PSE) # データの構造を確認しましょう
std_angle pse
300 185
60 135
120 145
240 175
240 175
300 175
120 145
240 175
180 145
120 135
60 135
60 145
180 145
60 125
300 185
300 195
120 145
180 155
240 155
180 155
# 各条件ごとの平均値を計算します。
result = aggregate(pse ~ std_angle, data = PSE, FUN = mean)
knitr::kable(result) 
std_angle pse
60 135.0
120 142.5
180 150.0
240 170.0
300 185.0
# 図示
library(ggplot2)
ggplot(result, aes(std_angle, pse)) + 
  geom_hline(yintercept = 150, colour = "gray", linetype = "dashed")+
  geom_point() + geom_line() + 
  theme_classic()

以上が、各被験者の集計です。

  • 実際の授業では、resultの中身(条件ごとのPSEの平均)を提出してもらって、複数の人のデータを使ってHADで1要因Repeated Measures ANOVAで解析するのが一般的だと思います。

考察のポイント

後でかく

引用文献

さまざまな閾値測定

内向(60°)と外向(300°)の2条件について、さまざまな閾値測定法での実験です。

  1. 最初に教示画面が出てきます。
  2. スペースキーを押すと、実験が始まります。
  3. 実験終了後、データファイル(csvファイル)が自動的にダウンロードされます。ダウンロードされない場合は、同じ内容が画面に表示されるので、その内容をコピペして保存してください。

全実験に共通のパラメータ

  • 背景領域
    • 色:グレイ
    • 大きさ:600 x 600 px
  • 標準刺激(左側):矢羽あり
    • 矢羽の角度:内向(60°)と外向(300°)
    • 主線(横線)の長さ:150 px
    • 矢羽の長さ:50 px
    • 中心の横位置:背景領域中心から左に150 px
    • 中心の縦位置:背景領域上部から100 px
    • 色:黒
    • 線の太さ:3 px
  • 比較刺激(右側):矢羽なし
    • 中心の横位置:背景領域中心から右に150 px
    • 中心の縦位置:背景領域上部から200 px
    • 色:黒
    • 線の太さ:3 px

恒常法

比較刺激(右側)がランダムな長さで提示されます。 比較刺激が標準刺激より長いか短いか判断します。

  • 比較刺激の方が長い:右矢印キー
  • 比較刺激の方が短い:左矢印キー

読み替えると「左右の刺激のうち長い方を選んで左右矢印キーで回答する」ということです。こちらの方が反応のための認知的負荷が低いように思います。

パラメータなど

  • 比較刺激の長さ:14段階(90 px から 220 px まで10 px刻み)。
  • 繰り返し:各条件10回(総試行数:2 x 14 x 10 = 280)
  • ITI(反応から次の刺激が出るまで):100 ms
  • 反応するまで刺激を提示。
  • データファイル名:ML-constant.csv

データ

1試行=1行形式で、281行(1行目はタイトル行) x 4列のcsvファイルです。

  • rt: 反応時間
  • response: 反応(左右矢印のいずれか)
  • std_angle: 60なら内向図形、300なら外向図形
  • comp_len: 比較刺激の長さ

>>>恒常法実験を実施する

恒常法(角度4条件)

  • 上の恒常法と同じですが、角度条件の水準が増えています(60, 120, 240, 300)。

  • 2x2の2要因計画となります。

  • 向き

    • 内向(60, 120)
    • 外向(240, 300)
  • 主線との角度の大きさ

    • 小(60, 300 = 60°)
    • 大(120, 240 = 120°)

>>>恒常法実験(角度4条件)を実施する

極限法

比較刺激(右側)の長さが徐々に変化します。 標準刺激と比較刺激の長さが同じになったと思ったらスペースキーを押します。 長い→短いに変化する下降系列と短い→長いに変化する上昇系列があります。

パラメータなど

  • 比較刺激の変化量:10 px
  • 比較刺激の変化のタイミング:2秒ごとに、上昇系列なら長く、下降系列なら短くなります。
  • 比較刺激の初期値:50 px (上昇系列)/ 250 px(下降系列)
  • 繰り返し:上昇系列、下降系列それぞれ4回(総試行数:2 x 2 x 4 = 16)
  • ITI(反応から次の刺激が出るまで):250 ms
  • データファイル名:ML-limit.csv

データ

1試行=1行形式で、17行(1行目はタイトル行) x 4列のcsvファイルです。

  • rt: 反応時間
  • std_angle: 60なら内向図形、300なら外向図形
  • up_down: 上昇系列か下降系列か
  • comp_len: 反応時の比較刺激の長さ(=PSE)

>>>極限法実験を実施する

調整法

比較刺激(右側)の長さが標準刺激の長さと同じくらいに見えるように、上下矢印キーで比較刺激の長さを変化させて、スペースキーで回答します。 最初に長めの刺激がでる場合と、最初に短めの刺激が出る場合があります。

パラメータなど

  • 比較刺激の変化量:10 px
  • 比較刺激の初期値:半分の試行は50 px、残り半分は250 px(順番はランダム)
  • 繰り返し:外向図形、内向図形それぞれ10試行(総試行数:2 x 10 = 20)
  • ITI(反応から次の刺激が出るまで):250 ms
  • データファイル名:ML-adjustment.csv

データ

1試行=1行形式で、21行(1行目はタイトル行) x 4列のcsvファイルです。

  • rt: 反応時間
  • std_angle: 60なら内向図形、300なら外向図形
  • up_down: 上昇系列か下降系列か
  • comp_len: 反応時の比較刺激の長さ(=PSE)

>>>調整法実験を実施する

調整法(角度5条件)

  • 上の調整法と同じですが、角度条件の水準が増えています(60, 120, 180, 240, 300)。

>>>調整法実験(角度5条件)を実施する

マグニチュード推定法

比較刺激と標準刺激を見比べて、比較刺激(右側)を100とした時の標準刺激の長さを回答します。上下矢印キーで数字を調整して、スペースキーで回答します。

パラメータなど

  • 繰り返し:外向図形、内向図形それぞれ1試行(総試行数:2)
  • データファイル名:ML-magest.csv

データ

1試行=1行形式で、3行(1行目はタイトル行) x 3列のcsvファイルです。

  • rt: 反応時間
  • std_angle: 60なら内向図形、300なら外向図形
  • comp_len_resp: 回答した数字

>>>マグニチュード推定法実験を実施する