Представление переходных вероятностей - PullRequest
0 голосов
/ 24 декабря 2018

Я хотел бы определить изменения активности во времени.Ниже приведен пример (от act1_1 до act1_16) матрицы, которую я использовал для расчета вероятностей перехода между действиями.

head (Деятельности) вернет тиббл: 6 x 145

  serial act1_1 act1_2 act1_3 act1_4 act1_5 act1_6 act1_7 act1_8 act1_9  act1_10
     1 1.22e7 110    110    110    110    110    110    110    110    110    110    
     2 1.43e7 110    110    110    110    110    110    110    110    110    110    
     3 2.00e7 110    110    110    110    110    110    110    110    110    110    
     4 2.71e7 110    110    110    110    110    110    110    110    110    110    
     5 1.61e7 110    110    110    110    110    110    110    110    110    110    
     6 1.60e7 110    110    110    110    110    110    110    110    110    110    

# ... with 134 more variables: act1_11 <dbl+lbl>, act1_12 <dbl+lbl>,

Размерность матрицы «Деятельности» равна ncol = 144 и nrows = 16533;act1_1 ... ac1_144 являются временными шагами, и время представлено с 10-минутными интервалами (например, act1_1 = 4.10am; act1_2 = 4.20am ..).Время начинается с 4:00 (act1_1) и заканчивается в act1_144 (4:00). Столбцы заполнены различными действиями, такими как 110 = сон, 111 = просмотр ТВ, 123 = прием пищи и т. Д.

Ниже функции, котораяЯ использую для вычисления вероятностей перехода :

transition.matrix <- function(X, prob=T)
{
    tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
    if(prob) t <- tt / rowSums(tt)
    tt
}
I call the function as:

transitionfunction <- trans.matrix(as.matrix(Activities))

С помощью этой функции мне удалось вычислить вероятности перехода между действиями (матрица действий).Ниже приведен пример матрицы такого типа:

Transition probability matrix

Используя transitionfunction , я хотел бы построить график по времени оси x (10-минутные интервалы) и оси yвероятности .

Как я могу это сделать?Как я могу определить наиболее частый переход между действиями?

Это сюжет, к которому я стремлюсь:

enter image description here

1 Ответ

0 голосов
/ 24 декабря 2018

Учитывая одну матрицу переходов m, вы можете найти наиболее частые n переходы следующим образом:

n <- 3 # or whatever
sorted <- sort(m, decreasing = TRUE)
which(m >= sorted[n], arr.ind = TRUE)

Связи могут означать, что вы получите более n результатов.

Учитывая ваши данные, вы можете игнорировать диагональ.Вы можете сделать это с помощью

diag(m) <- 0

, а затем с помощью приведенного выше кода.

Проблема в том, что у вас нет отдельных матриц переходов для каждого раза.Если вы разместите некоторые данные в удобной для вас форме, вы, вероятно, получите помощь в этом.(Не все 16533 строки, достаточно, чтобы было интересно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...