线性模型与其他GLM的GAIC计算异常及修正方法求助
模型GAIC计算异常问题排查
数据集
数据集地址:https://raw.githubusercontent.com/yuliaUU/test/main/test.csv
拟合模型的代码
library(gamlss) library(tidyverse) data_final <- read_csv("https://raw.githubusercontent.com/yuliaUU/test/main/test.csv") # 带对数变换的正态模型 model_1 <- gamlss(log(Abundance) ~ salinity*avrg_dep, data = data_final, family = NO()) # 对数正态模型 model_2 <- gamlss(Abundance ~ salinity*avrg_dep, data = data_final, family = LOGNO()) # 逆高斯分布模型 model_3 <- gamlss(Abundance ~ salinity*avrg_dep, data = data_final, family = IG()) # Gamma模型 model_4 <- gamlss(Abundance ~ salinity*avrg_dep, data = data_final, family = GA())
问题背景
我希望用GAIC比较上述四个模型,但model_1的GAIC值与其余模型相差极大。我了解到:
为确保带响应变量变换的线性模型的GAIC具备可比性,需使用乘以雅可比行列式的变换对数似然,手动重新计算GAIC。
手动计算GAIC的尝试代码
Jacobian <- 1/abs(data_final$Abundance) # 计算对数尺度下的拟合值 fitted_values_log <- predict(model_1) # 手动计算对数尺度下的残差 residuals_transformed <- log(data_final$Abundance) - fitted_values_log # 计算残差的标准差 sd_residuals_transformed <- sd(residuals_transformed) # 计算变换后的对数似然 log_likelihood_transformed <- sum(dnorm(log(data_final$Abundance), mean=fitted_values_log, sd=sd_residuals_transformed, log=TRUE) * Jacobian) # 计算自由度:模型中的参数数量 df <- length(coef(model_1)) # 手动计算GAIC GAIC_transformed <- -2 * log_likelihood_transformed + 2 * df GAIC_transformed
求助
但按上述代码计算出的GAIC数值仍然异常,恳请帮忙排查错误。
内容的提问来源于stack exchange,提问作者yuliaUU
相关产品推荐
相关产品推荐

