我已经读过类似的问题了,但是我没能正确理解代码,所以如果有人能帮上忙的话,那就很好了。
我有一个类似于此的金融数据集:
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%,可能会干扰最终结果。
非常感谢,很抱歉写了这么长的邮件。
发布于 2021-11-29 17:22:11
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分层:
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函数如下:
# 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的文档,了解它是如何工作的。
https://stackoverflow.com/questions/70157855
复制相似问题