【问题标题】:Creating 1 step transition matrix, find probability that someone moves to a particular city创建 1 步转换矩阵,找到某人移动到特定城市的概率
【发布时间】:2021-12-16 06:24:10
【问题描述】:

我正在寻找一种方法来找到转移矩阵(在 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

如何根据此 df.额外信息:第 1 年的唯一值数量不一定等于第 2 年的#unique 值。我尝试使用马尔可夫函数,但没有成功。

希望有人能帮帮我!

【问题讨论】:

    标签: r dplyr transition markov-chains markov


    【解决方案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
    

    【讨论】:

    • 非常感谢您的回复。这是一个可能的解决方案,但是我似乎得到了一个包含以下列的表格: City_year1 , City_year2 和转换概率,但不是矩阵。
    • 嗯,也许您需要更可重复地共享您的数据。我使用read.table 读入了您的数据,我得到了一个类似矩阵的结果,可以轻松地将其转换为矩阵。查看修改。
    • @RomySchipper 使用dput 以复制/粘贴方式共享数据,包括所有类和结构信息。例如,dput(your_data[1:10, ]) 用于前 10 行——尽管您可能希望选择一个稍微不同的子集来更好地说明问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2018-04-01
    相关资源
    最近更新 更多