我一直在尝试使用msm软件包来建模8状态,多状态马尔可夫链。我的数据总共包含大约11,000个科目,总观察量略高于10万。
我尝试在几个数据子集上运行msm函数,取数据的头部,如下所示:
mm2myTrajectoryMSM<-msm(role ~ year, subject=authId, data=head(mm2myMarkovRoles[,1:3,with=FALSE],7000), qmatrix=trajectory.qmatrix,death=1,control=list(trace=1,REPORT=1))
到目前为止,我还没能超过~7000行。查看报告输出,我注意到当iter值输出负值时函数会冻结。例如,这是运行数据的前10k行
initial value 19017.328402
iter 2 value 17808.111677
iter 3 value 17707.483305
iter 4 value -346782.085429 (freeze)
但它适用于前20k行
initial value 38101.266287
iter 2 value 35871.849676
iter 3 value 35796.410415
iter 4 value -721867.559664
iter 4 value -721867.559664
final value -721867.559664
converged
但不是50k行
initial value 92846.642840
iter 2 value 88466.007605
iter 3 value 88310.215979
iter 4 value 88276.433502
iter 5 value 88247.381022
iter 6 value -983685.709474
但是它适用于60010,80007(我正在捕获主题的完整记录),之后我无法判断系统是否冻结或分析是否需要很长时间。分配给该任务的1个cpu是最大的,但我远远不能接近我的RAM资源限制(&lt;服务器上96GB的1%)。
我有两个问题 - )为什么函数(任意?)挂在数据的某些子集上 2)如何估计此功能的运行时间?上次我让它运行,它持续了2天多。奇怪的是,许多运行的计算时间似乎是次线性的,但是一旦我越过一个阈值,它就会缩放......?
答案 0 :(得分:1)
你在运行msm 1.5吗?
在更改日志(http://cran.r-project.org/web/packages/msm/ChangeLog)中,提到修复了导致窗口无限循环的错误。
如果您的时间序列有几次短跳,则可能会出现对数似然下溢。您可以在msm调用中使用fixedpars = TRUE
来研究它(然后获取对数似然并查找下溢/溢出)。
如果出现问题,您将获得非常长的运行时间(很难预测)。
还尝试使用fnscale=100000
缩放可能性值。