#r #dplyr #transition #markov-chains #markov
Вопрос:
Я ищу способ найти матрицу перехода (в R) с вероятностями, где кто-то движется. Вот как выглядит мой df:
City_year1 City_year2
<fct> <fct>
1 Alphen aan den Rijn NA
2 Tynaarlo NA
3 Eindhoven NA
4 Emmen Emmen
5 Emmen Emmen
6 Schagen Schagen
7 Bergen NA
8 Schagen Schagen
9 Schagen Schagen
10 Amsterdam Rotterdam
# .... with 200.000 more rows
Как мне легко создать матрицу перехода с вероятностями того, что кто-то переедет из Амстердама в 1-м году в Роттердам во 2-м году, на основе данных, доступных в этом df. Дополнительная информация: Количество уникальных значений в 1-м году не обязательно равно #уникальным значениям во 2-м году. Я пытался использовать функции Маркова, но безуспешно.
Я надеюсь, что кто — нибудь сможет мне помочь!
Ответ №1:
table(df)
даст вам матрицу подсчетов переходов, и вы можете преобразовать эти подсчеты в вероятности (пропорции) с помощью prop.table
:
prop.table(table(df), margin = 1)
Это margin = 1
означает, что вероятности в строках будут равны 1.
Использование исходных данных в вопросе:
df = read.table(text = 'City_year1 City_year2
1 Alphen_aan_den_Rijn NA
2 Tynaarlo NA
3 Eindhoven NA
4 Emmen Emmen
5 Emmen Emmen
6 Schagen Schagen
7 Bergen NA
8 Schagen Schagen
9 Schagen Schagen
10 Amsterdam Rotterdam', header = T)
result = prop.table(table(df), margin = 1)
result
# City_year2
# City_year1 Emmen Rotterdam Schagen
# Alphen_aan_den_Rijn
# Amsterdam 0 1 0
# Bergen
# Eindhoven
# Emmen 1 0 0
# Schagen 0 0 1
# Tynaarlo
unclass(result)
# City_year2
# City_year1 Emmen Rotterdam Schagen
# Alphen_aan_den_Rijn NaN NaN NaN
# Amsterdam 0 1 0
# Bergen NaN NaN NaN
# Eindhoven NaN NaN NaN
# Emmen 1 0 0
# Schagen 0 0 1
# Tynaarlo NaN NaN NaN
Комментарии:
1. Большое вам спасибо за ваш ответ. Это возможное решение, однако я , кажется, получаю таблицу со столбцами: City_year1, City_year2 и вероятностью перехода, но не матрицу.
2. Хммм, возможно, вам нужно делиться своими данными более воспроизводимо. Я читаю ваши данные с помощью
read.table
, и я получаю результат, подобный матрице, который можно легко преобразовать в матрицу. См.правки.3. @RomySchipper Используется
dput
для обмена данными в виде копирования/вставки, включая всю информацию о классах и структуре. Например,dput(your_data[1:10, ])
для первых 10 строк—хотя вы, возможно, захотите выбрать немного другое подмножество, которое лучше иллюстрирует проблему.