1 緒論

知覺組織(Perceptual Organization)為將分散的物件組織成一個完整物體的能力。Johansson (1973,1975)過去曾透過光點做為刺激材料,將光點裝設在人體的關節處並在暗室進行實驗,發現當光點在移動時,受試者可以將光點變化建構成一個有意義的表徵,而當光點沒有移動時,靜止的光點卻不能傳達出有意義的圖像。

本研究同樣想要以光點分布探討人類對動作知覺的有效性,受試者必須判斷螢幕呈現的光點動作類型屬於人類或是動物,而光點呈現方式分為動態光點變化或靜態光點圖像,實驗採對抗平衡,有一半的學生會先進行動態光點作業再來是靜態光點作業,另一半學生則相反。研究假設看到動態光點變化反應時間較看到靜態光點圖像短,此外,受試者判斷人類動作的正確率比不是人類動作還要高。

2 研究方法

2.1 受試者

受試者為58位大學生,視力皆為正常或矯正後正常。

2.2 實驗設備

本研究刺激材料皆呈現在24吋電腦螢幕,螢幕解析度為1980x1020。使用E-prime 2.0收集受試者作答反應時間及正確率等。

2.3 實驗設計

本研究為2x2完全受試者內實驗設計,操弄的變項有光點呈現方式(動態或靜態)及光點動作類型(動物或人類)。受試者皆需要完成動態及靜態光點呈現作業,在光點動態呈現作業中,動物及人類光點動作類型各有10種刺激材料,每種刺激材料皆會重複1次,共40次嘗試,刺激材料為隨機出現。光點靜態呈現作業也是使用相同數量及種類的刺激材料,以及有相同的嘗試次數。

2.4 實驗流程

受試者完成同意書之後,先輸入學號並等待螢幕出現指導語,接著依照主試者的指示進行6次練習,練習階段完成後若沒有疑問便開始正式實驗。每個嘗試開始進行時會先出現800毫秒的凝視點,接著刺激材料在螢幕上顯示的時間則無限時,受試者若認為螢幕上的光點是人類動作則按下鍵盤z鍵,若認為是動物動作則按下鍵盤/鍵,做出反應後會出現1000毫秒ISI,才會進行下一個嘗試次。

3 結果

##匯入資料
dta <- read.csv("PerceptionEXP2019.csv")
head(dta)
          EXP   Task Subject   Type Item ACC   RT
1 BioMotion01 Motion       1 Animal  A01   1 1612
2 BioMotion01 Motion       1 Animal  A01   1  933
3 BioMotion01 Motion       1 Animal  A02   1 1706
4 BioMotion01 Motion       1 Animal  A02   1  892
5 BioMotion01 Motion       1 Animal  A03   1 1820
6 BioMotion01 Motion       1 Animal  A03   1 3970
str(dta)
'data.frame':   4640 obs. of  7 variables:
 $ EXP    : chr  "BioMotion01" "BioMotion01" "BioMotion01" "BioMotion01" ...
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ ACC    : int  1 1 1 1 1 1 0 0 1 1 ...
 $ RT     : int  1612 933 1706 892 1820 3970 1550 1925 2363 1639 ...

3.1 正確率分析

#擷取包含Task.Subject.Type.Item.ACC的資料
dta_ACC <- dta[,c("Task","Subject","Type","Item","ACC")]
head(dta_ACC)
    Task Subject   Type Item ACC
1 Motion       1 Animal  A01   1
2 Motion       1 Animal  A01   1
3 Motion       1 Animal  A02   1
4 Motion       1 Animal  A02   1
5 Motion       1 Animal  A03   1
6 Motion       1 Animal  A03   1
str(dta_ACC)
'data.frame':   4640 obs. of  5 variables:
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ ACC    : int  1 1 1 1 1 1 0 0 1 1 ...
#計算不同Task及Type下的正確率平均值
#Group.1=Task, Group.2=Type, x=ACCmean
aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Task,dta_ACC$Type),mean)
  Group.1 Group.2        x
1  Motion  Animal 0.797414
2  Static  Animal 0.700000
3  Motion   Human 0.913793
4  Static   Human 0.778448
#計算不同Task及Type下的正確率標準差
#Group.1=Task, Group.2=Type, x=ACCsd
aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Task,dta_ACC$Type),sd)
  Group.1 Group.2        x
1  Motion  Animal 0.402100
2  Static  Animal 0.458455
3  Motion   Human 0.280790
4  Static   Human 0.415470
#儲存資料及重新命名項目名稱
dta_ACC_mean <- aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Task,dta_ACC$Type),mean)
names(dta_ACC_mean)<-c("Task","Type","mean") 

dta_ACC_sd <- aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Task,dta_ACC$Type),sd)
names(dta_ACC_sd)<-c("Task","Type","sd") 
#合併正確率平均值及標準差資料及儲存資料
dta_ACC_merge <- merge(x=dta_ACC_mean,y=dta_ACC_sd,all=TRUE)
#繪製直方圖
ggplot(data = dta_ACC_merge, aes(x = Task, y = mean, fill = Type)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9))+
  labs(x="Task",y="ACC")+
theme_minimal()

