:::

行為順序檢定:滯後序列分析 / Behavior Analysis: Lag Sequential Analysis

image

這是巨量資料探勘與統計應用課程的投影片「行為順序檢定:序列分析」。本單元是屬於系列課程中的「資料檢定級」的最後一個單元,處理資料類型也是在行為的「類別」類型資料,使用的分析技術就是以前我常常提到的滯後序列探勘(lag sequential analysis)。滯後序列分析是延伸前一單元列聯表的檢定方式,但是不像卡方統計量是用於檢定整體列聯表,它使用Allison與Liker(1982)的調整後殘差計算方式來做細格檢定。雖然資料類型都以列聯表呈現,不過計算方法可是差很多的喔。跟以前我介紹滯後序列分析的內容相比,這次不僅採用比較嚴謹的Allison與Liker的計算方法,還加入了相關係數Yule'Q的計算,並直接用jsPlumb畫出了事件轉移圖。本單元使用我所開發的滯後序列分析計算器來作計算,包含兩個實作學習單跟一份測驗,供同學邊看邊練習。


單元大綱 / Outline

  1. 行為序列資料表
  2. 滯後序列分析
  3. 滯後序列分析:樣本統計量 事件轉移表
  4. 滯後序列分析:檢定統計量 調整後的殘差
  5. 實作:序列分析
  6. 深入探討序列分析
  7. 課堂練習:幼兒平行遊戲行為研究
  8. 序列分析的應用

投影片 / Slide

我以Google簡報的檔案匯出成PPTX,再備份到以下位置:

結論寫作框架 / Result Framework

請參考以下結論框架,將底線的文字改為合適的內容,完成滯後序列分析的結論吧。

研究目的
本研究使用序列分析來檢定(研究對象)的行為序列資料中(寫出每一個事件「編碼」)之間是否有顯著轉移。
樣本敘述統計量

研究對象共(研究對象數量)位,事件總數為(事件總數)次。

(每個事件編碼都寫一次)

  • 事件「(事件編碼)」出現次數為(出現頻率)次,佔(出現百分比)

雙事件轉移序列總數為(序列總數)次。

序列分析結果
有顯著轉移序列的寫法:

序列分析結果顯示,

  • 事件「(事件編碼)」到事件「(事件編碼)」,調整後殘差為(調整後殘差)

以上序列出現顯著轉移。

(視情況精簡摘要結果吧)

無顯著轉移序列的寫法:

序列分析結果顯示,沒有序列達到顯著轉移。

事件轉移圖 (如果整體統計檢定達到顯著才寫)

(可截取序列分析計算器的事件轉移圖)

舉例來說,像是:

研究目的
本研究使用序列分析來檢定遊客的行為序列資料中事件「A 熱帶莽原區」、事件「B 叢林區」與事件「C 沙漠區」之間是否有顯著轉移。
樣本敘述統計量

研究對象共1位,事件總數為10次。

  • 事件「A 熱帶莽原區」出現次數為4次,佔40%
  • 事件「B 叢林區」出現次數為3次,佔30%
  • 事件「C 沙漠區」出現次數為3次,佔30%

雙事件轉移序列總數為9次。

序列分析結果
有顯著轉移序列的寫法:

序列分析結果顯示,

  • 序列分析結果顯示,事件「C 沙漠區」到事件「A 熱帶莽原區」調整後殘差為2.268,該序列呈現顯著轉移。

以上序列出現顯著轉移。

事件轉移圖 (如果整體統計檢定達到顯著才寫)

2017-05-15_223207

學習單 / Worksheets

image

本單元包含了以下的學習單,請搭配課程投影片一起練習吧。

測驗 / Examine

image

本單元整理了一份測驗,供同學驗證所學:

資料集 / Dataset

image

本單元用到了以下資料:

線上操作平臺 / Online Workplace

google_drive Alecive-Flatwoken-Apps-Google-Drive-Forms

以上的實作不需用到本機端的軟體,全部使用以下雲端服務。建議使用Google Chrome瀏覽器開啟:

計算器 / Calculator


行為序列資料格式 / Behavior sequential data format

image

