Перемещение между состояниями в марковской модели - как сказать R?

Я боролся с этой проблемой в течение долгого времени, и любая помощь будет высоко ценится.

Я пытаюсь написать функцию для расчета матрицы перехода по наблюдаемым данным для модели Маркова.

Мои исходные данные, которые я использую для построения функции, выглядят примерно так;

 Season                 Team State
1        1    Manchester United     1
2        1              Chelsea     1
3        1      Manchester City     1
.
.
.
99       5    Charlton Athletic     4
100      5              Watford     4

с 5 сезонами и 4 штатами.

Я знаю, как собираюсь вычислять матрицу переходов, но для этого мне нужно посчитать количество команд, которые переходят из состояния i в состояние j за каждый сезон.

Мне нужен код, который будет делать что-то вроде этого,

a<-function(x,i,j){
if("team x is in state i in season 1 and state j in season 2") 1 else 0
}
sum(a)

и тогда я мог бы сделать это для каждой команды и пары штатов и повторить все 5 сезонов. Тем не менее, мне трудно разобраться, как сказать R вещь в кавычках. Извините, если есть действительно очевидный ответ, но я мусор программиста.

Спасибо за прочтение!

1 ответ

Эта функция сообщает, выполнил ли команда переход из состояния1 в состояние2 из сезона1 в сезон2

a <- function(team, state1, state2, data, season1, season2) {  
  team.rows = data[team == data["Team",],]   
  in.season1.in.state1 = ifelse(team.rows["Season",]==season1 && team.rows["State",state1],1,0)
  in.season2.in.state2 = ifelse(team.rows["Season",]==season2 && team.rows["State",state2],1,0)   
  return(sum(in.season1.in.stat1) * sum(in.season2.in.state2)) 
}
  • В первой строке я выбираю все строки определенной команды.
  • Вторая строка определяет для каждой записи, находится ли команда когда-либо в состоянии1 в сезоне1.
  • Третья строка определяет для каждой записи, находится ли команда когда-либо в состоянии 2 в сезоне 2,
  • и оператор return возвращает 0, если команда никогда не была в соответствующем состоянии в соответствующем сезоне, или 1 в противном случае (работает только в том случае, если нет дубликатов, в этом случае он может вернуть значение больше 1)
Другие вопросы по тегам