-光點以動態呈現的正確率均比靜態呈現高,且對於判斷為人類動作正確率也比動物高。其中以動態呈現人類動作的平均正確率最大(M=0.91,SD=0.28),靜態呈現動物動作的平均正確率最小(M=0.70,SD=0.46)。

#擷取Task=Motion的數據
dta_ACC_M <-dta_ACC[dta_ACC$Task=='Motion',]
head(dta_ACC_M)
    Task Subject   Type Item ACC
1 Motion       1 Animal  A01   1
2 Motion       1 Animal  A01   1
3 Motion       1 Animal  A02   1
4 Motion       1 Animal  A02   1
5 Motion       1 Animal  A03   1
6 Motion       1 Animal  A03   1
str(dta_ACC_M)
'data.frame':   2320 obs. of  5 variables:
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ ACC    : int  1 1 1 1 1 1 0 0 1 1 ...
#在動態光點作業中,每位受試者的平均正確率
aggregate(dta_ACC_M$ACC, by=list(type=dta_ACC_M$Subject),mean)
   type     x
1     1 0.825
2     2 0.900
3     3 0.975
4     4 0.925
5     5 0.875
6     6 0.925
7     7 0.875
8     8 0.925
9     9 0.900
10   10 0.900
11   11 0.800
12   12 0.900
13   13 0.850
14   14 0.700
15   15 0.850
16   16 0.850
17   17 0.925
18   18 0.950
19   19 0.975
20   20 0.925
21   21 0.925
22   22 0.850
23   23 0.800
24   24 0.800
25   25 0.825
26   26 0.800
27   27 0.850
28   28 0.875
29   29 0.925
30   30 0.900
31   31 0.925
32   32 0.825
33   33 0.875
34   34 0.950
35   35 0.950
36   36 0.925
37   37 0.675
 [ reached 'max' / getOption("max.print") -- omitted 21 rows ]
#計算在動態光點作業中,每個刺激材料的正確率平均值
#type=Item, x=ACCmean
aggregate(dta_ACC_M$ACC, by=list(type=dta_ACC_M$Item),mean)
   type        x
1   A01 0.974138
2   A02 0.965517
3   A03 0.698276
4   A04 0.517241
5   A05 0.543103
6   A06 0.750000
7   A07 0.965517
8   A08 0.931034
9   A09 0.681034
10  A10 0.948276
11  H01 0.896552
12  H02 0.956897
13  H03 0.982759
14  H04 0.982759
15  H05 0.793103
16  H06 0.887931
17  H07 0.948276
18  H08 0.905172
19  H09 0.939655
20  H10 0.844828
#計算在動態光點作業中,每個刺激材料的正確率標準差
#type=Item, x=ACCsd
aggregate(dta_ACC_M$ACC, by=list(type=dta_ACC_M$Item),sd)
   type        x
1   A01 0.159412
2   A02 0.183257
3   A03 0.460998
4   A04 0.501871
5   A05 0.500300
6   A06 0.434891
7   A07 0.183257
8   A08 0.254495
9   A09 0.468098
10  A10 0.222430
11  H01 0.305865
12  H02 0.203971
13  H03 0.130734
14  H04 0.130734
15  H05 0.406838
16  H06 0.316820
17  H07 0.222430
18  H08 0.294248
19  H09 0.239158
20  H10 0.363640
#儲存資料及重新命名項目名稱
dta_ACC_M_meanI <- aggregate(dta_ACC_M$ACC, by=list(type=dta_ACC_M$Item),mean)
names(dta_ACC_M_meanI)<-c("Item","mean") 

dta_ACC_M_sdI <- aggregate(dta_ACC_M$ACC, by=list(type=dta_ACC_M$Item),sd)
names(dta_ACC_M_sdI)<-c("Item","sd")
#合併正確率平均值及標準差資料及儲存資料
dta_ACC_merge2 <- merge(x=dta_ACC_M_meanI,y=dta_ACC_M_sdI,all=TRUE)
#繪製長條圖
ggplot(data = dta_ACC_merge2, aes(x = Item, y = mean)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9),color='orange')+
  labs(x="Item",y="ACC",subtitle='Motion Task')+
theme_minimal()

-在動態光點作業中,其中以人類動作中的H03及H04平均正確率最大(M=0.98,SD=0.13),動物動作的A04平均正確率最小(M=0.52,SD=0.50)。

#擷取Task=Static的數據
dta_ACC_S <-dta_ACC[dta_ACC$Task=='Static',]
head(dta_ACC_S)
     Task Subject   Type Item ACC
41 Static       1 Animal  A01   1
42 Static       1 Animal  A01   1
43 Static       1 Animal  A02   0
44 Static       1 Animal  A02   0
45 Static       1 Animal  A03   1
46 Static       1 Animal  A03   0
str(dta_ACC_S)
'data.frame':   2320 obs. of  5 variables:
 $ Task   : chr  "Static" "Static" "Static" "Static" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ ACC    : int  1 1 0 0 1 0 1 0 1 0 ...
#在靜態光點作業中,每位受試者的平均正確率
aggregate(dta_ACC_S$ACC, by=list(type=dta_ACC_S$Subject),mean)
   type     x
