如何基于GAMLSS模型预测的mu、sigma、nu、tau参数获取因变量预测值?
用GAMLSS预测BCPE分布的因变量值(住院时长)
方法一:直接用训练好的模型预测(更简便)
如果已经有训练完成的GAMLSS模型,无需先提取四个参数,直接调用内置函数即可:
- 预测均值(因变量的期望住院时长):
library(gamlss) # 假设训练好的模型为model_bcpe,new_data是待预测的新数据集 pred_mean <- predict(model_bcpe, newdata = new_data, type = "response")
- 预测中位数(更适合偏态的住院时长数据):
pred_median <- quantile(model_bcpe, newdata = new_data, q = 0.5)
方法二:基于已提取的mu/sigma/nu/tau参数预测
如果已经通过predictAll()得到了四个参数的预测值(存放在pred_params数据框中,列名为mu、sigma、nu、tau),可以用以下方式生成预测结果:
- 生成随机模拟的住院时长
适合需要模拟多个可能结果的场景:
# 生成与新数据行数一致的随机预测值 pred_lengths <- rBCPE(nrow(pred_params), mu = pred_params$mu, sigma = pred_params$sigma, nu = pred_params$nu, tau = pred_params$tau)
- 计算中位数预测值
利用BCPE分布的分位数函数直接得到稳健的点估计:
pred_median <- qBCPE(0.5, mu = pred_params$mu, sigma = pred_params$sigma, nu = pred_params$nu, tau = pred_params$tau)
- 计算均值预测值
BCPE分布的均值没有解析解,需通过数值积分计算:
# 定义单个BCPE分布的均值计算函数 bcpe_mean <- function(mu, sigma, nu, tau) { integrate(function(x) x * dBCPE(x, mu=mu, sigma=sigma, nu=nu, tau=tau), lower = 0, upper = Inf)$value } # 批量计算所有样本的均值 pred_mean <- mapply(bcpe_mean, mu = pred_params$mu, sigma = pred_params$sigma, nu = pred_params$nu, tau = pred_params$tau)
内容的提问来源于stack exchange,提问作者Joaquim Oristrell
相关产品推荐
相关产品推荐

