0

我正在拟合 Rgamlss模型:

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"))

这就是我得到的:

> 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 

我想以格式保存这个gamlss.fit模型以备后用。RDSsaveRDS功能工作正常。

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

但是,如果我终止当前R会话,打开一个新会话并读取RDS保存的gamlss.fit模型,我会得到:

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

所以我不能真正将这个对象用于下游的任何事情。

我认为tidypredict'sparse_model函数可能会派上用场,但它似乎不支持解析gamlss模型:

> 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.

saveRDS是特定于gamlss因为如果我适合glm模型:

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

这使:

> 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

RDS从保存的文件中读取后,我会得到相同的结果:

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

顺便说一句,tidypredict'sparse_model既不支持解析glm模型:

> 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.

任何想法是否以及如何在gamlss不使用该函数的情况下保存模型,这里save讨论了它的缺点

4

0 回答 0