儘管Bakeman跟Gottman在書中有介紹過幾種行為編碼的格式,但是我在考慮到從資料庫取得資料與記錄的方便性後,還是決定制訂一份比較簡單的行為序列資料格式。這個格式包含了三個欄位:

  • 研究對象編號:可以是數字或文字,用來辨識不同的研究對象。
  • 序列編號:必須是數字,用來表示行為順序。如果是時間格式,請把它換成數字,例如換成Unix時間
  • 事件:可以是數字或文字,用來研究對象在該時間點作的事情。如果研究對象在同一個時間點做了兩個事件,那可以用兩行相同的研究對象編號、序列編號,記錄不同的事件。

image12

我在另一篇「循序樣式探勘:以Python的PrefixSpan實作」也是採用相同的格式。也就是說,同一份行為序列資料,我們既可以用滯後序列來分析,也可以用循序樣式探勘來分析。至於我早先寫的序列分析工具循序樣式探勘工具,就不要再使用了吧。

對滯後序列分析的誤解 / Misunderstanding about Lag Sequential Analysis

2017-10-03_135522

儘管這件事情我一直有在各個介紹中強調,但很遺憾的是,我還是常常聽到有人對序列分析結果有著錯誤的解讀方式。以上圖的表格來說,C->A的2次出現了顯著轉移,許多人就會解讀為「研究對象很常作C到A的動作」,但這樣解讀是錯誤的,這樣侯老師又要難過了。仔細看看表格的內容,不僅C->A是2次,連A->B與B->C也都是2次。顯然的,「很常作C到A的動作」這個說法並不合理,因為研究對象也很常作「A到B」與「B到C」啊。

那為何只有C->A的2次被視為顯著轉移呢?讓我們更仔細地閱讀表格,你會發現到研究對象只要作C的時候,下一個動作事件全部都會是A。另一方面,A之後的下一步可能會是A (1次)、B (2次)、C (1次);B之後的下一步可能會是B (1次)或C (2次)。可以看出C之後預測A的機率是100%,因此C->A才會顯著。詳細的公式就請參考投影片吧。

因此,我們不能說「研究對象很常作C到A的動作」,應該說「研究對象只要作了C,下一步很高的機會會做A」。至於研究對象到底很常作C->A、A->B、B->C的那種組合,不好意思,這不是滯後序列分析要回答的問題,但你可能可以在滯後序列分析找到這個答案,請見我所介紹的另一篇「循序樣式探勘:以Python的PrefixSpan實作」。

為什麼不用卡方檢定? / Limitation of Chi-square test

image

