Как мне обратиться к предупреждению функции R glmmTMB «В (функция (начало, цель, градиент = NULL, гессиан = NULL, : оценка функции NA/NaN»?

Я пытаюсь использовать функцию R glmmTMB::glmmTMB(), чтобы подогнать обобщенную линейную модель смешанных эффектов к набору данных. Однако мне выдается предупреждение Warning message: In (function (start, objective, gradient = NULL, hessian = NULL, : NA/NaN function evaluation. Я не уверен, важно ли это предупреждение и как с ним справиться.

Два примечания:

  1. Текст этого предупреждения аналогичен, но отличается от текста, показанного в примере glmmTMB по устранению неполадок (в разделе «Оценка функции NA/NaN» внизу страницы). Я не уверен, что это одно и то же предупреждение, но с немного другим текстом. Ссылка: https://cran.r-project.org/web/packages/glmmTMB/vignettes/troubleshooting.html
  2. Подобная тема обсуждалась ранее, но включение рекомендуемого аргумента (control = glmmTMBControl(rank_check = "adjust")) в вызов функции glmmTMB() не влияет на это предупреждение. Ссылка: Проблема с функцией glmmTMB в R: вкратце выдает NaN

Воспроизводимый пример приведен ниже. Файл test_insect_abund2.csv можно скачать с GitHub по этой ссылке: https://github.com/albrechtcf/SO_glmm_warning_data/blob/main/testing_insect_abund2.csv

Эти данные представляют собой численность (целое число) конкретного вида насекомых (количество/га) в ряде квадратов обследований. Обследования проводились на трех участках исследования (т.е. на трех отдельных лесных участках, разделенных минимум 40 километрами). Внутри каждого участка исследования квадраты были организованы в трио, связанные с шестью отдельными просветами лесного полога (т.е. каждый из шести просветов на участке исследования имел три квадрата, всего 18 квадратов на участок или 54 квадрата всего на всех участках). Каждая строка соответствует одному квадрату обследования. Включены данные об окружающей среде (высота над уровнем моря, открытость лесного полога и площадь основания леса). Обратите внимание, что это фиктивный набор данных в формате моего фактического набора данных — имена и значения переменных были отредактированы в целях безопасности данных.

Определения переменных:

study_site: общие направления, по которым проводились опросы. Категориальная переменная с тремя уровнями.

canopy_gap_ID: идентификатор каждого зазора в куполе. Категориальная переменная. Значения не обязательно уникальны (например, идентификатор разрыва полога = 2 верен для квадратов как на исследовательском участке № 1, так и на исследовательском участке № 3).

elevation: высота (м) квадрата относительно базового значения. Отрицательные значения находятся не ниже уровня моря, а чуть ниже произвольной отметки, принимаемой за ноль. Непрерывная переменная.

canopy_openness: показатель того, насколько открыт полог леса (в процентах, где 0 % соответствует полному закрытию, а 100 % — полному отсутствию полога). Непрерывная переменная.

ba_total: площадь подлеска вокруг квадрата (квадратные метры поперечного сечения деревьев на гектар). Целые числа.

abund: видовое обилие (количество/га). Целые числа.

Консоль:

> library(glmmTMB)
> library(tidyverse)
> dataIN <- read.csv("testing_insect_abund2.csv") %>%
+   dplyr::mutate(canopy_gap_ID = as.factor(canopy_gap_ID))
> head(dataIN)
  study_site canopy_gap_ID  elevation canopy_openness ba_total abund
1 studysite1             2 -19.134308       31.952001       20     0
2 studysite1             2 -33.968140        7.531575       80     0
3 studysite1             2 -52.965713        9.731771       50   257
4 studysite1             3   8.137726       16.040343       90     0
5 studysite1             3  -3.274323        7.346171      100     0
6 studysite1             3 -10.232712        6.932909       90     0
> glmmTMB(abund ~ elevation + canopy_openness + ba_total + elevation*canopy_openness + (1 | study_site:canopy_gap_ID), 
+         family = poisson(link = "log"), 
+         data = dataIN)
Formula:          abund ~ elevation + canopy_openness + ba_total + elevation *      canopy_openness + (1 | study_site:canopy_gap_ID)
Data: dataIN
      AIC       BIC    logLik  df.resid 
 7585.662  7597.596 -3786.831        48 
Random-effects (co)variances:

Conditional model:
 Groups                   Name        Std.Dev.
 study_site:canopy_gap_ID (Intercept) 12.99   

Number of obs: 54 / Conditional model: study_site:canopy_gap_ID, 18

Fixed Effects:

Conditional model:
              (Intercept)                  elevation            canopy_openness                   ba_total  elevation:canopy_openness  
               -1.368e+01                  8.103e-03                  6.163e-02                  4.958e-02                  4.093e-04  
Warning message:
In (function (start, objective, gradient = NULL, hessian = NULL,  :
  NA/NaN function evaluation

Необходимо ли устранять это предупреждающее сообщение? Если да, то как мне это сделать?

Есть ли у вас пропущенные значения в данных? Пожалуйста, покажите результат summary(dataIN)

Arthur 12.06.2024 14:37

Нет, пропущенных значений нет.

fre1990 12.06.2024 21:44
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

В общем, вам не стоит беспокоиться об этом предупреждении (хотя всегда полезно узнать, есть ли какой-нибудь способ избавиться от него, кроме suppressWarnings(), для ясности). Это просто означает, что в какой-то момент процесса подбора модели R попробовал набор параметров, которые привели к отрицательному значению логарифмического правдоподобия. Алгоритмы подгонки достаточно надежны, чтобы один (или несколько) таких экземпляров не сломали их.

Часто от таких предупреждений можно избавиться, масштабируя переменные-предикторы:

datasc <- datawizard::standardize(dataIN, exclude = "abund")
g2 <- update(g, data = datasc)

Однако в этой модели/наборе данных следует выделить несколько проблем (так что, возможно, предупреждение – это хорошо).

80% вашего изобилия равно нулю, а остальные варьируются в очень широких пределах (от 240 до 6920).

table(dataIN$abund)
   0  240  242  244  248  250  257  732  990  994 1472 6920 
  43    1    1    1    1    1    1    1    1    1    1    1 

Грубо говоря, вы, вероятно, не сможете получить многого из этих данных (независимо от того, сколько усилий они потратили на сбор...):

  • Пуассон почти наверняка не подходит; вам, вероятно, понадобится нулевая инфляция для учета нулей и, вероятно, отрицательный бином для сильно изменчивых ненулевых значений.
  • На практике вы, возможно, не сможете смоделировать что-либо, кроме присутствия/отсутствия или (отсутствие против [200-300] против [>500]).
  • Эмпирическое правило для двоичных данных заключается в том, что у вас должно быть около 10 эффективных выборок на каждый параметр, который вы собираетесь использовать, где «эффективные выборки» = min (количество нулей, количество ненулевых значений) — в данном случае это будет означать, что вы можете соответствует только 1 параметру (а не 5 плюс случайная дисперсия эффекта...).

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