1     1 0.500
2     2 0.500
3     3 0.875
4     4 0.775
5     5 0.925
6     6 0.875
7     7 0.750
8     8 0.600
9     9 0.700
10   10 0.600
11   11 0.675
12   12 0.625
13   13 0.975
14   14 0.750
15   15 0.875
16   16 0.700
17   17 0.900
18   18 0.700
19   19 0.900
20   20 0.825
21   21 0.875
22   22 0.725
23   23 0.725
24   24 0.600
25   25 0.625
26   26 0.600
27   27 0.725
28   28 0.875
29   29 0.550
30   30 0.650
31   31 0.875
32   32 0.825
33   33 0.925
34   34 0.925
35   35 0.525
36   36 0.575
37   37 0.375
 [ reached 'max' / getOption("max.print") -- omitted 21 rows ]
#計算在靜態光點作業中,每個刺激材料的正確率平均值
#type=Item, x=ACCmean
aggregate(dta_ACC_S$ACC, by=list(type=dta_ACC_S$Item),mean)
   type        x
1   A01 0.396552
2   A02 0.534483
3   A03 0.801724
4   A04 0.655172
5   A05 0.689655
6   A06 0.827586
7   A07 0.818966
8   A08 0.844828
9   A09 0.844828
10  A10 0.586207
11  H01 0.931034
12  H02 0.629310
13  H03 0.982759
14  H04 0.715517
15  H05 0.681034
16  H06 0.672414
17  H07 0.887931
18  H08 0.775862
19  H09 0.801724
20  H10 0.706897
#計算在靜態光點作業中,每個刺激材料的正確率標準差
#type=Item, x=ACCsd
aggregate(dta_ACC_S$ACC, by=list(type=dta_ACC_S$Item),sd)
   type        x
1   A01 0.491304
2   A02 0.500974
3   A03 0.400431
4   A04 0.477374
5   A05 0.464642
6   A06 0.379378
7   A07 0.386717
8   A08 0.363640
9   A09 0.363640
10  A10 0.494649
11  H01 0.254495
12  H02 0.485085
13  H03 0.130734
14  H04 0.453125
15  H05 0.468098
16  H06 0.471369
17  H07 0.316820
18  H08 0.418823
19  H09 0.400431
20  H10 0.457160
#儲存資料及重新命名項目名稱
dta_ACC_S_meanI <- aggregate(dta_ACC_S$ACC, by=list(type=dta_ACC_S$Item),mean)
names(dta_ACC_S_meanI)<-c("Item","mean") 

dta_ACC_S_sdI <- aggregate(dta_ACC_S$ACC, by=list(type=dta_ACC_S$Item),sd)
names(dta_ACC_S_sdI)<-c("Item","sd")
#合併正確率平均值及標準差資料及儲存資料
dta_ACC_merge3 <- merge(x=dta_ACC_S_meanI,y=dta_ACC_S_sdI,all=TRUE)
#繪製長條圖
ggplot(data = dta_ACC_merge3, aes(x = Item, y = mean)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9),color='orange')+
  labs(x="Item",y="ACC",subtitle='Static Task')+
theme_minimal()

-在靜態光點作業中,其中以人類動作的H03平均正確率最高(M=0.98,SD=0.13),動物動作的A01平均正確率最小(M=0.40,SD=0.49)。

3.2 ANOVA

#計算不同Task及Type下,每個刺激材料的正確率平均值
#Group.1=Subject, Group.2=Task, Group.3=Type, x=ACCmean
aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Subject,dta_ACC$Task,dta_ACC$Type),mean)
   Group.1 Group.2 Group.3    x
1        1  Motion  Animal 0.80
2        2  Motion  Animal 0.80
3        3  Motion  Animal 1.00
4        4  Motion  Animal 0.90
5        5  Motion  Animal 0.75
6        6  Motion  Animal 0.85
7        7  Motion  Animal 0.80
8        8  Motion  Animal 0.90
9        9  Motion  Animal 0.80
10      10  Motion  Animal 0.80
11      11  Motion  Animal 0.70
12      12  Motion  Animal 0.80
13      13  Motion  Animal 1.00
14      14  Motion  Animal 0.55
15      15  Motion  Animal 1.00
16      16  Motion  Animal 0.70
17      17  Motion  Animal 0.85
18      18  Motion  Animal 0.90
 [ reached 'max' / getOption("max.print") -- omitted 214 rows ]
#儲存資料及重新命名項目名稱
dta_ACC_meanSb <- aggregate(x=dta_ACC$ACC, by=list(dta_ACC$Subject,dta_ACC$Task,dta_ACC$Type),mean)
names(dta_ACC_meanSb)<-c("Subject","Task","Type","ACC") 
str(dta_ACC_meanSb)
'data.frame':   232 obs. of  4 variables:
 $ Subject: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ ACC    : num  0.8 0.8 1 0.9 0.75 0.85 0.8 0.9 0.8 0.8 ...
#建立虛擬變數
Task <- ifelse(dta_ACC_meanSb$Task == 'Motion',1,0)
Type <- ifelse(dta_ACC_meanSb$Type == 'Animal',1,0)
dta_ACC_meanSb_dummy <- data.frame(Subject = as.numeric(dta_ACC_meanSb$Subject),
                                   Task = Task,
                                   Type = Type,
                                   ACC = dta_ACC_meanSb$ACC)

