Ошибка в нулевой завышенной модели (zip) с бамом

Я пытаюсь использовать bam для запуска следующей обобщенной аддитивной модели:

m <- bam(result ~ factor(city) + factor(year) + lnpopulation + s(lnincome), data=full_df, na.action=na.omit, family=ziP(theta = NULL, link = "identity",b=0))

Но получаю следующую ошибку:

Ошибка в bam (результат: расширенные семейства не поддерживаются bam

В документации для bam упоминается следующее:

Это объект семейства, определяющий распределение и ссылку для использования при подгонке и т. д. Для получения более подробной информации см. glm и семейство. Также можно использовать расширенные семейства, перечисленные в файле family.mgcv.

Файл family.mgcv включает zip. Что я делаю не так? Любое руководство будет оценено. Благодарю вас!

Перепост с r-help.

Искренне,

Милу


person miluji    schedule 07.11.2017    source источник


Ответы (1)


Сообщение об ошибке указывает, что используемая вами версия mgcv не поддерживает эти расширенные семейства, которые в противном случае поддерживаются функцией gam() mgcv.

К счастью, решение вашей проблемы тривиально, поскольку Саймон Вуд теперь реализовал эту функцию (расширенные семейства в пределах bam()) из версий 1.8-19, как указано в ChangeLog:

1.8-19

** bam() теперь принимает расширенные семьи (т.е. nb, tw, ocat и т. д.)

Текущая версия 1.8-22 исправляет некоторые ошибки, связанные с функциями, которые вы ищете, поэтому убедитесь, что вы обновились до последней версии.

Вот пример модифицированный из ?ziP

 ## function to simulated zip data

 rzip <- function(gamma,theta= c(-2,.3)) {
 ## generate zero inflated Poisson random variables, where 
 ## lambda = exp(gamma), eta = theta[1] + exp(theta[2])*gamma
 ## and 1-p = exp(-exp(eta)).
   y <- gamma; n <- length(y)
   lambda <- exp(gamma)
   eta <- theta[1] + exp(theta[2])*gamma
   p <- 1- exp(-exp(eta))
   ind <- p > runif(n)
   y[!ind] <- 0
   np <- sum(ind)
   ## generate from zero truncated Poisson, given presence...
   y[ind] <- qpois(runif(np,dpois(0,lambda[ind]),1),lambda[ind])
   y
 } 

 library('mgcv')

 ## Simulate some ziP data...
 set.seed(1);n<-400
 dat <- gamSim(1,n=n)
 dat$y <- rzip(dat$f/4-1)

 b <- bam(y ~ s(x0) + s(x1) + s(x2) + s(x3),
          family = ziP(), data = dat)

Что дает мне следующую подогнанную модель:

> summary(b)

Family: Zero inflated Poisson(-1.855,1.244) 
Link function: identity 

Formula:
y ~ s(x0) + s(x1) + s(x2) + s(x3)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.97426    0.04988   19.53   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Approximate significance of smooth terms:
        edf Ref.df      F p-value    
s(x0) 2.396  2.989  2.336  0.0759 .  
s(x1) 2.784  3.464 77.217  <2e-16 ***
s(x2) 7.397  8.317 59.364  <2e-16 ***
s(x3) 1.235  1.428  0.269  0.5888    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Deviance explained =   69%
fREML = 593.94  Scale est. = 1         n = 400
person Gavin Simpson    schedule 14.11.2017
comment
Я использую 1.8-33 (с переменной смещения) и также получаю ошибки: Ошибка в l1[!zind, 1] ‹- yp + lg$l1[!zind] : количество заменяемых элементов не кратно сменная длина - person timothy.s.lau; 01.03.2021