参考来自http://psy-data.github.io/2015/theory_page6.html
具体实现是我同学的数据,数据就不贴了,主要放代码
library(dplyr) #好像没有使用到dplyr的函数,可以不载入
library(gamlss)
# 计算儿童的年龄
age=difftime(as.Date("2019-01-01"),gamdata$BIRTH,units = "days")
age=round(age/365) #取整了
# 看一下儿童年龄的范围
max(newdata$age)
min(newdata$age)
gamdata$age=age
# 将Hb1A与年龄合并成新数据集,原始集里有其他变量
dia=gamdata$tanghua
bing=cbind.data.frame(age,dia)
# 缺失值可视化,
library(VIM)
aggr(bing,prop=FALSE,numbers=TRUE)
View(bing)
newdata=na.omit(bing) #删除缺失行
newdata=newdata[newdata$dia!=999,] #删除缺失值999的行
# 模型测试
gammodel=gamlss(dia~cs(age,df=3),family = BCT,data = newdata) #对Hb1A(dia)进行了box-cox变换,这里没有对sigma,tau,nu进行设定,对mu采用了三次样条拟合cs(age,df=3)
plot(gammodel) #绘制模型最后训练的参数的残差图,QQ图等
summary(gammodel) #观测每个参数最终的形式以及他们的估计
#绘制分位数曲线
centiles(gammodel,newdata$age,cent = c(1,99)) #绘制分位数曲线,cent设置图中需要的分位数
# 输出各个年龄下的Hb1A的1,99分位数的具体数值
range(newdata$age) #观测年龄的取值范围
newx=seq(3,17,2)