Перемещение между состояниями в марковской модели - как сказать 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)