R: How do I produce a state transition matrix from a vector that represent states over discrete time steps? [closed]

故事扮演 提交于 2019-12-13 07:25:07

问题


I'm using R and need some help.

Background:
I video-recorded participants in a behavioural study. I then coded different aspects of their behaviour from the videos so that I now have one data frame per participant. The df has many unordered factors, each representing the discrete temporal sequence of the participant's states for one specific behavioural dimension (e.g. gaze direction). Each row holds the value for one second for that dimension. To simplify, let's assume one such vector might look like this:

p01.gaze = factor(x = c("a", "b", "b", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "b", "b", "a", "d", "d", "d", "a", "a", "a", "e", "e", "d", "e", "e", "a","a", "e", "a", "a", "a", "e", "e", "e", "e", "e", "e", "e", "e", "e", "e", "d", "b", "b", "b", "d", "d", "d", "d", "d", "d", "d", "b", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "d", "a", "b", "a", "d", "d", "a", "c", "e", "e", "e", "c", "c", "a", "e", "e", "a", "a", "a"))

Problem:
For each vector I want to construct a 'state transition matrix' by calculating the frequency of transitions (using counts or alternatively proportion) between all possible pairs of states. So the matrix would be:

p01.gaze.m = matrix(nrow=5, ncol=5, dimnames = list(c("a", "b", "c", "d", "e"), c("a", "b", "c", "d", "e")))  

NOTES:
1) I'm new to programming and couldn't find the right functions. I did search thoroughly but didn't find appropriate solutions so any help would be welcome.

2) The function markovchainFit (package markovchain) sounded tempting but I don't think I want/need to fit a Markov Model to my data (because of implications and commitments I don't want to make).

3) The function count.transitions (package RDS) also sounded tempting but I couldn't figure out how to coerce my data into rds.data object.

Many thanks =]

moe


回答1:


Use the markovchain package for your #1 & #3.

Here is some sample code for your data that shows counting state transitions, and then graphing the transition probability matrix:

library(markovchain)
p01.gaze = factor(x = c("a", "b", "b", "a", "a", "a", 
                        "a", "a", "a", "a", "a", "a", 
                        "a", "b", "b", "a", "d", "d", 
                        "d", "a", "a", "a", "e", "e", 
                        "d", "e", "e", "a","a", "e", 
                        "a", "a", "a", "e", "e", "e", 
                        "e", "e", "e", "e", "e", "e", 
                        "e", "d", "b", "b", "b", "d", 
                        "d", "d", "d", "d", "d", "d", 
                        "b", "d", "d", "d", "d", "d", 
                        "d", "d", "d", "d", "d", "d", 
                        "d", "d", "d", "d", "d", "d", 
                        "d", "d", "d", "d", "d", "d", 
                        "d", "d", "d", "d", "d", "a", 
                        "b", "a", "d", "d", "a", "c", 
                        "e", "e", "e", "c", "c", "a", 
                        "e", "e", "a", "a", "a"))
p01_gaze_tpm = createSequenceMatrix(p01.gaze, toRowProbs = TRUE)
p01_gaze_mc = as(p01_gaze_tpm, "markovchain")
plot(p01_gaze_mc, edge.arrow.size = 0.2)

This gives the following graph:

Once you upload sample data for your second problem, I will update my answer to address that as well.



来源:https://stackoverflow.com/questions/34370566/r-how-do-i-produce-a-state-transition-matrix-from-a-vector-that-represent-state

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!