首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中建立转移矩阵(Markov)?

如何在R中建立转移矩阵(Markov)?
EN

Stack Overflow用户
提问于 2021-11-29 16:19:14
回答 1查看 188关注 0票数 0

我已经读过类似的问题了,但是我没能正确理解代码,所以如果有人能帮上忙的话,那就很好了。

我有一个类似于此的金融数据集:

代码语言:javascript
复制
Year  ID  Return  Quintile
1      A   -0,3      1
2      A   -0,2      2
3      B    1,5      5
3      C    0,1      3
4      C    0,1      3

每年,我都有关于许多投资者身份证的信息。对于某些ID,我有20年的数据,而对于其他的,我只有2到3年的数据。我能够从1到5在性能五分之一(基于回报)中对数据进行排序。我需要做一个概率转换矩阵。

基本上,我需要知道,在第二年,一个位于五分位数1中的ID是否仍然保留在五分位数1上,或者迁移到2,3,4或5中的概率。我也需要在两年的时间内这样做。

应该是这样的(ifirst和第二表,而不是A,B,C应该有1,2,3等等)

Ps。我需要平衡数据框架吗?也就是说,只分析有连续10年数据的ID?否则,只有两年返回时间并更改其五分之一的ID,其更改状态的概率为100%,可能会干扰最终结果。

非常感谢,很抱歉写了这么长的邮件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-29 17:22:11

代码语言:javascript
复制
dat1 <- read.table(text="
Year  ID  Return  Quintile
1      A   -0,3      1
2      A   -0,2      2
3      B    1,5      5
3      C    0,1      3
4      C    0,1      3
", header=TRUE)

您可以使用来自statetable.msm包的msm来计数数据集中的转换,按ID分层:

代码语言:javascript
复制
msm::statetable.msm(Quintile, ID, data=dat1)

    to
from 1 2 3 5
   1 0 1 0 0
   3 0 0 1 0

这将给出计数,但可以使用prop.table给出行百分比。这将取决于你有连续几年的每一门学科。

对于如此少量的数据,是不可能的,但是要正确地估计传输矩阵,您可以使用msm函数如下:

代码语言:javascript
复制
# set allowed transitions
qm <- matrix(1,nrow=5, ncol=5)
# estimate the matrix
q1 <- msm::msm(Quintile ~ Year , subject = ID, data=dat1, qmatrix = qm)

然后,您可以获取这个矩阵并计算任意给定时间段的转换矩阵。但这并不适用于观察到的两个转换。看一下msm的文档,了解它是如何工作的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70157855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档