R运行马尔可夫模型代码报non-conformable arguments错误如何解决
报错原因及修复方案
核心错误:转移矩阵维度不匹配
你定义的状态初始向量Init长度为6,对应6个模拟状态,因此转移矩阵Pmat必须是6行6列的方阵才能符合矩阵乘法规则。
你当前通过read.table读取转移矩阵时,文本排版错误,将多行的概率值合并到了同一行,加上fill=TRUE参数自动补全空缺值,最终生成的P.RILUneg、P.RILUpos均为6行8列的矩阵,行向量istate和8列的矩阵做乘法时维度无法匹配,触发non-conformable arguments报错。
其他需修正的小问题
调用MToll函数时传入的toll参数对应TC.med长度为5,刚好匹配netshifts[-1]的长度(移除了第一个状态的转移值),该部分无问题,但需注意转移矩阵修正后逻辑才会正常运行。
修复代码
仅需要调整转移矩阵的读取格式,将每行6个概率值单独拆分即可:
# 修正后的转移矩阵读取 P.RILUneg<-read.table(text=" 6.8604466e-01 0.27237339416 0.0392288844 0.0020896625 0.00011414761 0.00014925021 2.6080360e-02 0.74183221490 0.2130311396 0.0167613306 0.00121619371 0.00107876162 7.9577302e-04 0.04513125922 0.8115775903 0.1232709064 0.01337414561 0.00585032537 2.7391412e-05 0.00229455178 0.0796554694 0.7391659905 0.16375225528 0.01510434163 8.9680288e-07 0.00009978931 0.0051797995 0.0981474867 0.79583386882 0.10073815882 0.0000000e+00 0.00000000000 0.0000000000 0.0000000000 0.00000000000 1.00000000000",header = FALSE ) P.RILUpos<-read.table(text=" 6.9449942e-01 0.27189897910 0.0314651341 0.0019380647 8.9161464e-05 0.00010923903 2.6903100e-02 0.77862279416 0.1766404706 0.0160845681 9.8349868e-04 0.00076556815 8.0656346e-04 0.04576193898 0.7942333863 0.1423245490 1.3101929e-02 0.00377163306 2.7854076e-05 0.00233633511 0.0797978780 0.7588375567 1.4166520e-01 0.01733517825 9.1518056e-07 0.00010202547 0.0052463334 0.1011747832 8.2156998e-01 0.07190595839 0.0000000e+00 0.00000000000 0.0000000000 0.0000000000 0.0000000e+00 1.00000000000",header = FALSE ) P.RILUneg<-as.matrix(P.RILUneg) P.RILUpos<-as.matrix(P.RILUpos)
修正后执行原调用代码即可正常运行,不存在遗漏的配置项。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

