2015-12-19 2 views
1

Я использую R и нуждаюсь в некоторой помощи.R: Как создать матрицу перехода состояния из вектора, представляющего состояния по дискретным шагам времени?

фон:
I видео записанных участники поведенческого исследование. Затем я кодировал различные аспекты их поведения из видео, чтобы теперь у меня был один кадр данных для каждого участника. У df множество неупорядоченных факторов, каждый из которых представляет собой дискретную временную последовательность состояний участника для одного конкретного поведенческого измерения (например, направление взгляда). Каждая строка содержит значение в течение одной секунды для этого измерения. Для упрощения, давайте предположим, что один такой вектор может выглядеть следующим образом:

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.m = matrix(nrow=5, ncol=5, dimnames = list(c("a", "b", "c", "d", "e"), c("a", "b", "c", "d", "e"))) 

ПРИМЕЧАНИЕ:
1) Я новичок в программирование и не мог найти нужные функции. Я тщательно искал, но не нашел подходящих решений, поэтому любая помощь будет приветствоваться.

2) Функция markovchainFit (package markovchain) звучит соблазнительно, но я не думаю, что хочу/должен соответствовать модели Маркова моим данным (из-за последствий и обязательств, которые я не хочу делать).

3) Функция count.transitions (пакет RDS) также звучала соблазнительно, но я не мог понять, как принуждать мои данные к объекту rds.data.

Большое спасибо =]

Moe

+0

Вы должны спросить одну вещь за раз. Я склонен закрыть вопрос, но я просто оставлю его, если вы отредактируете его, чтобы просто указать проблему 1. – nicola

+0

Чтобы ответить на ваш №2, предоставьте соответствующий набор данных. – tchakravarty

ответ

1

Используйте markovchain пакет для # 1 & 3 #.

Вот некоторые примеры кода для данных, показывает подсчет переходов состояний, а затем графический матрицу вероятностей перехода:

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) 

Это дает следующий график: enter image description here

После загрузки данных выборки для вашей второй проблемы, я также обновлю свой ответ на адрес.

+0

Это замечательно @ fg-nu, большое спасибо. Прежде чем перейти к проблеме 2, позвольте мне добавить некоторые сложности здесь: в идеале я бы хотел, чтобы график представлял не только вероятности перехода (как теперь это происходит благодаря вам), но и общее время, затрачиваемое на каждое состояние. Есть ли способ сделать размеры узлов пропорциональными, например, количество отсчетов для каждого конкретного значения? спасибо – moe

+0

@moe Предоставьте пример вектора состояний перехода с временем, проведенным в каждом состоянии. Это должно быть возможно, указав аргумент 'vertex.size' для' plot'. – tchakravarty

 Смежные вопросы

  • Нет связанных вопросов^_^