这个问题与:在 R 中使用 gamlss::lms 选择百分位数曲线 https://stackoverflow.com/questions/27497068/selecting-percentile-curves-using-gamlsslms-in-r
我可以从以下数据和代码得到百分位曲线:
age = sample(5:15, 500, replace=T)
yvar = rnorm(500, age, 20)
mydata = data.frame(age, yvar)
head(mydata)
age yvar
1 12 13.12974
2 14 -18.97290
3 10 42.11045
4 12 27.89088
5 11 48.03861
6 5 24.68591
h = lms(yvar, age , data=mydata, n.cyc=30)
centiles(h,xvar=mydata$age, cent=c(90), points=FALSE)
现在,我如何获得曲线上每个 x 值 (5:15) 的 yvar(代表平滑后数据的第 90 个百分位数)?
我尝试阅读帮助页面并发现fitting(h)和fv(h)来获取整个数据的拟合值。但是如何获得每个年龄层在 90 百分位数曲线水平上的值呢?感谢您的帮助。
编辑:下图显示了我需要的内容:
我尝试了以下操作,但它是正确的,因为值不正确:
mydata$fitted = fitted(h)
aggregate(fitted~age, mydata, function(x) quantile(x,.9))
age fitted
1 5 6.459680
2 6 6.280579
3 7 6.290599
4 8 6.556999
5 9 7.048602
6 10 7.817276
7 11 8.931219
8 12 10.388048
9 13 12.138104
10 14 14.106250
11 15 16.125688
这些值与直接来自数据的第 90 分位数有很大不同:
> aggregate(yvar~age, mydata, function(x) quantile(x,.9))
age yvar
1 5 39.22938
2 6 35.69294
3 7 25.40390
4 8 26.20388
5 9 29.07670
6 10 32.43151
7 11 24.96861
8 12 37.98292
9 13 28.28686
10 14 43.33678
11 15 44.46269