首页 > 解决方案 > 如何计算R中的转移概率

问题描述

我想通过人年组合(面板数据)计算值之间变化的频率。这模仿了 Stata 的命令xttrans。不应包括索引 6 和 7 之间的过渡,因为它不是一个人内部的过渡。

df = data.frame(id=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2), 
                year=seq(from=2003, to=2009, by=1), 
                health=c(3,1,2,2,5,1,1,1,2,3,2,1,1,2))

在此处输入图像描述

标签: rpanel-data

解决方案


这是按组计算转换计数的基本 R 解决方案id

with(df, do.call(`+`, tapply(health, id, function(x){
  x <- factor(x, levels = min(health, na.rm = T):max(health, na.rm = T))
  table(x[-length(x)], x[-1])
})))

#    1 2 3 4 5
#  1 2 3 0 0 0
#  2 1 1 1 0 1
#  3 1 1 0 0 0
#  4 0 0 0 0 0
#  5 1 0 0 0 0

推荐阅读