我的Psychopy 學習筆記

My notes on learing Psychopy

我是輔大心理系的老師黃揚名,過去都是用E-Prime來寫心理學實驗的程式,雖然很方便,不過限制實在有點多。決定要來學習Psychopy,歡迎大家多交流。

不想要受到商業軟體的限制,以及希望可以線上蒐集實驗資料,所以我開始學習Psychopy,這是我用來做筆記的地方。因為版本持續更新,我是從2021/7/6開始做紀錄的。

Day 1 安裝

如果你是從Psychopy官方網站上點擊連結,會看到錯誤訊息。所以請點選這邊,這邊會有所有版本的Psychopy。如果不想直接用python來寫程式的朋友,可以選擇standalone的版本


Day 2 第一個實驗

如果你是熟悉心理學實驗軟體的,Psychopy的設定其實不難,而且這個影片說明的很清楚。對我來說主要的學習:

  • Trial 怎麼定義

  • 變數的定義

  • List的定義 (loop)

有一些地方和之前用的E-Prime 不同

  • 螢幕中央的x,y 是 (0,0),類似傳統四象限的設置,左上的話,x是負值、y是正值

  • 變數的定義,都需要透過一個檔案的設定

  • 看起來沒有另外編碼的話,滑鼠不能設定左右鍵為正確答案

我自己延伸的練習,把輸入改為用按鍵的,並且有設置正確答案。其實還蠻容易的。點這邊下載我修改後的程式


Day 3 線上實驗初體驗

線上測試,是用Psychopy一個很大的誘因,程式可以放到Pavlovia這個平台上,還蠻方便的。

但是,有一件事情,大家一定要注意,就是記得在把程式同步在Pavlovia之前,一定要先把程式本身存檔。否則,路徑的設定就會有問題,程式就無法順利在線上執行。

這一點害我卡關一陣子,可是教學影片都沒有提到,唉...

不過,線上測試是要花錢的,看來要跟學校爭取一下,一年1500英鎊,就可以全校都使用,感覺還蠻不錯的。不知道有沒有機會成功....


Day 4 給受試者反饋

學習怎麼插入新的物件,就是insert routine,概念上應該是很簡單的,但是教學影片裏面有個東西,在新版已經不適用了,就是 key_resp.time[0] 要更改為 key_resp.rt

也就是說反應時間是用.rt,另外我測試了正確率是用.corr。另外不需要指定是第幾個項目,因為是逐題給反饋,就不指定了。

目前還在想要怎麼樣用builder的介面,來針對正確率告知受試者,他們答對或答錯。目前只能另外告訴他們 0表示答錯、1表示答對。

Day 7 用程式碼作定義

Day 4 還無法做的設定,在這的影片中找到了答案。善用python的語法,就可以讓實驗多很多彈性。

這邊要注意的就是,psychopy當中,在同一個routine,如果有要用code,記得要把code放在最上面,否則是無法被執行的~

但還要思考 Text 中,能否定義兩個變數。目前覺得不行,只能從code當中去做調整


Day 8 用刺激定義答案

官方的教學影片就差不多沒了,所以今天自己練習,長是做一些我在E-Prime中能夠做到的事情。今天寫的是一個比大小的實驗程式,一個數字在左、一個數字在右。雖然以目前的寫法,我根本可以把答案寫在conditions當中,但單純想要看看自己的語法能力,所以用了語法。結果是成功的!

Day 9 nested 變型

因為psychopy一次只能用一個conditions清單,也就是說在同一行的刺激,永遠都會配對在一起。在eprime當中,可以利用nested fucntion來這克服這個障礙。今天,總算在論壇中找到一個可能的做法,就是自己另外寫程式碼,來產生另一個變數的隨機清單。

(1) 在Begin Experiment 建立一個隨機的rightwordlist 清單,並且把conditions中關於rightword的欄位刪除

(2) 在Begin Routine 設定每次選一個

(3) 在End Routine 儲存 rightword

Day 10 滑鼠正確率

用Psychopy設定滑鼠正確率,相較於E-Prime 2.0 以前的版本,比較容易一些。但必須包含以下要素

  1. 要設定mouse接受valid click

  2. 每個刺激都要用不同的Text or Image呈現

  3. 在end routine要寫一個判斷式,根據 mouse.clicked_name來做判斷。我一直程式直接用Text的名稱,但失敗,最後是把正確答案在conditions中增加一個欄位,就成功了

另外,不知道為什麼,有時候要把變數儲存,必須要用 'trials.xxx', 才能儲存

Day 11 問卷

用Psychopy設定製作用滑鼠點的問卷,非常方便,只要用slider的元件,做簡單的設定就可以。相較於一般問卷的表單,可以記錄反應時間,是優勢!

  • ticks 代表的是選項的值

  • labels 代表的是受試者看到的尺規標記,會自動去對應到ticks。如果是用文字(如圖中所示),需要加上 ' ' 。

Day 14 按鈕正確率

Psychopy當中有button按鈕的設定,只是這個按鈕,沒有內建正確與否的功能,只會紀錄每個按鈕,累計被按的次數。但是可以在begin of routine設定 oldy = button_y.numClicks ,以及在end of routine加上一個判斷 button_y.numClicks 是否大於oldy,就可以斷定受試者是否有按了button_y 這個按鈕,以此類推~


也就是說,這樣就能夠設定正確率了 (因為你知道受試者按了哪個按鈕)

  • ticks 代表的是選項的值

  • labels 代表的是受試者看到的尺規標記,會自動去對應到ticks。如果是用文字(如圖中所示),需要加上 ' ' 。