雖然滯後序列分析也是列聯表的一種分析方法,但是卻不是用卡方檢定來分析。這個原因在Bakeman與Gottman的書中也有說明。這是因為卡方檢定對資料有所要求,資料的樣本數量最好超過30以上,而列聯表的細格為0的數量不可以超過細格總數的1/4。但是在行為序列的事件轉移表中,研究對象不太可能會發生所有事件組合都平均做過數次的情況,因此勢必會有很多細格會以0表示。這就造成了行為序列轉換不能用卡方檢定,而是要用滯後序列分析的原因。


    小結 / In closing

    image

    繼上一次卡方檢定講的太簡單,導致很快就教完的教訓。這次講滯後序列分析時我就特別花多點時間在介紹不同的例子、計算方式與滯後序列分析的延伸應用。這次調整授課方式的結果,反而讓整個授課流程稍微有點緊湊了,好像也應該適度地刪減一些內容啊?

    不管怎麼說,在講過很多次滯後序列分析的研究後,我覺得這次教課的內容應該是最容易讓人理解,另外撰寫的滯後序列分析計算器也是至今為止最好用的一個。

    image

    而且這次的滯後序列分析計算器不僅只是算出報表,還有搭配結論寫作框架的文字結論,以及基於資料敘述級分析步驟所提到的「先把資料畫成圖」的原則,直接在網頁上呈現了行為序列轉移圖,我自己還蠻滿意的。

    寫到這裡忽然想起來應該還要加上樣本敘述統計量的圓餅圖,不過這次就先這樣吧,如果下次還要講的話,我再來繼續改進。

    這份滯後序列分析計算器做完後,就直接應用到該屆學弟妹的碩士論文中,分析出許多令人感興趣的結果,他們也就順利畢業了。而我,呃……還在寫blog……

    紀念動物朋友 / For Kemono Friends

    image

    眼力不錯的讀者也許會發現本單元裡面出現了很多「動物朋友」的畫面。在教完這堂課的時候,有位學生很驚訝地跟我說:「原來老師也很宅!」但事實上這系列課程在第一堂介紹時就已經出現柯南跟Pokemon Go,第二堂資料的來源與形態時也有Pokemon跟死神等人物出場,看來要不是該同學的動漫知識不夠深,就可能是上課不夠認真吧?

    事實上,我為了在本單元想一個合適介紹行為序列的例子,可真的是花了我許多時間。最後我才想比較容易理解的「遊客所在區域事件序列資料表」,這例子也剛好比較容易讓同學套用在其他的現實案例中。畢竟像Bakeman等人在書中舉的觀察研究法,是真正的行為研究者才會去做的事情啊。而這個例子也就很剛好地跟去年的熱門動畫動物朋友搭上線,所以我以此為教材來教序列分析。上課的時候的確蠻能吸引同學們的注意,甚至還有同學在教學評鑑的建議是:「老師講的動漫都是去年的,希望老師可以引用新一點的動漫」,這個我沒辦法,只好在精力旺盛的追番黨前給跪了。

    f958b6d41da5e8071465a23dfef858b6

    (圖片來源:[達人專欄] 動物朋友撤換監督事件(燃燒的紙飛機))

    話說回來,其實我在把授課內容投影片放到blog的時候,都會對內容做一些調整,以免帶來過於侵權的爭議。特別是動物朋友幾乎貫穿這整個單元,我本來是有在考慮換掉所有內容,改成其他插畫或照片。不過最近動物朋友發生了角川公司撤換關鍵人物監督たつき、引發眾多觀眾怒火的事件。一想到未來可能再也看不到動物朋友這樣兼具知識與樂趣、還能引發現象級熱潮的作品,我想還是繼續把動物朋友留在這個單元的投影片內吧。

    關於動物朋友監督被撤換的事件的細節,請看等待著風的旅人所彙整的[達人專欄] 動物朋友撤換監督事件(燃燒的紙飛機)

    講到這邊,你對本單元的滯後序列分析有什麼看法呢?或是講到動物朋友,是否也讓你有些感慨呢?歡迎在下面留言說說你的想法,或是用左邊的AddThis按個讚或分享喔!

    總共24 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

    1. 想請問如果想做的分析是,使用者進行了什麼網頁瀏覽的序列會導致銷售成功率上升,這也適用於行為序列分析嗎。如果是,感覺要把這一整串瀏覽的序列,最後再加上銷售成功/銷售失敗的事件。在分析序列產生後,只關心哪些序列會走到銷售成功 / 銷售成功,不知我這樣理解是否正確,又或這是另一種領域的分析了?

      回覆刪除
      回覆
      1. To angusivam,

        如果是要用序列分析的方法來看,那會變成「銷售成功組/銷售失敗組會進行什麼瀏覽序列*轉換*」

        這樣子請先把網頁瀏覽序列分成兩組:銷售成功組 / 銷售失敗組

        然後用片段(break)的方式組合各組裡面不同人的網頁瀏覽序列
        https://docs.google.com/presentation/d/1uPTNQAXXSw9pxsy7-Q1RyHBb4XwB9JyTm_nBp38Cqcc/edit#slide=id.g167e18a6b9_0_238

        最後可以比較不同組別的行為模式
        https://docs.google.com/presentation/d/1SPyCUkx998B-fT2kYPSVwK7Lch_KwU7WoOdYTcYxdcY/edit#slide=id.g21b692f5b7_0_386

        但比較不同組的時候,請不要用z分數比較,使用相關係數比較
        https://docs.google.com/presentation/d/1SPyCUkx998B-fT2kYPSVwK7Lch_KwU7WoOdYTcYxdcY/edit#slide=id.g21b692f5b7_0_361
        這樣就可以了

        相關係數的計算方法請看投影片

        但序列分析只能做到雙事件的分析,不能分析到三個以上的連續事件
        https://docs.google.com/presentation/d/1SPyCUkx998B-fT2kYPSVwK7Lch_KwU7WoOdYTcYxdcY/edit#slide=id.g21ae494dc5_1_1506

        要看行為順序預測的話,請用動態貝氏網路
        http://blog.pulipuli.info/2017/10/behavior-prediction-dynamic-bayesian.html

        刪除
      2. 謝謝您回覆的這麼詳細

        刪除
      3. 不客氣,我想您的問題應該也是很多人想知道的問題
        這樣整理一下應該對大家都有幫助喔

        刪除
      4. 想請問您,用相關係數比較不同組,可以得出什麼樣的結論呢?
        假如實驗組C->A的相關係數大於對照組C->A的相關係數
        我可以說「實驗組做C之後去做A的機會比對照組大」嗎?

        刪除
      5. To hui,

        不能說「實驗組做C之後去做A的機會比對照組大」
        因為相關係數是跟其它事件轉移序列次數比較之後的結果

        只能說「實驗組C->A事件轉移序列的相關程度高於控制組」
        也就是對實驗組來說,相較於該組內的其它事件序列轉移,C->A的事件轉移序列相對頻率在排除掉樣本數量差異之後,其相關程度高於控制組。

        刪除
    2. 不好意思,我想請問一下
      因為有使用您的滯後序列分析計算器做計算
      表格中有一列是用Yule's Q公式計算相關係數
      我有去找Yule's Q相關文獻,但是看完該公式的定義,還是不懂如何將該公式套用並計算出結果
      可以幫忙舉個例子或列出簡略計算過程嗎,感恩您

      回覆刪除
      回覆
      1. To Lin,

        關於Yule's Q公式計算相關係數的部分

        在投影片108頁之後有講
        https://docs.google.com/presentation/d/1SPyCUkx998B-fT2kYPSVwK7Lch_KwU7WoOdYTcYxdcY/edit#slide=id.g21b692f5b7_0_361
        計算公式在投影片裡面。

        不過回頭看看投影片,好像沒有講很多Yule's Q相關係數的事情。
        簡單來說,Yule's Q相關係數會用於比較人數、序列長度不同兩組的序列上。

        https://lh3.googleusercontent.com/-TOFEMXhdJVs/XA0hyTof2hI/AAAAAAAD7gE/mifXF4r8f18KO7Q4Dv905AxOPwWql7UTQCHMYCw/s0/2018-12-09_22-06-49.png
        例如這張圖的「實驗組」跟「控制組」。

        要比較兩組的時候,請不要用調整後殘差,應使用相關係數。

        刪除
    3. https://blog.pulipuli.info/2005/12/blogger_113544406852218769.html?showComment=1516262362587#c2290619181952601935
      之前有位讀者提問,在按下計算器中「事件轉移表編輯器」下方的「增加事件編碼」按鈕之後,持續新增的編碼都會是G G G G。

      我在某次修正後,按下增加事件編碼,編輯器會增加一個「E8」,再按下去會增加「E9」。這個是預設好的編號,意思是「Event No.8」、「Event No.9」。
      但編輯器會強制依照字母順序排序,現在沒辦法自由調整喔。

      回覆刪除
    4. 老师,您好。

      在您ppt60页中提到的错误结论,如果要描述1-》2-》的这样子的行为序列,还需要什么数据呢?您能具体阐释一下吗?
      谢谢老师的回答

      回覆刪除
      回覆
      1. To yidanzhong,

        如果要解釋二階以上的事件序列,根據Roger Bakeman的建議,需要使用對數線性分析(log-linear analysis)。
        對數線性分析是列聯表分析中三種以上類別屬性的分析方法。傳統的卡方獨立性檢定(the chi-squared test of independence)是檢測兩個類別變數間的關係,而對數線性模式則是用來分析更多類別變數時使用。

        Bakeman所開發的程式ILOG下載位置如下:
        https://bakeman.gsucreate.org/download-ilog/
        但是光看軟體本身,仍然不能瞭解其意義。

        關於對數線性分析應用於行為分析的用法,需要參考這本書:
        Bakeman, Roger, and Byron F. Robinson. 2013. Understanding Log-Linear Analysis With Ilog: An Interactive Approach. Psychology Press.
        但這本書我在臺灣找不到。

        我也參考了其他介紹對數線性分析的書,有些書籍是寫「對數線性模型」、「三維列聯表分析」或是「三向列聯表分析」。但每本書的作法都不太一樣,而且大多是公式推演,找不到實際可用的工具,所以我就沒有特別繼續鑽研下去。

        -------

        因為從推論統計的角度似乎會越來越鑽牛角尖,所以我採取了另一種嘗試解決這個問題的方法:動態貝氏網路
        這是用機器學習的方式,以貝氏網路演算法來建立預測模型。

        關於動態貝氏網路的討論,請看這篇:
        http://blog.pulipuli.info/2017/10/behavior-prediction-dynamic-bayesian.html

        動態貝氏網路的建模很簡單,也很容易加入到系統應用中。
        但是並不是用來檢定此模式是否達到非隨機性的作法。

        -------

        以前我做的序列分析可以看更長的觀察序列
        http://blog.pulipuli.info/2010/12/sequential-analysis-tool.html
        但這部分的公式是我自己提出來的,並非現有書籍或論文上的作法。
        因此我不建議大家使用。

        我對這個議題的瞭解大致上到這裡,歡迎討論。

        刪除
    5. 最近發現了繪製社會網路圖的另一個好用的工具:sigma.js
      http://sigmajs.org/

      範例中的parallel-edges.html可以呈現出類似於滯後序列分析所需要的網路圖:
      https://github.com/pulipulichen/sigma.js/blob/master/examples/parallel-edges.html

      圖形展示:
      https://pulipulichen.github.io/sigma.js/examples/parallel-edges.html
      http://3.bp.blogspot.com/-aJ0w1HWMVEA/XPPCjTTMb-I/AAAAAAAEQw4/wL-Uu4DK_5oAiVfXA2c2K7VfU0FvGbi6ACK4BGAYYCw/s1600/2019-06-02_203310.png

      這樣就能繪製事件轉移圖了。

      原本我使用的jsPlumb缺乏力導向排版(force-directed layout)的演算法,所以只能自己手動拉節點來排版。
      相較之下,sigma.js專業得多。

      有機會再來把它實作出來吧。

      回覆刪除
      回覆
      1. 匯出成SVG的語法請參考這個範例:
        https://github.com/pulipulichen/sigma.js/blob/master/examples/svg-export.html#L139

        刪除
    6. 我最近需要分析有大量不同事件的資料,赫然發現這個JavaScript版本不能跑。

      不能跑的原因是在瀏覽器上執行分析的速度過慢,又沒有使用非同步機制來緩衝,所以大量資料基本上是沒辦法分析的。

      解決方法是使用PHP版本來分析:
      http://blog.pulipuli.info/2016/10/php-introduction-of-behavior-coding-and.html

      回覆刪除
    7. 最近有朋友在問說為什麼工具不能運作。

      這可能是我改到一半...然後就忘記改完它(遮臉)

      你可以在這裡留言,提醒我記得把它修好。
      也可以直接下載整個工具的程式碼,在你的電腦執行它。

      所有的程式碼都擺在GitHub專案保存庫上:
      https://github.com/pulipulichen/HTML-Lag-Sequential-Analysis
      你可參考一下方法來下載整個程式碼:
      http://blog.pulipuli.info/2016/05/github-how-to-download-files-in-github.html#postcatagithub-how-to-download-files-in-github.html0_anchor0

      回覆刪除
    8. 老師您好
      我的資料是觀察受試者在完成任務的過程中出現的行為,每個受試者出現的行為次數差異相當大。我擔心滯後序列分析的方式將所有受試者資料合併計算,會產生偏誤(例如特定受試者有在行為A→B發生率異於其他人)。除了自己設定某些標準,例如總行為次數要低於多少,是否有其他解套辦法?也請老師推薦參考資料,謝謝。

      回覆刪除
      回覆
      1. 您好,

        滯後序列分析的計算方式是綜合考量了比例和次數總數這兩種因素。根據您的敘述,您資料的差異是次數總數(行為次數差異相當大),但是您擔心的卻是比例差異(發生率異於常人)。

        從上述可知,您是不是只是看到「滯後序列分析」就來用了,但並不知道「滯後序列分析」到底是在檢定什麼呢?
        的確很多人直接將「行為分析」跟「滯後序列分析」畫上等號,不過您實作後就可以發現,其實並不是如此。

        至於其他問題的回答如下:

        # 1. 自己設定某些標準或是其他解套方法?

        嗯,您要不要考慮其他直接檢定單次行為次數的統計方法,像是卡方獨立性檢定。
        其實很多人想要分析的層次都只是單次行為的差異,並不是行為序列。

        「為什麼您想要分析行為序列?」
        除了有人跟您說行為分析就是滯後序列分析之外,如果您沒有什麼充分理由的話,那通常您的行為分析都只是在比較單次的行為次數而已。

        關於卡方獨立性檢定的介紹,請看以下這篇:
        https://blog.pulipuli.info/2017/10/correlations-with-categorical-variables.html

        # 2. 行為次數要低於多少?

        Bakeman的書中介紹了推薦最低的觀察樣本數量門檻。達到此門檻以上,顯著轉移才有實際上的意義。

        有三種情況會影響門檻的高低:
        1. 鄰近編碼可以相同的話,則需要更多樣本
        2. 觀察編碼數量更多的話,則需要更多樣本
        3. 欲觀察序列的序列越長的話,則需要更多樣本

        相關的說明和計算公式請看這篇:
        https://blog.pulipuli.info/2010/12/sequential-analysis-introduction.html

        實務操作上,我幾乎看不到有人蒐集的資料量可以達到這個門檻。
        主要原因是研究者想要分析的編碼數量過多,導致門檻拉得非常地高。

        # 3. 請推薦資料

        關於滯後序列分析,有基本概念的研究者,一律會推薦您看Bakeman的書。

        Bakeman, R., & Gottman, J. M. (1997). Observing interaction: an introduction to sequential analysis. Cambridge: University Press.

        刪除
    9. 最近有網友前來詢問關於滯後序列分析的問題。

      1. 如何引用?

      請引用Bakeman跟Gottman的原始書籍。
      Bakeman, R., & Gottman, J. M. (1997). Observing interaction: an introduction to sequential analysis (2nd ed.). New York: Cambridge University Press.

      檢定的算法請引用Allison跟Liker的論文
      Allison, P. D., & Liker, J. K. (1982). Analyzing sequential categorical data on dyadic interaction: A comment on Gottman. Psychological Bulletin, 91(2), 393-403. doi:10.1037/0033-2909.91.2.393

      真的很想要講的話再引用我的工具。

      布丁布丁吃布丁(2017年3月10日)。行為順序檢定:滯後序列分析。布丁布丁吃什麼?。https://blog.pulipuli.info/2017/10/behavior-analysis-lag-sequential.html

      2. 這個分析工具跟GSEQ的關係是?

      沒有關係。
      我是看書的內容來做的,製作的時候並不是參考GSEQ的做法。
      有老師比較過GSEQ跟我的工具,發現結果不一樣。

      實際上,滯後序列分析有很多不同的做法。
      Bakeman跟Gottman的書中有很多論述。
      總之目前這個工具是用Allison跟Liker的算法。

      如果你想知道這個工具跟GSEQ的差別,可以自己去比較看看。
      由於滯後序列分析的算法細節很多,我通常不能確定你的細節是什麼,也不確定GSEQ的原始碼是怎麼計算的,於是很難跟你說明它們之間的差異。
      還是把問題回歸到原始的計算式吧。

      如果想知道怎麼計算的話,這個滯後序列分析工具是開放原始碼,原始碼在GitHub。
      https://github.com/pulipulichen/HTML-Lag-Sequential-Analysis
      也許可能會有錯,歡迎自行驗證跟pull request修正。

      3. 到底要看那個滯後序列分析工具?

      目前是以現在這個網址的工具為主。
      舊版的工具不再使用與維護。

      https://blog.pulipuli.info/2017/10/behavior-analysis-lag-sequential.html

      回覆刪除
      回覆
      1. 有網友在問僅分析有改變的序列的做法是怎麼做的。

        原始序列可能是:
        「AABBCB」

        如果設定僅分析有改變的序列,就是把重複的序列拿掉:
        「ABCB」

        就以調整後的結果來計算。

        刪除
    10. 非常非常感謝你精彩且無私的分享~ 受益良多!!

      回覆刪除