str(dta_ACC_meanSb_dummy)
'data.frame':   232 obs. of  4 variables:
 $ Subject: num  1 2 3 4 5 6 7 8 9 10 ...
 $ Task   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ ACC    : num  0.8 0.8 1 0.9 0.75 0.85 0.8 0.9 0.8 0.8 ...
#檢驗Task及Type是否有交互作用
interaction_ACC <- aov(ACC ~ Task*Type, data = dta_ACC_meanSb_dummy)
summary(interaction_ACC)
             Df Sum Sq Mean Sq F value  Pr(>F)
Task          1   0.79   0.786   28.29 2.5e-07
Type          1   0.55   0.550   19.82 1.3e-05
Task:Type     1   0.02   0.021    0.75    0.39
Residuals   228   6.33   0.028                

-Task及Type沒有交互作用(F(1,228)=0.75,P>.05),表示即使在同一個Task下,受試者的正確率不會受到不同Type影響。

#檢驗Task不同對於ACC效果
one.way_ACC_Task <- aov(ACC ~ Task , data = dta_ACC_meanSb_dummy)
summary(one.way_ACC_Task)
             Df Sum Sq Mean Sq F value  Pr(>F)
Task          1   0.79   0.786    26.2 6.6e-07
Residuals   230   6.90   0.030                

-Task對於正確率效果達顯著(F(1,230)=26.2,P<.05),表示受試者判斷光點呈現刺激正確率在光點是動態或靜態呈現有顯著差異。。

#檢驗Type不同對於ACC效果
one.way_ACC_Type <- aov(ACC ~ Type, data = dta_ACC_meanSb_dummy)
summary(one.way_ACC_Type)
             Df Sum Sq Mean Sq F value  Pr(>F)
Type          1   0.55   0.550    17.7 3.6e-05
Residuals   230   7.14   0.031                

-Type對於正確率效果達顯著(F(1,230)=17.7,P<.05),表示受試者判斷光點呈現刺激正確率在光點是人類動作或動物動作呈現有顯著差異。

3.3 Model

m1 <- lm(ACC ~ Task + Type,data = dta_ACC_meanSb_dummy)
summary(m1)

Call:
lm(formula = ACC ~ Task + Type, data = dta_ACC_meanSb_dummy)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.7569 -0.0905  0.0431  0.0957  0.3095 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)   0.7879     0.0189   41.60  < 2e-16
Task          0.1164     0.0219    5.32  2.4e-07
Type         -0.0974     0.0219   -4.45  1.3e-05

Residual standard error: 0.167 on 229 degrees of freedom
Multiple R-squared:  0.174, Adjusted R-squared:  0.167 
F-statistic: 24.1 on 2 and 229 DF,  p-value: 3.23e-10

-平均正確率為0.79,Task若為1(動態光點),正確率會增加0.12,而Type若為1(動物動作),正確率會下降0.10。預測模型為Y = 0.79 + 0.12 Task - 0.1Type,調整後決定係數為0.137,表示本模型解釋力仍有待討論。

m2 <- lme4::lmer(ACC ~ 1 + Task + Type + (1| Subject), data = dta_ACC_meanSb_dummy)
summary(m2)
Linear mixed model fit by REML ['lmerMod']
Formula: ACC ~ 1 + Task + Type + (1 | Subject)
   Data: dta_ACC_meanSb_dummy

REML criterion at convergence: -163.8

Scaled residuals: 
   Min     1Q Median     3Q    Max 
-3.933 -0.500  0.174  0.660  1.805 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept) 0.00406  0.0637  
 Residual             0.02370  0.1540  
Number of obs: 232, groups:  Subject, 58

Fixed effects:
            Estimate Std. Error t value
(Intercept)   0.7879     0.0194   40.61
Task          0.1164     0.0202    5.76
Type         -0.0974     0.0202   -4.82

Correlation of Fixed Effects:
     (Intr) Task  
Task -0.521       
Type -0.521  0.000

-估計正確率為0.79,以及在受試者層次及觀察值層次的變異數分為0.004及0.024。大部分的變異來自觀察值,且受試者層次的變異小於觀察值,結果表示在受試者之間的正確率有顯著差異。

-ICC=0.004/(0.004+0.024)=0.143

-在受試者層次下,ICC為0.143,表示受試者之間的反應時間相似度有14.3%。

#模型殘差診斷
library(lme4)
plot(m2, 
     resid(., scale=TRUE) ~ fitted(.), 
     abline=0,
     xlab="ACC",
     ylab="Scaled residuals")

3.4 反應時間分析

#刪除ACC=0及反應時間小於200ms&大於4秒
#其中有一位受試者在動態光點作業中動物項目的反應時間皆符合上述條件,因此移除該名受試者所有數據,剩下57名受試者進行分析
#匯入csv資料
dta_RT <- read.csv("PerceptionEXP2019_RT.csv")
dta_RT[is.na(dta_RT)] <- 0
str(dta_RT)
'data.frame':   4560 obs. of  7 variables:
 $ EXP    : chr  "BioMotion01" "BioMotion01" "BioMotion01" "BioMotion01" ...
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ ACC    : int  1 1 1 1 1 1 0 0 1 1 ...
 $ RT     : num  933 1612 892 1706 1820 ...
