平方过渡矩阵的计算

时间:2014-01-16 16:18:09

标签: r function matrix transition

我想计算状态p(= previous)和n(= next)之间的平方反规范化(=频率)转换矩阵。我试过以下脚本:

p <- c("S1", "S1", "S2", "S3", "S4")
n <- c("S2", "S2", "S3", "S4", "S5")
d <- data.frame(fprev=p, fnext=n)
counts <- table( as.data.frame( d ))
计数如下:

     fnext
fprev S2 S3 S4 S5
   S1  2  0  0  0
   S2  0  1  0  0
   S3  0  0  1  0
   S4  0  0  0  1

这是我想要的非常接近但我希望得到类似的结构,除了fnext和fprev的值都是S1 S2 S3 S4 S5 (我已尝试将dnn参数添加到table和deparse.level但它们似乎没有帮助)

所以预期的输出应该在列方向和行方向都有S1 S2 S3 S4 S5(自然会有更多的值0,例如fprev中没有S5状态)

1 个答案:

答案 0 :(得分:3)

为了获得表格中所有级别的零,您应该将fprevfnext设置为具有相同级别的因子

p <- c("S1", "S1", "S2", "S3", "S4")
n <- c("S2", "S2", "S3", "S4", "S5")

lvls <- sort(unique(c(p, n)))

d <- data.frame(
    fprev = factor(p, levels=lvls),
    fnext = factor(n, levels=lvls)
)

counts <- table(d)

现在你的counts表应该是你想要的。

fprev S1 S2 S3 S4 S5
   S1  0  2  0  0  0
   S2  0  0  1  0  0
   S3  0  0  0  1  0
   S4  0  0  0  0  1
   S5  0  0  0  0  0