Я использую пакет под названием diagmeta
для целей метаанализа. Я могу использовать этот пакет со встроенным набором данных под названием Schneider2017
. Однако, когда я создаю свою собственную базу данных/набор данных, я получаю следующую ошибку:
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
- никакого эффекта.
Я попытался извлечь все данные из набора данных Schneider2017 в Excel, а затем импортировать набор данных из Excel через R studio. Это опять же не имеет значения. Это наводит меня на мысль, что что-то в формате данных может быть другим, хотя я не понимаю, как это сделать.
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 ...
Вы имеете в виду что-то другое, связанное с изображением набора данных? Это то, над чем я пытаюсь работать. Я добавил вывод из str (мой набор данных).
Ты сказал, что ты
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 для загрузки своих данных, вы должны получить список «проблем с разбором», которые могут быть полезны. Вы также можете попробовать cp <- SRschneider$cutpoint; cp[which(is.na(as.numeric(cp)))]
просмотреть значения, которые нельзя преобразовать.
Я следую вашим рассуждениям. Я сделаю то, что вы предлагаете, но я подозреваю, что это не решит проблему по следующей причине: этот набор данных импортирован из Excel, и я не исправил форматы данных. До этого у меня была версия 1.0 моего собственного набора данных — фрейм данных, сделанный непосредственно в R studio — и именно там я исправил формат данных. Итак, поскольку тогда это не помогло, я подозреваю, что ошибка связана с чем-то другим.
Хорошо. Не увидев явных опечаток в столбце «точка отсечения» (что имеет смысл, поскольку он скопирован для рабочего набора данных Schneider 2017), я исправил формат столбца. Это заставило его выполнить успешно немедленно. Это очень хорошо для моего проекта, но также любопытно. Я думаю, что причина исправления формата данных ранее (в моем первом наборе данных) заключалась в том, что набор данных был слишком мал в тот момент, поэтому у меня есть две проблемы с набором данных, обе из которых приводят к одной и той же ошибке.
Разница в формате «группы» также была фактором, который я подозревал и исправлял в своем первом наборе данных. Но, как оказалось, теперь он работает в моем втором наборе данных, и разница в формате не приводит к ошибке.
Просто быстрое продолжение подробного ответа Бена.
Статистический метод, реализованный в diagmeta()
, предполагает, что аргумент точка отсечки является непрерывной переменной. Мы добавили соответствующую проверку аргумента точка отсечки (а также аргументов ТП, ФП, Теннесси и FN) в версии 0.3-1 пакета R диагмета; см. коммит в репозиторий GitHub для технических подробностей.
Соответственно, следующие команды R приведут к более информативному сообщению об ошибке:
data(Schneider2017)
diagmeta(tpos, fpos, tneg, fneg, as.character(cutpoint),
studlab = paste(author, year, group), data = Schneider2017)
А) можете ли вы привести пример данных, которые вы пытаетесь поместить в
diagemta
–dput
. Моментальный снимок как минимум будет полезен. B) можете ли вы предоставить выводstr(data)
сdata
новым набором данных, который вы пытаетесь ввести?