• R语言已解决
  • gemtc包报错--Error in network[[network]] : invalid subscript type 'list'

library(gemtc) #这个是贝叶斯网状meta分析的包
library(rjags) #rjags是要额外下载安装的一个吉布斯采样软件
library(tidyverse)

description <- data.frame(id=(LETTERS[1:10]),description=(LETTERS[1:10]))
mydata <- data.frame(study=c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","5","5","5","5"),treatment=c("A","B","C","D","A","D","C","B","A","C","D","E","A","F","G","A","H","I","J"),diff=c(NA, -0.520, -0.374, -0.369, NA, -0.380, -0.320, -0.590, NA, -0.720, -0.340, -0.490, NA, -0.300, -0.130, NA, 0.370, 0.090, -0.010),std.err=c(0.126, 0.180, 0.180, 0.180, 0.133, 0.190, 0.190, 0.190, 0.150, 0.216, 0.217, 0.214, 0.090, 0.130, 0.130, 0.300, 0.440, 0.410,0.430))
description$id <- description$id %>% as.character()

#绘制网状图、进行异质性分析,network的格式是mtc.network

network <- mtc.network(data.re=mydata, treatments = description, description = 'Network')
hg <- mtc.anohe(network, factor=2.5, n.chain=4, likelihood="normal",linearModel="random",link="identity")

#在运行mtc.anohe时报错:Error in network[[network]] : invalid subscript type 'list'

#但是去掉下面这两行之后莫名就能运行了?

mydata <- mydata[-15,]
description <- description[-7,]

查过资料说是把list改成向量或数据框即可,但由于“network”是特殊的格式,改了就没法跑了,想问下这个报错怎么解决?

我并不是做这个方向,所以对这个方法本身并不是非常了解。从包的代码和文档来看这个mtc.anohe只是打包运行了软件包内的三个不同的模型,其中对于ume模型,文档里提到这个模型并不能很好的处理多臂试验,所以实际上是将数据里的多臂试验拆解成两两比较的双臂来做的。

问题出在这个拆解函数decompose.network()上,他的设计逻辑是原始数据里有双臂试验有多臂试验,所以双臂的部分保留,多臂的部分拆解。而你的数据全部是多臂试验,它保留双臂试验的代码decompose.network()函数中的filter.network()函数就出错了。你后面的代码能运行,就是因为去掉那一个臂之后,4号研究就是双臂试验了。

处理方法的话,最好的当然是让作者改代码。但是实际上ume和use模型他在包里给的自己的参考文献全部是“未发表”,网上也找不到文章草稿,也不好评估这个方法是不是真的能处理全是多臂的情况。

另一个狗皮膏药的方法是对decompose.network或者mtc.anohe开debug模式,你自己进去一步步跑过去,让filter.network那步能跑过去而不出错,然后将得到的ta.data.re变量设置成0行的数据框即可。

    我给作者提了个PR,如果你想尝试这个修改的版本的话也可以看看这样是否能安装,应该是需要你本地rtools也配置好才行

    remotes::install_github("fenguoerbian/gemtc/gemtc", ref = "bugfix/decompose.network")

    fenguoerbian 果然是必须包含双臂实验才能跑!跟我猜的一样!
    那这样的话,或许自己额外添加两行双臂数据出来就能运行了?我试一下。

      monster_white
      以程序能跑而言确实加两行双臂的数据就可以。但是这样做了之后得到的结果是不是还是你原先想要做的分析那就不得而知了。

        fenguoerbian 刚对比了“去掉3臂中的1臂”和“另加1臂+安慰剂“,这两种组成双臂的方法,
        对“安慰剂之外的干预之间的比较”几乎没影响,
        但对“其它干预与安慰剂之间”的比较有点影响,数值会有点小波动。
        (干预A是安慰剂)
        谢了,又学到新东西了。 ╰(°▽°)╯