Я пытаюсь использовать функцию R glmmTMB::glmmTMB(), чтобы подогнать обобщенную линейную модель смешанных эффектов к набору данных. Однако мне выдается предупреждение Warning message: In (function (start, objective, gradient = NULL, hessian = NULL, : NA/NaN function evaluation. Я не уверен, важно ли это предупреждение и как с ним справиться.
Два примечания:
glmmTMB по устранению неполадок (в разделе «Оценка функции NA/NaN» внизу страницы). Я не уверен, что это одно и то же предупреждение, но с немного другим текстом. Ссылка: https://cran.r-project.org/web/packages/glmmTMB/vignettes/troubleshooting.htmlcontrol = 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
Необходимо ли устранять это предупреждающее сообщение? Если да, то как мне это сделать?
Нет, пропущенных значений нет.





В общем, вам не стоит беспокоиться об этом предупреждении (хотя всегда полезно узнать, есть ли какой-нибудь способ избавиться от него, кроме 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
Грубо говоря, вы, вероятно, не сможете получить многого из этих данных (независимо от того, сколько усилий они потратили на сбор...):
Есть ли у вас пропущенные значения в данных? Пожалуйста, покажите результат
summary(dataIN)