#擷取包含Task.Subject.Type.Item.RT的資料
dta_RT2 <- dta_RT[,c("Task","Subject","Type","Item","RT")]
head(dta_RT2)
    Task Subject   Type Item   RT
1 Motion       1 Animal  A01  933
2 Motion       1 Animal  A01 1612
3 Motion       1 Animal  A02  892
4 Motion       1 Animal  A02 1706
5 Motion       1 Animal  A03 1820
6 Motion       1 Animal  A03 3970
str(dta_RT2)
'data.frame':   4560 obs. of  5 variables:
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ RT     : num  933 1612 892 1706 1820 ...
#計算不同Task及Type下的反應時間平均值
#Group.1=Task, Group.2=Type, x=RTmean
aggregate(x=dta_RT2$RT, by=list(dta_RT2$Task,dta_RT2$Type),mean)
  Group.1 Group.2        x
1  Motion  Animal 1126.061
2  Static  Animal  811.954
3  Motion   Human 1229.034
4  Static   Human  766.698
#計算不同Task及Type下的反應時間標準差
#Group.1=Task, Group.2=Type, x=RTsd
aggregate(x=dta_RT2$RT, by=list(dta_RT2$Task,dta_RT2$Type),sd)
  Group.1 Group.2       x
1  Motion  Animal 841.247
2  Static  Animal 781.623
3  Motion   Human 696.822
4  Static   Human 683.581
#儲存資料及重新命名項目名稱
dta_RT_mean <- aggregate(x=dta_RT2$RT, by=list(dta_RT2$Task,dta_RT2$Type),mean)
names(dta_RT_mean)<-c("Task","Type","mean") 

dta_RT_sd <- aggregate(x=dta_RT2$RT, by=list(dta_RT2$Task,dta_RT2$Type),sd)
names(dta_RT_sd)<-c("Task","Type","sd") 
#合併正確率平均值及標準差資料及儲存資料
dta_RT_merge <- merge(x=dta_RT_mean,y=dta_RT_sd,all=TRUE)
#繪製直方圖
ggplot(data = dta_RT_merge, aes(x = Task, y = mean, fill = Type)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9))+
  labs(x="Task",y="RT(ms)")+
theme_minimal()

-光點以動態呈現的反應時間均比靜態呈現久,其中以動態呈現人類動作的平均反應時間最長(M=1229,SD=697),靜態呈現人類動作的平均反應時間最長(M=767,SD=684)。

#擷取Task=Motion的數據
dta_RT_M <-dta_RT2[dta_RT2$Task=='Motion',]
head(dta_RT_M)
    Task Subject   Type Item   RT
1 Motion       1 Animal  A01  933
2 Motion       1 Animal  A01 1612
3 Motion       1 Animal  A02  892
4 Motion       1 Animal  A02 1706
5 Motion       1 Animal  A03 1820
6 Motion       1 Animal  A03 3970
str(dta_RT_M)
'data.frame':   2320 obs. of  5 variables:
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Subject: int  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ RT     : num  933 1612 892 1706 1820 ...
#在動態光點作業中,每位受試者的平均反應時間
aggregate(dta_RT_M$RT, by=list(type=dta_RT_M$Subject),mean)
   type        x
1     1 1164.263
2     2 1350.862
3     3 1091.100
4     4 1248.250
5     5 1090.625
6     6 1012.862
7     7 1160.562
8     8 1234.112
9     9 1294.013
10   10  953.837
11   11 1204.400
12   12  993.913
13   13 1367.412
14   14 1072.175
15   15  972.462
16   16 1017.663
17   17  924.975
18   18 1291.975
19   19 1224.725
20   20 1282.763
21   21 1188.938
22   22 1101.900
23   23  767.625
24   24 1450.300
25   25 1272.562
26   26 1184.412
27   27 1638.500
28   28 1297.888
29   29 1293.812
#計算在動態光點作業中,每個刺激材料的平均反應時間
#type=Item, x=RTmean
aggregate(dta_RT_M$RT, by=list(type=dta_RT_M$Item),mean)
   type        x
1   A01 1437.310
2   A02 1276.638
3   A03 1249.638
4   A04 1042.922
5   A05  815.069
6   A06 1028.172
7   A07 1207.181
8   A08  964.560
9   A09 1102.095
10  A10 1137.026
11  H01 1373.767
12  H02 1282.207
13  H03  808.534
14  H04  790.966
15  H05 1238.543
16  H06 1151.440
17  H07 1413.060
18  H08 1306.284
19  H09 1449.345
20  H10 1476.198
#計算在動態光點作業中,每個刺激材料的正確率標準差
#type=Item, x=RTsd
aggregate(dta_RT_M$RT, by=list(type=dta_RT_M$Item),sd)
   type        x
