序列分析工具 Sequential Analysis Tool
說明
此方法是參考Bakeman跟Gottman(1986)介紹序列分析的書本歸納出來,方便大家計算。計算過程如有任何問題或錯誤,請務必在下面留言告知,感謝。
參考文獻
- Bakeman, R. (1986). Observing interaction : an introduction to sequential analysis. Cambridge ;New York: Cambridge University Press.
修改記事
- 2011/1/25: 修正「不可重複(強迫忽略重複的編碼順序)」的模式下計算錯誤的問題
- 2010/12/30: 不可重複功能加入強迫忽略重複的編碼順序功能。 重新調整演算法。加入同時發生多次編碼的資料結構。
http://edugate.fss.uu.nl/mepa/index.htm
回覆刪除侯老師推薦我用這個工具,MEPA (Multiple Episode Protocol Analysis)
可是網站上沒有直接下載的連結……看來是要寫信去問了。
請問 版主大大:您有要到軟體了嗎?
回覆刪除後來我沒去要,倒是學妹研究有用到而去要了,但要到時論文已經來不及了 TwT
回覆刪除你需要的話,還是寫信跟原作者要吧
版主您好~
回覆刪除感謝您的分享!讓我受益良多
然後想請問,如果編碼超過26個,無法以AB~Z表示完全部編碼該怎麼辦呢? 謝謝您!
To Yun:
回覆刪除用數字跟國字都可以喔 _A_
把你的留言輸入進去就會得到以下結果:
編碼次數:58
序列次數:54
片段次數:4
編碼列表:版, 主, 您, 好, ~, 感, 謝, 的, 分, 享, !, 讓, 我, 受, 益, 良, 多, 然, 後, 想, 請, 問, ,, 如, 果, 編, 碼, 超, 過, 2, 6, 個, 無, 法, 以, A, B, Z, 表, 示, 完, 全, 部, 該, 怎, 麼, 辦, 呢, ?
編碼重複:可
後面就不列了,這樣懂了嗎?
以上是從程式技術的角度來說明,不過我覺得更重要的是,要從研究角度來告訴你的事情。
回覆刪除序列分析的觀察編碼種類不宜太多。
序列分析的目的是在看編碼轉換到下一個編碼的序列有沒有統計上的顯著性,如果你的編碼種類很多,表示序列會有很多種組合,那麼就很難有其中一種序列會是明顯地常常發生。
序列分析跟資料探勘中的關聯式規則並不相同,也許你要的方法是後者也說不定?
謝謝版主解惑!
回覆刪除關聯式規則我會去研究看看,感謝您的回覆與建議^^
加油
回覆刪除關聯式規則也是很有趣的!
版主你好
回覆刪除想請教一下,由同一份資料進行重複編碼與無重複編碼所計算出來的"編碼頻率與機率表"是一樣的值,可是無重複編碼所產生的"編碼轉換期望機率表(first-order model)"的值卻不一樣,不知道這是怎麼計算出來的?
To CY Tsai:
回覆刪除請把你的樣本數據寫上來給我看一下,讓我方半講解可以嗎?
作者已經移除這則留言。
回覆刪除阿,不是,我是想知道你的「觀察樣本」,輸入在「觀察樣本」的資料是如何呢?
回覆刪除不方便寫在這邊的話也可以寄信給我
pulipuli.chen@gmail.com
版主你好
回覆刪除不知道你是否有收到我昨天寄的信@@"
喔喔,不好意思,該信被Gmail丟倒垃圾信去了orz
回覆刪除剛剛測試一下的確是有你說的問題
應該是bug
我晚點再修
終於修正了,請再試試看
回覆刪除版主你好
回覆刪除關於修正後的部分, 有幾個地方想請教, 就是在採用無重複編碼, 在結果輸出部分, 編碼次數的值會等於序列次數的值, 這個似乎與重複編碼的結果(序列次數的值會等於編碼次數扣掉片段次數)不一樣?
另外, 同樣在無重複編碼, 其編碼轉換期望機率表的值, 我採用重複編碼部分的計算方式計算, 還是無法得出相似的值, 不知道是不是採用無重複編碼的方式, 期望機率的值計算方式就不同嗎?
版主你好
回覆刪除又再次打擾了>"<
就是對於程式修正後的疑問部分是否可以幫忙解答@@"
To CY Tsai:
回覆刪除哎呀呀,最近比較忙所以就沒回覆了。
畢竟是兩年前寫的東西,理論都快忘記了。
你用序列分析之前有去看過Observing interaction : an introduction to sequential analysis這本書了嗎?
版主你好
回覆刪除不好意思在百忙之中打擾冏
因為之前沒借到版主推薦的那本書, 所以只看了Bakeman, R., & Quera, V. (2011). Sequential Analysis and Observational Methods for the Behavioral Sciences這一本, 不過裡面關於Sequential Analysis的計算分式, 倒是沒有很詳細的介紹, 所以目前是以版主寫的計算方式為主。只是目前對於在程式中無法用重複編碼的計算方式得到不可重複編碼的編碼轉換期望機率這部分感到困惑...。
我終於發現哪裡怪怪的了
回覆刪除為什麼你會覺得重複編碼跟不重複編碼的結果會一樣?
你的樣本刪除連續重複出現的編碼之後,編碼的轉換次數跟出現頻率都不一樣了
結果當然不同
如果你不懂序列分析的算法
那我還是會去建議你搞懂他再來用
以確保你真的知道你在算什麼
不重複的意思是
回覆刪除BBB
重複是當成B出現3次,B→B有2次
不重複是B出現1次,沒有轉換序列
版主你好
回覆刪除你可能誤會我的意思了, 我不是指重複編碼跟不重複編的結果一樣@@"
我覺得困惑的地方是指同一份資料(使用版主提供的觀察資料亦同), 若採用重複編碼的計算, 程式所產生出來的期望機率值, 是近似值, 這部分我覺得沒有問題, 但是若採用不重複編碼的計算方式, 在結果輸出部分的"編碼轉換期望機率表", 表格中所計算出來的值似乎跟從"編碼頻率與機率表"所計算出來的值, 有不少落差(非近似值), 所以我才會對這部分的計算感到困惑。
To: anthrop
回覆刪除請盡量集中到Blog的意見中發表,方便其他有相同問題的人查閱。
不過現在的問題是,我不是很懂你的資料類型為何。
問題1:單人跟多人
如果你把許多人當成同一種類型的觀察對象來看,例如現在有A對象跟B對象,A對象的行為編碼為「aabac」,B對象的行為編碼為「abbca」。
而A對象跟B對象都被你視為同一種類型的觀察對象,你想要探討這類型的對象會有什麼顯著的行為轉換,那你可以把這兩個對象的行為編碼以「一格空白」結合起來,變成「aabac abbca」,丟到上面工具來進行分析。
這個意思就是把A跟B視為同一種人,但是A最後的行為編碼「c」跟B開頭的行為編碼「a」並不是行為轉換。
這可能會是你要的解答,或是另一種。
續問題1:合作式學習的行為編碼
另一種問題是端看你的研究目的跟編碼的對象。
在合作式學習中,我們會把學生分成各小組,觀察每個組別是否有發生顯著的行為轉換。
以前做過的研究就是去為學生的「討論層次」進行編碼,層次由淺至深分成「c1」、「c2」、「c3」、「c4」以及聊天型的「c5」。
學生在討論區每一篇的討論文章都會賦予研究者認定的編碼。例如第一組有110篇文章,那麼第一組的編碼就會有110筆。我們就用這110筆去做分析,來觀察第一組有沒有特別顯著的行為轉換。
在這階段編碼完之後,你只會看到第一組所有的行為編碼,而分不清楚第一組裡面每一位成員的個別行為。
接著你可以用同樣方法來看第二組、第三組,或是把實驗組(第一組到第三組)湊在一起,跟控制組(第四組到第六組)湊在一起,比較實驗組與控制組的顯著行為序列轉換的差異。
好,那以小組為單位來分析之後,你可能會想要用另一種方式來分析了。
問題2:單人跟群組的差異
要比較單人與群組差異之前,有個問題是,你必須重新去設計你的編碼方式。
上述討論層次行為編碼的前提是從小組多人的情況下進行編碼,如果你現在想要觀察第一組的A同學跟B同學,他們個別的行為已經不是「小組討論的行為編碼」而是「個人在小組活動中的行為編碼」。請注意到這兩種觀察角度的差異,一不注意的話很容易被人挑毛病的喔。
那你現在已經用「個人在小組中的行為編碼」將A、B、C、D、E等五位同學編碼了,那你可以把五位同學的行為編碼湊在一起觀察,也可以單看A同學與五位同學的行為轉換有沒有異同。
大概就是這樣分析囉。
Dear布丁:謝謝你的解說。
回覆刪除回應朋友的來信:
回覆刪除1. 需要多少觀察樣本?
http://pulipuli.blogspot.tw/2010/12/sequential-analysis-introduction.html
這篇的投影片有介紹樣本公式,公式來自於Bakeman的書,書要好好看,搞懂為什麼是這樣算。
工具裡面也有一個「建議最少編碼轉換樣本數量表」
如果是6種編碼,就會顯示一下提示訊息:「※ 目前您的樣本數為64,未達建議最少個編碼轉換樣本數38034.00個」
所以就是不夠用的意思。
樣本數量建議多少是跟編碼種類有關。
2. 「期望機率模型」的Zero-order跟First-order的差別
先看介紹裡面的公式 http://pulipuli.blogspot.tw/2010/12/sequential-analysis-introduction.html
要瞭解公式中的「期望值」是怎麼來的,就是分成Zero-order跟First-order。
很多人都只是因為Zero-order有顯著就用Zero-order,
可是不懂Bakeman建立這兩種模型的影響。
這樣的求學態度不太好喔。
3. 是否觀察「編碼重複」?
如果你關注的是不同編碼之間的轉換,那就選「不可重複」。
舉例來說:
[可重複] 可能出現 G->G
[不可重複] 不可能出現G->G,因為在記算時就會被排除。
做3lag的分析也會出錯orz
回覆刪除真是很多bug
我做的序列分析工具有點問題,可以改用MEPA來分析:
回覆刪除http://pulipuli.blogspot.tw/2015/12/mepa.html
關於序列分析的介紹,我也把連結集中在這裡:
回覆刪除簡單的介紹:http://blog.pulipuli.info/2010/12/sequential-analysis-introduction.html
行為編碼與序列分析介紹:http://blog.pulipuli.info/2015/06/introduction-of-behavior-coding-and.html
編碼者間一致性信度:Cohen Kappa係數計算器 http://blog.pulipuli.info/2015/06/cohenkappa-cohens-kappa-coefficient.html
編碼結果轉序列編碼工具 http://blog.pulipuli.info/2015/06/coding-result-to-sequence-convertor.html
版主大大您好:
回覆刪除想請問關於 " 編碼結果轉序列編碼工具 http://blog.pulipuli.info/2015/06/coding-result-to-sequence-convertor.html " ,這編碼結果轉序列編碼工具用途是做什麼用的呢?
例如您的範例"2" ,轉換後變成 " 211332322211122232322314421552 " ?
如果不知道這是做什麼用的話,那就先不要用,沒關係的
刪除這世界上很多工具,不需要每一種都搞懂
但等妳真的想要用的時候,妳自然就知道了。
版主大大:
回覆刪除很抱歉我好多問題! 很感謝您耐心解惑! 想請問Lago, lag1, lag2,lag3 是甚麼意思呢 ? 我在Observing Interaction這本書裏頭看到說Lag1 被舉例來說是打雷的天數,而lag0被舉例來說365天 , 感覺上想要知道打雷的在一年當中的機率則打雷就設定為lag1,而一年365年則設定為lag0,所以我想要知道的編碼機率通常都設為lag1 是這原因嗎?但看了版主的編碼工具後才知道還有 lag2 and lag3,因此深感疑惑.
這個問題請看bakeman的書怎麼解釋lag
刪除一般而言序列分析都是設lag=2,表示觀察兩編碼序列轉換
最近因為計劃需要,我把序列分析的算法以PHP來撰寫
回覆刪除程式碼:https://github.com/pulipulichen/blogger/blob/gh-pages/posts/2016/07/20160720-sequential-anlysis/sa/sequential_analysis.class.php
使用範例
include_once 'sequential_analysis.class.php';
$obs = "ABABCBCA"; // 觀察序列
$codes = "ABS"; // 觀察編碼
$repeatable = FALSE; // 可否重複
$lag = 2; // 觀察序列長度
$sa = new Sequential_analysis($obs, $codes, $repeatable, $lag);
print_r($sa->export_sign_result("allison_liker"));
這次z-score算法除了zero-order 跟 first-order (這裡我改成叫做code frequency)之外,我還加入了Backman書中介紹的joint frequency跟Allison & Liker (1982)的算法。
最後推薦大家使用的是Allison & Liker的算法,一來是比較準確,二來是比較容易出現顯著。計算方式跟zero-order有很大的差別喔,以前的研究結果重跑的話,應該會有完全不一樣的結論吧。
Bakeman & Quera (1995)所開發的GSEQ軟體中計算z-score似乎也是用Allison & Liker的算法,叫做Allison and Liker z score
https://books.google.com.tw/books?redir_esc=y&hl=zh-TW&id=MJ3e1ap-338C&q=z-score#v=snippet&q=z-score&f=false
位於書本的P.85,8.1 Specifying statistics with the Stats command
但是我自己試著跟MEPA比較的結果,發現兩者還是不一樣
http://blog.pulipuli.info/2015/12/mepa.html#bc_0_1MC
我不清楚MEPA背後的計算方式,但至少我能確保我自己寫的程式邏輯是正確的吧。
作者已經移除這則留言。
回覆刪除版主大大抱歉,我在上面有看到了版主大大的方法了(問題1:單人跟多人,應該是這個對吧?)
刪除但還是想請問版主大大有辦法用MEPA分析多位受測者的行為嗎?
把多位受測者當做一位受測者的資料來分析即可。
回覆刪除當然,這中間的細節很多,不容易一言道之。
最重要的事情是,你的研究問題是什麼:
你想要看什麼東西?你期待出現什麼結果?你的研究希望得到什麼結果才符合預期。
如果你還沒想過這個問題,那建議你先想想看
我最近發現很多人來問序列分析問了老半天,結果他們要的根本就是不一樣的答案
這就像是有人一直問醫生感冒的症狀是什麼,要怎麼解決
但他其實得到的病是腸胃炎,不是感冒,醫生講老半天也只是傳遞科普知識,對解決病症沒有幫助。
所以還是建議你先講講看你想要得到的是什麼結果
講出來結果跟序列分析無關,這也無妨
至少我可能可以給你其他建議
我的座右銘之一:「沒有蠢問題」
放心,大家都是這樣一路蠢過來的,我也是如此
一起加油
不過有時候我一忙就不會馬上回覆就是了,請多包涵orz
Dear 布丁:
刪除感謝回覆,忽然發現布丁在【2016年5月30日 下午11:02
MEPA沒辦法處理break的問題喔
這我問過侯老師了】
已經做過回覆了,看起來是無法用MEPA作多個受測者的分析了.....
我主要想看的東西是把兩組的受測者的行為分別作行為序列分析
期望看到這兩組的在某些行為(ex:偏好使用什麼工具之類、使用的次數、頻率之類的)有什麼樣的不同
然後根據分析出來的結果,對照分析出來的資料(ex:平均成績以及平均使用頻率)有出現顯著差異的
希望看到其中一組因為某些行為導致分析資料的顯著性,差不多是這樣
原本這些東西有打在上面,不過上面的問題因為有點蠢所以刪掉了....
感謝布丁大大!!
我覺得這種資料只是單純的量化數值,跑獨立樣本t檢定就好了
刪除你說的偏好、次數跟頻率其實都是指同一種資料:次數
例如資料是這樣的:
實驗組, 使用A工具次數, 使用B工具次數
stu01, 5, 10
stu01, 3, 5
stu05, 8, 15
控制組, 使用A工具次數, 使用B工具次數
stu01, 10, 2
stu01, 13, 5
stu05, 28, 15
再來對「使用A工具次數」的平均數做兩組的獨立樣本t檢定比較
然後對「使用B工具次數」的平均數做兩組的獨立樣本t檢定比較
得知兩組之間有沒有顯著差異
有的話就可以證實是兩組之間的影響
但我猜有8成的機率直接從使用次數看不出來的
不過換成比例的話就看得出來了
不管怎麼說,我相信基本的獨立樣本t檢定就能搞定了
想想你的統計老師教的內容吧,不要迷信什麼序列分析了
Dear 布丁:
刪除OK,看來我跑的統計方式沒錯,至於行為序列分析的事情,我會再想想的,謝謝布丁!!
關於序列分析的介紹請看這篇:
回覆刪除http://blog.pulipuli.info/2016/10/php-introduction-of-behavior-coding-and.html#more
常見問題請看這邊
http://blog.pulipuli.info/2016/11/sequential-analysiss-q.html#more
你的一些問題可能可以在這裡獲得解答吧?
有的,我發現【行為編碼與序列分析演講投影片】的P78有點像是我現在的情況
刪除應該可以用一人一行的方式下去分析
不過這些東西我目前還需要點時間吸收~,介紹的真詳細!!
謝謝布丁!!
然後關於MEPA操作的問題,我所知甚少,我也不覺得有特別必要用MEPA,因為沒我自己寫的程式來得靈活
回覆刪除如有問題建議你自行摸索吧
關於這件事我跟布丁有相同的看法 ^ ^
刪除請問布丁 如果類似於序列分析AABBCCDD這種行為模式分析 若使用R 語言的話 建議使用哪一個PACKAGE?
回覆刪除您好,
刪除我對R不熟,不知道有沒有這種的package喔。
因為計算上不是很困難,我建議可以自己撰寫即可。
謝謝您的解答,因為使用R的arulesSequences 感覺支持度數據怪怪的,不會解讀。
回覆刪除另外您的PHP程式是否不支援lag>2 ? 嘗試了幾次感覺數值怪怪的。
GSEQ軟體有DATA的輸入格式嗎? 試了幾次都沒成功
您好,
刪除http://blog.pulipuli.info/2016/10/php-introduction-of-behavior-coding-and.html
PHP版本只有作lag 2
因為Bakeman書裡面也只有講到lag 2的做法
這個網頁可以用更多lag的方法是我自己想的,不一定準確,不建議使用
GSEQ我不熟,無法提供建議
arulesSequences支持度會奇怪嗎?怎麼說呢?
因為我的數據是猜拳的序列【CRPCRRRPPCRP】 只有三個元素 全部丟下去跑的話 所以呈現的支持度都是1
刪除看原理他好像是先將所有可能性列出來 再去列出在哪一個序列出現
但是我的數據就是猜拳30次的結果 故所有的支持度都是1
想探討猜拳是否有重複的頻率模式出現
您好,
刪除我看了很久...才發現你是在問循序樣式探勘的問題
我想你可能沒搞懂循序樣式探勘的情況
1. 要有很多人
2. 要有很多種不同的事件
3. 要有很多長短不一的事件數量
4. 每個人的事件數量不能太短
這樣子來看循序樣式探勘才有意義
還是去看一下循序樣式探勘的範例資料再來想想要用什麼方法吧
他們要解決的問題是差很多的
是阿 我就是看過範例 看過跑出來的數據 又扒過一些文才發現好像不適合。
刪除雖然猜拳的數據一個人有10組以上 每次30筆 但是依照他們的循序樣式探勘真的不適合 【arulesSequences arules】
您的序列分析比較像我在找的
請問您還有甚麼建議可以分析這類型的數據嗎?
我的數據分析目的在於找到猜拳的規則(也就是類似一組比較頻繁出現的猜拳序列)
具體來說,什麼會是你預期的頻繁序列?
刪除如果你要頻繁序列的話,那循序樣式探勘很適合
支持度1表示真的所有人都有這樣的模式,也就是你要的答案
很不錯不是嗎?
理論上是這樣說沒錯,有支持度1當然是很好。
刪除但是1個人15組資料跑 支持度都是1 其中某些序列我自己拆解 還沒存在 (類似您抓兩字元、3字元的方式拆解)
這樣就很怪了
再說,無論誰的數據都是支持度1(所有列出來的RULE) 這樣應該就不太合理了吧。
沒看過資料很難判斷,不過我是沒遇到這種情況過
刪除舉例來說:觀察序列事件
CRPCRRRPPCRP
1234567890123 <-位置
你可能以為前三個({C},{R},{P})是序列
但其實中間跳著的({C},{C},{C})也是序列
同樣地({C},{P},{R},{C})這樣子也是序列,雖然沒有C->P、P->R、R->C,但是在循序樣式探勘中,中間隔多少事件都無所謂,反正整體來看這個事件都有按照順序發生
第一個C在位置1
第二個P在位置3
第二個R在位置5
第二個C在位置11
因此組成序列({C},{P},{R},{C})
你確認看看找到的序列是不是如此
再來想想你是不是真的想要找的是序列?
是的 您說的沒錯 無論格多遠 只要是({C},{R},{P}) 有依照這樣產生就算。
回覆刪除但是我發現 有個時候反過來 他也算。
以下面為例 換成 "sequenceID","eventID", "items"
1 1 S R P S S S R
2 1 S R R S S R R
3 1 S P R R S R R
s2 <- cspade(x1,
parameter = list(support = 1, maxsize = 3, maxlen = 3),
control = list(verbose =TRUE, tidLists = TRUE),
tmpdir = tempdir())
as(s2, "data.frame")
===>
sequence support
1 <{R}> 1
2 <{S}> 1
3 <{R,S}> 1
果真不是我要的序列 ,我認為的序列是連續的存在,不是這樣只有先後的概念。
所以果真不適用,謝謝布丁的解釋,讓我更加確認
我的資料會長度一致(items總數)
回覆刪除只是有的時候eventID會呈現多筆,因為我把sequenceID當成一個人,eventID當成組來看。
sID eID items
1 1 S R P S S S R
1 2 S P P R S R R
1 3 S R P S S S R
2 1 R R R S P R R
2 2 P R P S S R R
3 1 S P R R S R R
等一下等一下等一下!
刪除sID eID items
1 1 S R P S S S R
這是表示編號1的人,他在時間1的時候,同時做了S, R, P, S, S, S, R這7個事件
如果你要依序表示這個人作的序列,要這樣寫
sID,eID,items
1,1,S
1,2,R
1,3,P
1,4,S
1,5,S
1,6,S
1,7,R
如果你有編號1的人做了兩個序列,那你應該要把它拆開成兩個人看待
sID,eID,items
1,1,S
1,2,R
1,3,P
2,1,S
2,2,S
2,3,S
2,4,R
不要搞錯了!!
所以這樣的意思是表示 一個人反覆次數做的N次 就是N個不同的序列。
回覆刪除這裡不能看不同人之間的關係,最多只能看同一個人 N個序列中的最頻繁序列。
我再試試看 謝謝您的指導
不、不是的,你誤解了他的意思
刪除舉例來說資料:
sID,eID,items
1,1,S
1,2,R
1,3,P
2,1,S
2,2,S
2,3,S
2,4,R
可以找出兩個人共同的序列 ({S},{R})
編號1的人有,編號2的人也有
這樣就可以找出很多人都有的最大序列
並不是看一個人,是看很多人
不過以這樣來說 表示編號一有出現 編號2也有出現 SUPPORT =1
回覆刪除就算是有很多序列 ({S},{R})出現,也容易造成support=1
回到最根本的問題 序列我搞錯意思了
回覆刪除循序樣式探勘中,中間隔多少事件都無所謂,反正整體來看這個事件都有按照順序發生==>這才是重點!
更謝謝布丁在這裡的指導與解說
嗯,對的
刪除就算有很多人、很多事件,也可以從中挑出大家都有的共同模式
這才是循序樣式探勘的珍貴之處
不好意思版主大大
回覆刪除我使用到的是zscore
想要請問是否他計算出的值越大就代表關聯越強烈呢
z-score就是...統計課教推論統計的第一章講的標準分數
刪除https://www.wikiwand.com/zh-tw/%E6%A8%99%E6%BA%96%E5%88%86%E6%95%B8
原始的z-score是這樣算的:z=(樣本觀察值-母體平均值)/母體標準差
在序列分析裡面,z-score的算法有很多種
不過大致上算完之後的用法是一樣的
https://www.wikiwand.com/en/1.96
z-score大於1.96表示這個次數已經大於97.5%的其他序列
z-score越大的話就是這個次數出現次數越多
關聯嗎...關聯應該會算相關係數Yule'Q值之類的
Bakeman第二版的書裡面有講怎麼算
Bakeman, R., & Gottman, J. M. (1997). Observing interaction: an introduction to sequential analysis. Cambridge: University Press.
我這學期的課也有教怎麼算
簡單的計算機就用這個吧,這裡面也有Yule's Q的算法
https://pulipulichen.github.io/blog-pulipuli-info-data-2017/05/lag-sequential-analysis/