知覺組織(Perceptual Organization)為將分散的物件組織成一個完整物體的能力。Johansson (1973,1975)過去曾透過光點做為刺激材料,將光點裝設在人體的關節處並在暗室進行實驗,發現當光點在移動時,受試者可以將光點變化建構成一個有意義的表徵,而當光點沒有移動時,靜止的光點卻不能傳達出有意義的圖像。
本研究同樣想要以光點分布探討人類對動作知覺的有效性,受試者必須判斷螢幕呈現的光點動作類型屬於人類或是動物,而光點呈現方式分為動態光點變化或靜態光點圖像,實驗採對抗平衡,有一半的學生會先進行動態光點作業再來是靜態光點作業,另一半學生則相反。研究假設看到動態光點變化反應時間較看到靜態光點圖像短,此外,受試者判斷人類動作的正確率比不是人類動作還要高。
受試者為58位大學生,視力皆為正常或矯正後正常。
本研究刺激材料皆呈現在24吋電腦螢幕,螢幕解析度為1980x1020。使用E-prime 2.0收集受試者作答反應時間及正確率等。
本研究為2x2完全受試者內實驗設計,操弄的變項有光點呈現方式(動態或靜態)及光點動作類型(動物或人類)。受試者皆需要完成動態及靜態光點呈現作業,在光點動態呈現作業中,動物及人類光點動作類型各有10種刺激材料,每種刺激材料皆會重複1次,共40次嘗試,刺激材料為隨機出現。光點靜態呈現作業也是使用相同數量及種類的刺激材料,以及有相同的嘗試次數。
受試者完成同意書之後,先輸入學號並等待螢幕出現指導語,接著依照主試者的指示進行6次練習,練習階段完成後若沒有疑問便開始正式實驗。每個嘗試開始進行時會先出現800毫秒的凝視點,接著刺激材料在螢幕上顯示的時間則無限時,受試者若認為螢幕上的光點是人類動作則按下鍵盤z鍵,若認為是動物動作則按下鍵盤/鍵,做出反應後會出現1000毫秒ISI,才會進行下一個嘗試次。
##匯入資料
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 ...
#擷取包含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)。
#計算不同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),表示受試者判斷光點呈現刺激正確率在光點是人類動作或動物動作呈現有顯著差異。
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")#刪除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)。
#計算不同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),表示受試者判斷光點呈現刺激正確率在光點是人類動作或動物動作呈現沒有顯著差異。
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")在正確率的部分,光點以動態呈現的正確率均比靜態呈現高,且對於判斷為人類動作正確率也比動物高。其中以動態呈現人類動作的平均正確率最大(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下,受試者之間的表現還是不太一致的。
綜合上述,受試者判斷人類動作的正確率比不是人類動作還要高,看到動態光點變化反應時間較看到靜態光點圖像久。前者符合研究假設,後者根據進一步的統計分析表示,在不同的光點呈現作業及不同的呈現刺激的反應時間,動態或是人類動作的光點不完全有較佳的表現。
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.