1   A01  675.377
2   A02  655.624
3   A03 1062.245
4   A04 1129.145
5   A05  944.454
6   A06  831.401
7   A07  678.776
8   A08  508.606
9   A09 1026.753
10  A10  449.828
11  H01  810.088
12  H02  497.774
13  H03  286.774
14  H04  280.300
15  H05  861.464
16  H06  660.789
17  H07  572.853
18  H08  794.952
19  H09  528.613
20  H10  926.088
#儲存資料及重新命名項目名稱
dta_RT_M_meanI <- aggregate(dta_RT_M$RT, by=list(type=dta_RT_M$Item),mean)
names(dta_RT_M_meanI)<-c("Item","mean") 

dta_RT_M_sdI <- aggregate(dta_RT_M$RT, by=list(type=dta_RT_M$Item),sd)
names(dta_RT_M_sdI)<-c("Item","sd")
#合併正確率平均值及標準差資料及儲存資料
dta_RT_merge2 <- merge(x=dta_RT_M_meanI,y=dta_RT_M_sdI,all=TRUE)
#繪製長條圖
ggplot(data = dta_RT_merge2, aes(x = Item, y = mean)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9),color='orange')+
  labs(x="Item",y="RT(ms)",subtitle='Motion Task')+
theme_minimal()

-在動態光點作業中,其中以人類動作中的H05平均反應時間最短(M=815,SD=944),H10平均反應時間最長(M=1476,SD=926)。

#擷取Task=Static的數據
dta_RT_S <-dta_RT2[dta_RT2$Task=='Static',]
head(dta_RT_S)
       Task Subject   Type Item   RT
2321 Static      30 Animal  A01  783
2322 Static      30 Animal  A01 1413
2323 Static      30 Animal  A02    0
2324 Static      30 Animal  A02    0
2325 Static      30 Animal  A03 1123
2326 Static      30 Animal  A03    0
str(dta_RT_S)
'data.frame':   2240 obs. of  5 variables:
 $ Task   : chr  "Static" "Static" "Static" "Static" ...
 $ Subject: int  30 30 30 30 30 30 30 30 30 30 ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ Item   : chr  "A01" "A01" "A02" "A02" ...
 $ RT     : num  783 1413 0 0 1123 ...
#在靜態光點作業中,每位受試者的平均反應時間
aggregate(dta_RT_S$RT, by=list(type=dta_RT_S$Subject),mean)
   type        x
1    30  661.388
2    31  946.513
3    32  785.312
4    33  892.950
5    34  692.975
6    35  782.312
7    36  888.375
8    37  711.913
9    38  694.850
10   39  610.375
11   40  778.462
12   41  789.013
13   42  823.087
14   43  620.875
15   44  645.688
16   45  888.288
17   47  751.825
18   48  754.737
19   49  867.725
20   50  570.700
21   51  809.087
22   52  883.975
23   53 1230.463
24   54  778.638
25   55  764.325
26   56  714.075
27   57  828.087
28   58  935.125
#計算在靜態光點作業中,每個刺激材料平均反應時間
#type=Item, x=RTmean
aggregate(dta_RT_S$RT, by=list(type=dta_RT_S$Item),mean)
   type        x
1   A01  593.036
2   A02  761.411
3   A03  874.179
4   A04  844.196
5   A05  819.982
6   A06  818.589
7   A07 1117.955
8   A08  736.741
9   A09  872.938
10  A10  680.518
11  H01  873.045
12  H02  776.929
13  H03  851.402
14  H04  742.348
15  H05  657.464
16  H06  782.277
17  H07  791.821
18  H08  732.688
19  H09  745.464
20  H10  713.545
#計算在靜態光點作業中,每個刺激材料的正確率標準差
#type=Item, x=RTsd
aggregate(dta_RT_S$RT, by=list(type=dta_RT_S$Item),sd)
   type       x
1   A01 805.728
2   A02 953.182
3   A03 705.798
4   A04 833.805
5   A05 775.547
6   A06 686.336
7   A07 924.380
8   A08 465.687
9   A09 686.206
10  A10 784.612
11  H01 540.932
12  H02 877.024
13  H03 407.578
14  H04 728.003
15  H05 729.765
16  H06 882.777
17  H07 494.485
18  H08 620.422
19  H09 559.307
20  H10 813.610
#儲存資料及重新命名項目名稱
dta_RT_S_meanI <- aggregate(dta_RT_S$RT, by=list(type=dta_RT_S$Item),mean)
names(dta_RT_S_meanI)<-c("Item","mean") 

dta_RT_S_sdI <- aggregate(dta_RT_S$RT, by=list(type=dta_RT_S$Item),sd)
names(dta_RT_S_sdI)<-c("Item","sd")
#合併正確率平均值及標準差資料及儲存資料
dta_RT_merge3 <- merge(x=dta_RT_S_meanI,y=dta_RT_S_sdI,all=TRUE)
#繪製長條圖
ggplot(data = dta_RT_merge3, aes(x = Item, y = mean)) +
  geom_bar(stat = "identity", position = position_dodge())+
  geom_errorbar(aes(ymin = mean - sd, ymax = mean + sd),
  width = 0.3, position = position_dodge(0.9),color='orange')+
  labs(x="Item",y="RT(ms)",subtitle='Static Task')+
theme_minimal()

-在靜態光點作業中,其中以動物動作中的A01平均反應時間最短(M=593,SD=806),A10平均反應時間最長(M=1476,SD=924)。

3.5 ANOVA

