Ошибка "Количество наблюдений <= количество случайных эффектов"

Я использую пакет под названием 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")

Набор данных выглядит следующим образом: Ошибка &quot;Количество наблюдений &lt;= количество случайных эффектов&quot;

Я ожидал такого же успешного выполнения и построения графика, как и со встроенным набором данных, но продолжаю получать эту ошибку.

Результат выполнения 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 ...

А) можете ли вы привести пример данных, которые вы пытаетесь поместить в diagemtadput. Моментальный снимок как минимум будет полезен. B) можете ли вы предоставить вывод str(data) с data новым набором данных, который вы пытаетесь ввести?

Peter_Evan 08.04.2019 00:55

Вы имеете в виду что-то другое, связанное с изображением набора данных? Это то, над чем я пытаюсь работать. Я добавил вывод из str (мой набор данных).

Simon 08.04.2019 01:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
667
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ты сказал, что ты

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 — и именно там я исправил формат данных. Итак, поскольку тогда это не помогло, я подозреваю, что ошибка связана с чем-то другим.

Simon 08.04.2019 01:55

Хорошо. Не увидев явных опечаток в столбце «точка отсечения» (что имеет смысл, поскольку он скопирован для рабочего набора данных Schneider 2017), я исправил формат столбца. Это заставило его выполнить успешно немедленно. Это очень хорошо для моего проекта, но также любопытно. Я думаю, что причина исправления формата данных ранее (в моем первом наборе данных) заключалась в том, что набор данных был слишком мал в тот момент, поэтому у меня есть две проблемы с набором данных, обе из которых приводят к одной и той же ошибке.

Simon 08.04.2019 02:02

Разница в формате «группы» также была фактором, который я подозревал и исправлял в своем первом наборе данных. Но, как оказалось, теперь он работает в моем втором наборе данных, и разница в формате не приводит к ошибке.

Simon 08.04.2019 02:10

Просто быстрое продолжение подробного ответа Бена.

Статистический метод, реализованный в 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)

Другие вопросы по теме