我正在使用名为diagmeta
的软件包进行元分析。我可以将此软件包与名为Schneider2017
的内置数据集一起使用。但是,当我创建自己的数据库/数据集时,出现以下错误:
错误:观察次数(= 300)<=术语(组*截止|研究)的随机效应次数(= 3074);随机效应参数和剩余方差(或尺度参数)可能无法识别
SO上的另一个线程表明该错误是由一列或多列的数据格式引起的。我确保每一列的数据类型都与Schneider2017
数据集中的数据类型匹配-无效。
我尝试将Schneider2017数据集中的所有数据提取到excel中,然后通过R studio从Excel导入数据集。这再次没有区别。这向我表明,尽管我看不出有什么不同,但数据格式可能有所不同。
diag2 <- diagmeta(tpos, fpos, tneg, fneg, cutpoint,
studlab = paste(author,year,group),
data = SRschneider,
model = "DIDS", log.cutoff = FALSE,
check.nobs.vs.nRE = "ignore")
我期望与内置数据集一样成功执行和绘图,但是始终会出现此错误。
执行str(mydataset)的结果:
> str(SRschneider)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 150 obs. of 10 variables:
$ ...1 : num 1 2 3 4 5 6 7 8 9 10 ...
$ study_id: num 1 1 1 1 1 1 1 1 1 1 ...
$ author : chr "Arora" "Arora" "Arora" "Arora" ...
$ year : num 2006 2006 2006 2006 2006 ...
$ group : chr NA NA NA NA ...
$ cutpoint: chr "6" "7.0" "8.0" "9.0" ...
$ tpos : num 133 131 130 127 119 115 113 110 102 98 ...
$ fneg : num 5 7 8 11 19 23 25 28 36 40 ...
$ fpos : num 34 33 31 30 28 26 25 21 19 19 ...
$ tneg : num 0 1 3 4 6 8 9 13 15 15 ...
答案 0 :(得分:1)
快速跟进Ben的详细答案。
在diagmeta()
中实现的统计方法期望参数 cutpoint 是连续变量。我们为参数 cutpoint (以及参数 TP , FP , TN 和 FN )(R包 diagmeta )的版本0.3-1;有关详细技术信息,请参见commit in GitHub repository。
相应地,以下R命令将导致更详尽的错误消息:
data(Schneider2017)
diagmeta(tpos, fpos, tneg, fneg, as.character(cutpoint),
studlab = paste(author, year, group), data = Schneider2017)
答案 1 :(得分:0)
您说的是您
确保每个列的数据类型都与Schneider2017数据集中的数据类型匹配
但这似乎不是事实。除了myVec1.size()+1
(数字)和num
(整数)类型(实际上通常并不重要)之间的差异之外,您的数据还具有
int
$ cutpoint: chr "6" "7.0" "8.0" "9.0" ...
拥有
str(Schneider2017)
将切点设为字符而不是数字意味着R将尝试将其视为分类变量(具有许多离散级别)。这很可能是您问题的根源。
$ cutpoint: num 6 7 8 9 10 11 12 13 14 15 ...
变量很可能是字符,因为R在此列中遇到了一些不能解释为数字的值(就像印刷错误一样简单)。您可以使用cutpoint
通过蛮力将变量转换为数字(无法解释的值将设置为SRschneider$cutpoint <- as.numeric(SRschneider$cutpoint)
),但是最好还是先去看看问题出在哪里
如果您使用tidyverse程序包加载数据,则应获取可能有用的“解析问题”列表。您也可以尝试NA
查看无法转换的值。