考虑以下数据框:

 df = data.frame(cusip = paste("A", 1:10, sep = ""), xt = c(1,2,3,2,3,5,2,4,5,1), xt1 = c(1,4,2,1,1,4,2,2,2,5))

数据分为五个状态,实际上是分位数:1,2,3,4,5。
数据帧的第一列表示时间t的状态,第二列表示时间t + 1的状态。

我想为这五个状态计算一种过渡矩阵。矩阵的含义如下:
  • (Row,Col)=(1,1):在时间t处在分位数1中的cusips的百分比,
    并在时间t + 1
  • 停留在1
  • (Row,Col)=(1,2):在t时分位数为1的cusips的百分比,并且
    在t + 1成为分位数2
  • 等...

  • 我真的不确定如何有效地做到这一点。我觉得答案很琐碎,但我始终无法解决。

    谁能帮忙吗?

    最佳答案

    res <- with(df, table(xt, xt1)) ## table() to form transition matrix
    res/rowSums(res)                ## /rowSums() to normalize by row
    #    xt1
    # xt          1         2         4         5
    #   1 0.5000000 0.0000000 0.0000000 0.5000000
    #   2 0.3333333 0.3333333 0.3333333 0.0000000
    #   3 0.5000000 0.5000000 0.0000000 0.0000000
    #   4 0.0000000 1.0000000 0.0000000 0.0000000
    #   5 0.0000000 0.5000000 0.5000000 0.0000000
    
    ## As an alternative to  2nd line above, use sweep(), which won't rely on
    ## implicit recycling of vector returned by rowSums(res)
    sweep(res, MARGIN = 1, STATS = rowSums(res), FUN = `/`)
    

    关于r - 过渡矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21391984/

    10-10 19:25