"Number of observations <= number of random effects" 错误
"Number of observations <= number of random effects" error
我正在使用一个名为 diagmeta
的软件包进行荟萃分析。我可以将此包与名为 Schneider2017
的内置数据集一起使用。但是,当我自己设置 database/data 时,出现以下错误:
Error: number of observations (=300) <= number of random effects (=3074) for term (Group * Cutoff | Study); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
SO 上的另一个线程表明错误是由一个或多个列的数据格式引起的。我已确保每一列的数据类型都与 Schneider2017
数据集中的匹配 - 无效。
Link to the other thread
我尝试将 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 ...
你说你
have made sure every column's data type matches that in the Schneider2017 dataset
但这似乎不是真的。除了 num
(数字)和 int
(整数)类型(实际上通常不重要)之间的差异外,您的数据还具有
$ cutpoint: chr "6" "7.0" "8.0" "9.0" ...
而 str(Schneider2017)
有
$ cutpoint: num 6 7 8 9 10 11 12 13 14 15 ...
让你的分割点是一个字符而不是数字意味着 R 会尝试将它视为一个分类变量(具有许多离散级别)。这很可能是您问题的根源。
cutpoint
变量可能是一个字符,因为 R 在此列中遇到了一些无法解释为数字的值(就像印刷错误一样简单)。可以使用SRschneider$cutpoint <- as.numeric(SRschneider$cutpoint)
将变量强制转换为数值(无法解释的值将设置为NA
),但最好上游看看问题出在哪里.
如果您使用 tidyverse 包加载数据,您应该会得到一个可能有用的 "parsing problems" 列表。您也可以尝试cp <- SRschneider$cutpoint; cp[which(is.na(as.numeric(cp)))]
查看无法转换的值。
只是对 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)
我正在使用一个名为 diagmeta
的软件包进行荟萃分析。我可以将此包与名为 Schneider2017
的内置数据集一起使用。但是,当我自己设置 database/data 时,出现以下错误:
Error: number of observations (=300) <= number of random effects (=3074) for term (Group * Cutoff | Study); the random-effects parameters and the residual variance (or scale parameter) are probably unidentifiable
SO 上的另一个线程表明错误是由一个或多个列的数据格式引起的。我已确保每一列的数据类型都与 Schneider2017
数据集中的匹配 - 无效。
Link to the other thread
我尝试将 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 ...
你说你
have made sure every column's data type matches that in the Schneider2017 dataset
但这似乎不是真的。除了 num
(数字)和 int
(整数)类型(实际上通常不重要)之间的差异外,您的数据还具有
$ cutpoint: chr "6" "7.0" "8.0" "9.0" ...
而 str(Schneider2017)
有
$ cutpoint: num 6 7 8 9 10 11 12 13 14 15 ...
让你的分割点是一个字符而不是数字意味着 R 会尝试将它视为一个分类变量(具有许多离散级别)。这很可能是您问题的根源。
cutpoint
变量可能是一个字符,因为 R 在此列中遇到了一些无法解释为数字的值(就像印刷错误一样简单)。可以使用SRschneider$cutpoint <- as.numeric(SRschneider$cutpoint)
将变量强制转换为数值(无法解释的值将设置为NA
),但最好上游看看问题出在哪里.
如果您使用 tidyverse 包加载数据,您应该会得到一个可能有用的 "parsing problems" 列表。您也可以尝试cp <- SRschneider$cutpoint; cp[which(is.na(as.numeric(cp)))]
查看无法转换的值。
只是对 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)