Создав 1-ступенчатую матрицу перехода, найдите вероятность того, что кто-то переедет в определенный город

#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 строк—хотя вы, возможно, захотите выбрать немного другое подмножество, которое лучше иллюстрирует проблему.