#計算不同Task及Type下,每位受試者的平均反應時間
#Group.1=Subject, Group.2=Task, Group.3=Type, x=RTmean
aggregate(x=dta_RT2$RT, by=list(dta_RT2$Subject,dta_RT2$Task,dta_RT2$Type),mean)
   Group.1 Group.2 Group.3        x
1        1  Motion  Animal 1212.825
2        2  Motion  Animal 1470.725
3        3  Motion  Animal  932.350
4        4  Motion  Animal 1270.750
5        5  Motion  Animal 1070.250
6        6  Motion  Animal  949.625
7        7  Motion  Animal 1195.050
8        8  Motion  Animal 1269.375
9        9  Motion  Animal 1290.025
10      10  Motion  Animal  954.275
11      11  Motion  Animal 1249.050
12      12  Motion  Animal 1014.450
13      13  Motion  Animal 1464.525
14      14  Motion  Animal 1111.000
15      15  Motion  Animal  950.125
16      16  Motion  Animal  997.025
17      17  Motion  Animal  986.125
18      18  Motion  Animal 1215.200
 [ reached 'max' / getOption("max.print") -- omitted 96 rows ]
#儲存資料及重新命名項目名稱
dta_RT_meanSb <- aggregate(x=dta_RT2$RT, by=list(dta_RT2$Subject,dta_RT2$Task,dta_RT2$Type),mean)
names(dta_RT_meanSb)<-c("Subject","Task","Type","RT") 
str(dta_RT_meanSb)
'data.frame':   114 obs. of  4 variables:
 $ Subject: int  1 2 3 4 5 6 7 8 9 10 ...
 $ Task   : chr  "Motion" "Motion" "Motion" "Motion" ...
 $ Type   : chr  "Animal" "Animal" "Animal" "Animal" ...
 $ RT     : num  1213 1471 932 1271 1070 ...
#建立虛擬變數
Task2 <- ifelse(dta_RT_meanSb$Task == 'Motion',1,0)
Type2 <- ifelse(dta_RT_meanSb$Type == 'Animal',1,0)
dta_RT_meanSb_dummy <- data.frame(Subject = as.numeric(dta_RT_meanSb$Subject),
                                  Task = Task2,
                                  Type = Type2,
                                  RT = dta_RT_meanSb$RT)

str(dta_RT_meanSb_dummy)
'data.frame':   114 obs. of  4 variables:
 $ Subject: num  1 2 3 4 5 6 7 8 9 10 ...
 $ Task   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Type   : num  1 1 1 1 1 1 1 1 1 1 ...
 $ RT     : num  1213 1471 932 1271 1070 ...
#檢驗Task及Type是否有交互作用
interaction_RT <- aov(RT ~ Task*Type, data = dta_RT_meanSb_dummy)
summary(interaction_RT)
             Df  Sum Sq Mean Sq F value Pr(>F)
Task          1 4294082 4294082  107.15 <2e-16
Type          1   25922   25922    0.65  0.423
Task:Type     1  156502  156502    3.91  0.051
Residuals   110 4408149   40074               

-Task及Type沒有交互作用(F(1,110)=3.91,P>.05),表示即使在同一個Task下,受試者的反應時間不會受到不同Type影響。

#檢驗Task不同對於RT的影響
one.way_RT_Task <- aov(RT ~ Task, data = dta_RT_meanSb_dummy)
summary(one.way_RT_Task)
             Df  Sum Sq Mean Sq F value Pr(>F)
Task          1 4294082 4294082     105 <2e-16
Residuals   112 4590573   40987               

-Task對於反應時間效果達顯著(F(1,112)=105,P<.05),表示受試者判斷光點呈現刺激反應時間在光點是動態或靜態呈現有顯著差異。

#檢驗Type不同對於RT的影響
one.way_RT_Type <- aov(RT ~ Type, data = dta_RT_meanSb_dummy)
summary(one.way_RT_Type)
             Df  Sum Sq Mean Sq F value Pr(>F)
Type          1   25922   25922    0.33   0.57
Residuals   112 8858733   79096               

-Type對於正確率效果未達顯著(F(1,112)=0.33,P>.05),表示受試者判斷光點呈現刺激正確率在光點是人類動作或動物動作呈現沒有顯著差異。

3.6 Model

m3 <- lm(RT ~ Task + Type,data = dta_RT_meanSb_dummy)
summary(m3)

Call:
lm(formula = RT ~ Task + Type, data = dta_RT_meanSb_dummy)

Residuals:
   Min     1Q Median     3Q    Max 
-594.7 -153.1  -20.2  115.4  692.0 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    804.4       33.1   24.31   <2e-16
Task           388.2       38.0   10.22   <2e-16
Type           -30.2       38.0   -0.79     0.43

Residual standard error: 203 on 111 degrees of freedom
Multiple R-squared:  0.486, Adjusted R-squared:  0.477 
F-statistic: 52.5 on 2 and 111 DF,  p-value: <2e-16

-平均反應時間為804.4,Task若為1(動態光點),反應時間會增加388.2毫秒,而Type若為1(動物動作),反應時間會下降30.2毫秒。預測模型為Y = 804.4 + 388.2 Task - 30.2Type,調整後決定係數為0.477,表示本模型有還不錯的解釋力。

