編程技能對心理學研究有多重要?一個合格的研究者至少應該掌握哪些技能?
一個師兄建議,從事心理學研究必須精通 matlab 、數據分析和背後原理,在編程上如果不擅長,之後的研究會很容易受制於人...這是真的嗎,究竟要掌握怎樣的技能才算合格?
本題已加入知乎圓桌 ? 心理學職業發展指南,更多「心理學職業發展」的相關話題歡迎關注討論。
簡單來說,對於一般的社會,臨床心理學來說,用到你自己手動編程的場合其實很少。對於認知心理學,尤其是認知神經科學的人來說,編程這東西不必要,因為現在已經有太多傻瓜軟體了,而且很多研究者自己抱的心態就是,編程和數據分析就是個技術活,花錢叫人干就行了。但是總體來說,會編程會數據分析對你的研究工作有很大的幫助。
至於水平程度,完全取決於你老闆要求你到什麼程度了。
說個題外話,我個人強烈推薦加強編程和數據分析方面的訓練。這東西的確是在很多研究中沒有必要的,但是萬一你要離開學術圈,沒有人care你的那些學術idea和paper,在做研究中得到訓練的這些技能往往在工業界中是敲門磚。編程這東西肯定有用,但不是必需。用處多大,取決於你想做哪方面的研究。
搞心理學科研,有兩個環節可能會用到編程:數據採集和數據分析。
數據採集環節,如果做的是行為實驗,在電腦上呈現刺激,就需要用到各種專業的實驗軟體,如E-Prime、Presentation、Inquisit、Psychtoolbox。每個軟體的功能側重不同,有些集成度比較高,用滑鼠點點點就能設置好一個實驗,有些更加靈活,但需要自己寫程序。要不要寫程序,寫得多複雜,還要看你具體的研究內容。但再複雜也複雜不到哪裡去,最辛苦的工作軟體開發者已經幫你完成了。如果你的研究方法是問卷、訪談之類的,大概就完全用不上了。
數據分析環節,也要看你用的是什麼統計方法。如果是t檢驗、ANOVA之類的大路貨,在SPSS里用滑鼠點點點就可以了。如果是想做結構方程之類的高級統計,可能要學習專門的軟體,寫一些簡單的代碼。如果你做的比較高端,比如折騰海量的數據,或是自己開發新的演算法,那對於編程的要求就會高一些。
總的來說,如果一個人擅長編程,在認知神經科學方向受益可能最大,因為數據比較複雜,現成的軟體包也沒那麼完善。不過,這種技術性工作其實都可以交給專業人士來做, 你只要做到能夠評判他們的工作質量就好。一談到編程,各大編程語言幫派很容易陷入無窮無盡的「鄙視鏈」(程序員的鄙視鏈是什麼? - 知乎;鄙視鏈現象普遍存在的深層原因是什麼? - 知乎)。鄙視鏈有百害而無一利,害的是對各種編程語言尚且理解不深的初學者,害的也是自己。
所以下面的回答盡量做到客觀和全面(當然,受限於我的個人水平,一些方面可能涉及不到,還請大家補充)。
我會從每款軟體或語言入手,嘗試分析它們能被心理學研究者最大化利用的地方。而在這之前想先闡述一下學習編程或技術的幾個基本原則。
原則1:好問題遠大於好技術,但好技術能促進研究好問題。
原則2:不要陷入對某項技術的盲目崇拜,保持審辯式思維。原則3:要知道技術能解決什麼問題,可觸及什麼極限(是不是非用不可、無可替代)。
原則4:沒有不好用的技術,只有用不好的人。原則5:按需選用,無需鄙視。原則6:學技術不是為了裝X,而是為了解決問題。
Excel
學心理的人都知道,「人類的大腦只被開發了10%」是一個myth、一個錯誤的言論。然而,「Excel的功能只被大多數人使用了10%」卻是一個相對的事實。學Excel的人其實也有一條「鄙視鏈」(轉自「Excel之家ExcelHome」微信公眾號):搞笑的EXCEL水平等級劃分,看看你是哪一級?。
Excel是心理學研究者的基礎必備技能:
- Excel表格其實就是一個矩陣,同時也是一個初級的資料庫。由於Excel軟體的普及性,這幾乎是每個人了解什麼是數據、什麼是數據結構的最直觀的第一印象。也由於它的普及性,掌握甚至精通Excel,是性價比很高的選擇。
- Excel的快捷鍵們——熟練使用快捷鍵,可以提升數據處理的效率。
- Excel的函數們——Excel的函數當然遠遠不止SUM、AVERAGE了,利用高級函數,可以更方便地完成初步的數據清理、統計分析、答案編碼、文本處理等等。(順便一提,INDEX+MATCH函數的效率和應用範圍遠優於LOOKUP函數家族)
- 製圖——如果沒有特別的要求,一般情況下的數據呈現(如帶誤差線的柱狀圖)用Excel做就很美觀了(當然,前提是配色方案和線條參數要調美觀),也方便直接修改、方便移植到Word、PPT裡面。科研製圖需要比較高的dpi輸出,一般至少是300dpi,可以把Excel的圖複製到PPT裡面,然後修改註冊表裡的PPT選項,調整dpi值(PPT修改註冊表直接出高解析度圖_百度文庫),達到高清輸出。
- VBA——如果有需要,可以學習VBA編程,而一般情況的重複性的操作也可以直接通過「錄製宏」來達到簡化操作的目的。
SPSS
「Excel的功能只被大多數人使用了10%」,「SPSS的功能只被大多數人使用了50%」,剩下的50%是SPSS的Syntax(語句)。
除了結構方程模型和其他更高級的多元統計,SPSS已經能滿足心理學研究者大部分的統計需求了,而且具有操作簡便、掌握容易的優點。但是,如果只是滿足於菜單化的「點點點」操作,那麼還不算真正掌握SPSS。
一個比較好的習慣是:保留原始數據,然後記錄下每一步分析的syntax(可以在菜單裡面點paste粘貼,熟練之後也可以自己寫),再保存這個syntax文件。這樣,無論是再做一遍分析,還是以後自己回過頭來看當時做了什麼分析,抑或是給別人看分析的流程,都是極方便的。每一次分析都只需打開原始數據和syntax文件,運行語句就OK了。這其實已經是所謂的「編程」,遠比菜單操作高效和規範。
SPSS的優勢主要有:
- 使用方便,分析方便,變數的各種參數設置也是可視化的。
- 可菜單,可編程,編程時更靈活,可直接調整參數,有利於重複分析。
- 可以滿足某些小眾但又關鍵的統計需求(比如方差分析時的簡單效應檢驗,需要編寫MANOVA語句,目前還不清楚其他軟體能不能實現簡單效應檢驗)。
- 藉助Hayes開發的PROCESS宏插件,可以很方便地進行各種中介效應、調節效應分析,並估計Bootstrap置信區間。
R
R語言是比SPSS功能更強大的數據分析工具,也是比Excel功能更強大的數據可視化工具,還能滿足其他的很多功能需求(比如網路爬蟲、機器學習)。一般需要配上RStudio編輯器使用。
R的優勢主要有:
- 軟體免費,功能包開源且豐富且強大,基本能實現所有的統計功能。
- 語句比較簡單,代碼量少而精。
- 數據可視化絕對是R最大的優勢。
Mplus
Mplus是眾多的專門用於結構方程模型的統計軟體里,相對優秀而高效的一款。
AMOS雖然是圖形化界面操作,但是變數一多絕對會很麻煩,容易出錯;LISREL輸出的指標多一些,但是編程難度比較大,不容易掌握。而Mplus只需要一點點的編程,就可以靈活方便地實現大多數的多元統計,輸出的指標也是足夠研究者使用的,性價比非常高。
Python
Python是目前很熱門的語言,免費開源、代碼簡潔、開發高效,利用Python可以完成很多事情。不過Python 2.x 和 3.x 的各種差異還是挺讓人無奈的。Python雖然也能做統計分析,但是R在統計方面似乎更友好一些。
對於心理學研究者而言,Python的可利用價值主要在:
- 網路爬蟲(當然R也行)。
- 機器學習(當然R也行)。
- PsychoPy用於實驗程序的編寫。
- 輕量級的基礎編程語言,對於編程入門比較有幫助。
PsychoPy目前使用的人並不很多,它的特點主要有:
- 免費,開源,輕量。
- 可菜單,可編程。
- 實驗流程可以設計得更靈活,代碼量與MATLAB的PsychToolBox差不多。
- 目前只支持Python 2.x,算是一個不足。
MATLAB
MATLAB+PsychToolBox能實現非常靈活的實驗編程,也能對數據進行預處理和輸出(當然Python也行)。MATLAB本身也是非常優秀的科學軟體,擅長對矩陣的操作和計算。
總結起來,MATLAB+PTB的搭配能滿足的就是一項心理學實驗從無到有的「一條龍」服務(從被試信息採集,到完成實驗,再到數據預處理和輸出;當然Python也行)。
基於MATLAB的EEG、fMRI等功能包也非常優秀(當然Python也有類似的功能)。
E-Prime
最基本和普及的實驗軟體,菜單操作,偶爾需要一點編程(也就是裡面的inline,語法和VB相似)。雖然掌握起來更簡單,但是軟體不是免費的,可實現的功能也少一些,不夠靈活。
總的來看,實驗編程,學MATLAB或者Python的性價比更高一些。但對於心理學初學者而言,E-Prime還是有必要學習和掌握的,有利於在頭腦里形成一套心理學實驗流程框架的原型。
總結
Excel是萬事之基礎。
統計:SPSS入門,R提升,Mplus可選。
實驗:E-Prime入門,MATLAB或Python提升。
(這裡只涉及了最基本的研究需要,如果你的研究有比較特殊的要求,當然就需要學習更專門化的、領域特殊的技能了)
一個掉書袋式的回答就是,有多少人知道SPSS中ANOVA的運算用的是type I II or III演算法。一言蔽之就是你研究多深的問題你就需要多精細,順手的工具。在Human Factors這個分支經常跟CS,EE,CE打交道你不懂編程的話怎麼跟同志們有共同語言呢?而且說實話我感受到Engineers對心理學深深地歧視,所以我感覺編程和統計,數據是能讓心理學變成硬科學的三大利器,特別有利於跨學科交流。再者,用關傻瓜軟體在看別人文章的時候不容易發現問題or貓膩。也是本話題的核心「容易受制於人」 易於接受別人的研究結果,不懂得如何質疑。第三對於自己,我會SPSS和R的話,用兩種處理,出錯概率更小。對於臨床和社會心理,如果統計和編程好可以用meta analysis檢驗各種已有的問卷,可以橫向比較對於同一個問題或案例不同文獻的effect size。不懂得這部分的話,就像在二維空間,依然可以在自己的世界裡愉快生活嘛。
無意發現這個問題,根據本人經驗做點補充。
這裡指代廣義的編程語言,包括一些軟體。粗通即可。
1) 定性研究(訪談、小組討論、案例寫作等)
Atlas.ti或者Nvivo2) 問卷研究
標配自然是SPSS(用於統計)。然而當前簡單的單層關係研究已經很難有好的發表了,包括認知領域目前好像也需要搞多層建模了,所以還需要如下軟體:結構方程模型:LISREL, AMOS, M-Plus多層模型:HLM, M-Plus再進階一點的統計分析,或許要學習R/Python/Matlab。不過看起來學R或者Python性價比更高。3) 行為實驗主流選擇E-Prime然而實驗呈現完全可以選用你自己熟悉的語言,VB或者Python都是挺好的。(答主會說用ASP做過一個有關網頁中廣告的研究嘛)答主本人曾經上實驗心理學時還接觸過一個傻瓜式編程軟體Presentation,如果沒有反應時的要求,倒是也能使用。作為心理學的學生,你如果編程足夠好,那麼.....你就可以成為一個程序員。
一個合格的研究者首先應該拋棄嚴重阻礙心理測量融入心理學的spss
一個合格的研究者不應該是一個只會下載R包,只會調用高層次API,只會照著別人的框架寫callback函數的搬磚碼農
一個合格的研究者應該對並發編程談笑風生,即使面對python的GIL拖累了你的計算速度,你也能優雅的從五十種克服GIL的方法中隨意找出一種
一個合格的研究者面對python或R龜一般的速度時,優雅的打開vim寫c擴展
一個合格的研究者也是應該拋棄java的,是的,也許你說你想搞搞大數據,那麼你應該優雅的擁抱scala
一個合格的研究者應該對matlab吐口痰,因為它收費昂貴、體積龐大且速度慢的像頭牛
一個合格的研究者應該對SAS吐第二口痰,因為它不僅昂貴,語法還忒么的反人類
一個合格的研究者。。。大二的時候自學inqusit,感覺真的很有用,而且SPSS都是最基礎的,老師們在算數據上都是一把老手,編程大概就是可以讓心理實驗的控制變數完全得到控制,減少無關變數到最小,得到最漂亮的數據~
cs學的一聲不響半瓶晃蕩也許無法在業界立足,但轉到心理學絕對秒殺諸等心理學狗。其實心理學學生最大的煩惱之一就在於太多的理工科班門外漢竟然進來奪了他們的飯碗,還混的風生水起。
會編程技能,對研究程序猿很重要 :)
研究的結果需要數據的支撐,那對數據的計算和分析就離不開計算機語言的處理。況且需要支持自己的研究內容的數據,編程語言,就是能最大限度的滿足自定義分析處理數據的過程。
推薦閱讀:
※Improving your statistical inferences第二周(2):貝葉斯方法
※質性研究比起定量研究會更多依賴研究者本人的研究經驗么?