1

I'm fitting an R gamlss model:

set.seed(1)
df <- data.frame(group = c(rep("g1",100),rep("g2",100),rep("g3",100)),
                 value = c(rgamma(100,rate=5,shape=3),rgamma(100,rate=5,shape=4),rgamma(100,rate=5,shape=5)))
df$group <- factor(df$group, levels=c("g1","g2","g3"))
gamlss.fit <- gamlss::gamlss(formula = value ~ group, sigma.formula = ~group, data = df, family=gamlss.dist::GA(mu.link="log"))

This is what I get:

> gamlss.fit

Family:  c("GA", "Gamma") 
Fitting method: RS() 

Call:  gamlss::gamlss(formula = value ~ group, sigma.formula = ~group,      family = gamlss.dist::GA(mu.link = "log"), data = df) 

Mu Coefficients:
(Intercept)      groupg2      groupg3  
    -0.5392       0.2553       0.5162  
Sigma Coefficients:
(Intercept)      groupg2      groupg3  
   -0.66318      0.02355     -0.08610  

 Degrees of Freedom for the fit: 6 Residual Deg. of Freedom   294 
Global Deviance:     217.18 
            AIC:     229.18 
            SBC:     251.402 

I want to save this gamlss.fit model in RDS format for later use. The saveRDS function works fine.

saveRDS(gamlss.fit, "my.gamlss.fit.RDS")

But then if I terminate the current R session, open a new one and read the RDS saved gamlss.fit model, I get:

Call:  gamlss::gamlss(formula = value ~ group, sigma.formula = ~group,
    family = gamlss.dist::GA(mu.link = "log"), data = df)

No coefficients


Degrees of Freedom: Total (i.e. Null);  294 Residual
Error in signif(x$null.deviance, digits) :
  non-numeric argument to mathematical function

So I cannot really use this object for anything downstream.

I thought that tidypredict's parse_model function might come in handy, but it doesn't seem to support parsing the gamlss model:

> gamlss.parsed.fit <- tidypredict::parse_model(gamlss.fit)
Error: Functions inside the formula are not supported.
- Functions detected: `gamlss`,`gamlss.dist`,`GA`. Use `dplyr` transformations to prepare the data.

This saveRDS is specific to gamlss because if I fit a glm model:

glm.fit <- glm(formula = value ~ group, data = df, family="Gamma"(link='log'))

Which gives:

> glm.fit

Call:  glm(formula = value ~ group, family = Gamma(link = "log"), data = df)

Coefficients:
(Intercept)      groupg2      groupg3  
    -0.5392       0.2553       0.5162  

Degrees of Freedom: 299 Total (i.e. Null);  297 Residual
Null Deviance:      93.25 
Residual Deviance: 79.99    AIC: 226.9

I'll get the same after reading it from the RDS saved file:

Call:  glm(formula = value ~ group, family = Gamma(link = "log"), data = df)

Coefficients:
(Intercept)      groupg2      groupg3
    -0.5392       0.2553       0.5162

Degrees of Freedom: 299 Total (i.e. Null);  297 Residual
Null Deviance:      93.25
Residual Deviance: 79.99    AIC: 226.9

BTW, tidypredict's parse_model neither supports parsing a glm model:

> glm.parsed.fit <- tidypredict::parse_model(glm.fit)
Error: Functions inside the formula are not supported.
- Functions detected: `Gamma`. Use `dplyr` transformations to prepare the data.

Any idea if and how a gamlss model can be saved not using the save function, which its drawbacks are discussed here

dan
  • 6,048
  • 10
  • 57
  • 125

0 Answers0