m4 <- lm(RT ~ Task ,data = dta_RT_meanSb_dummy)
summary(m4)

Call:
lm(formula = RT ~ Task, data = dta_RT_meanSb_dummy)

Residuals:
   Min     1Q Median     3Q    Max 
-609.8 -145.2   -8.1  118.5  676.9 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)    789.3       27.1    29.2   <2e-16
Task           388.2       37.9    10.2   <2e-16

Residual standard error: 202 on 112 degrees of freedom
Multiple R-squared:  0.483, Adjusted R-squared:  0.479 
F-statistic:  105 on 1 and 112 DF,  p-value: <2e-16

-移除Type後,平均反應時間為789.3,Task若為1(動態光點),反應時間會增加388.2毫秒。預測模型為Y = 804.4 + 388.2 Task,調整後決定係數為0.479,表示本模型有還不錯的解釋力。

anova(m3,m4)
Analysis of Variance Table

Model 1: RT ~ Task + Type
Model 2: RT ~ Task
  Res.Df     RSS Df Sum of Sq    F Pr(>F)
1    111 4564651                         
2    112 4590573 -1    -25922 0.63  0.429

-兩個模型未達顯著差異,表示移除Type後不影響Task對反應時間的預測效果。

m5 <- lme4::lmer(RT ~ 1 + Task + (1| Subject), data = dta_RT_meanSb_dummy)
summary(m5)
Linear mixed model fit by REML ['lmerMod']
Formula: RT ~ 1 + Task + (1 | Subject)
   Data: dta_RT_meanSb_dummy

REML criterion at convergence: 1513.4

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.6193 -0.6069 -0.0847  0.5228  2.9319 

Random effects:
 Groups   Name        Variance Std.Dev.
 Subject  (Intercept)  7938     89.1   
 Residual             33191    182.2   
Number of obs: 114, groups:  Subject, 57

Fixed effects:
            Estimate Std. Error t value
(Intercept)    789.3       29.6   26.67
Task           388.2       41.5    9.35

Correlation of Fixed Effects:
     (Intr)
Task -0.713

-估計反應時間為789.3毫秒,以及在受試者層次及觀察值層次的變異數分為7938及33191。大部分的變異來自觀察值,且受試者層次的變異小於觀察值。結果表示在受試者之間的反應時間有顯著差異。

-ICC=7938/(7938+33191)=0.193

-在受試者層次下,ICC為0.193,表示受試者之間的反應時間相似度有19.3%。

#模型殘差診斷
library(lme4)
plot(m5, 
     resid(., scale=TRUE) ~ fitted(.), 
     abline=0,
     xlab="RT(ms)",
     ylab="Scaled residuals")

4 討論

在正確率的部分,光點以動態呈現的正確率均比靜態呈現高,且對於判斷為人類動作正確率也比動物高。其中以動態呈現人類動作的平均正確率最大(M=0.91,SD=0.28),靜態呈現動物動作的平均正確率最小(M=0.70,SD=0.46)。在動態光點作業中,受試者判斷人類動作的平均正確率最高,判斷動物動作的平均正確率最小。在靜態光點作業中,同樣是判斷人類動作的平均正確率最高,判斷動物動作的平均正確率最小。而在變異數分析結果中,Task及Type不同對於正確率有顯著效果,但是兩者之間沒有交互作用,表示即使在同一個Task下,受試者的正確率不會受到不同Type影響。在多層次資料分析中,m2模型預測受試者之間的正確率相似性只有14.3%,表示在不同Task及Type下,受試者之間的表現還是不太一致的。

而在反應時間的部分,光點以動態呈現的反應時間均比靜態呈現久,其中以動態呈現人類動作的平均反應時間最長(M=1229,SD=697),靜態呈現人類動作的平均反應時間最短(M=767,SD=684)。在動態光點作業中,受試者判斷人類動作的平均反應時間較長。而在靜態光點作業中,則是動物動作平均反應時間較長。可能是因為在動態作業下,受試者自然會等待光點動畫結束才做出反應,靜態光點則無需等待。此外,人對於靜止的光點難以組織一個有意義的圖像,無法迅速提取已存在大腦的心智表徵,因此反應時間的研究結果與研究預期有落差。而在變異數分析結果中,Task及Type之間沒有交互作用,且只有Task對反應時間有顯著效果,表示受試者判斷光點呈現刺激反應時間在光點是人類動作或動物動作呈現沒有顯著差異。在多層次資料分析中,m5模型預測受試者之間的反應時間相似性只有19.3%,表示在不同Task及Type下,受試者之間的表現還是不太一致的。

綜合上述,受試者判斷人類動作的正確率比不是人類動作還要高,看到動態光點變化反應時間較看到靜態光點圖像久。前者符合研究假設,後者根據進一步的統計分析表示,在不同的光點呈現作業及不同的呈現刺激的反應時間,動態或是人類動作的光點不完全有較佳的表現。

5 參考資料

Johansson, G. (1973). Visual perception of biological motion and a model for its analysis. Perception and Psychophysics, 14 , 202-211.

Johansson, G. (1975). Visual motion perception.Scientific American, 232 , 76-88.