You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中从GAMLSS对象提取分位数制作年龄组参考表

解决方案

1. 定义目标参数

先明确要计算的年龄节点和百分位数:

# 目标百分位数(单位:%)
target_centiles <- c(2.5, 3, 5, 10, 25, 50, 75, 90, 95, 97, 97.5)

# 生成各年龄区间的代表性年龄点(可按需调整,比如按年取值或取区间端点/中点)
age_points <- c(seq(14, 18, 1), seq(19, 30, 1), seq(31, 65, 2))

2. 计算百分位参考值

直接用gamlss包的centiles()函数,基于已拟合的模型计算指定年龄和百分位的参考值:

# 计算参考值
ref_table <- centiles(m1_IAT_m, xname = "age", xvalues = age_points, cent = target_centiles)

# 转换为数据框并添加年龄分组标签
ref_df <- as.data.frame(ref_table)
ref_df$age_group <- cut(ref_df$age, 
                        breaks = c(13.9, 18, 30, 65),
                        labels = c("14-18岁", "18-30岁", "30-65岁"))

3. 整理并输出表格

可以用基础R或dplyr整理表格,方便查看或导出:

# 用dplyr按年龄分组整理(需先安装加载dplyr)
library(dplyr)
final_table <- ref_df %>%
  group_by(age_group) %>%
  select(age, all_of(paste0("C", target_centiles))) %>%
  arrange(age)

# 查看完整结果
print(final_table, n = Inf)

# 导出为CSV文件(可选)
write.csv(final_table, "IAT_reference_values.csv", row.names = FALSE)

备选方案(手动计算参数)

如果centiles()函数使用有问题,可手动预测分布参数后计算分位数:

# 构造新数据框
new_data <- data.frame(age = age_points)

# 预测BCPE分布的四个参数
mu <- predict(m1_IAT_m, newdata = new_data, parameter = "mu")
sigma <- predict(m1_IAT_m, newdata = new_data, parameter = "sigma")
nu <- predict(m1_IAT_m, newdata = new_data, parameter = "nu")
tau <- predict(m1_IAT_m, newdata = new_data, parameter = "tau")

# 计算各百分位对应的参考值
ref_values <- sapply(target_centiles/100, function(p) {
  qBCPE(p, mu = mu, sigma = sigma, nu = nu, tau = tau)
})

# 组合成最终数据框
ref_df_manual <- cbind(new_data, ref_values)
colnames(ref_df_manual)[-1] <- paste0("C", target_centiles)

内容的提问来源于stack exchange,提问作者FieJanis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:50:16