此问题与:Selecting Percentile curves using gamlss::lms 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个百分点?
我尝试阅读帮助页面并找到拟合(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
答案 0 :(得分:2)
看看这是否有意义。正态分布的第90个百分位,其平均值和sd为' smn'和' ssd'是qnorm(.9, smn, ssd)
:所以这似乎提供了(有些)明智的结果,虽然不是我建议的centiles
的全部黑客:
plot(h$xvar, qnorm(.9, fitted(h), h$sigma.fv))
(注意只有几个不同的xvars但是500点的大量过度绘图。你可能想要设置ylim以便可以欣赏整个范围。)
这里需要注意的是,你需要检查模型的其他部分,看看它是否真的只是普通的普通模型。在这种情况下似乎是:
> h$mu.formula
y ~ pb(x)
<environment: 0x10275cfb8>
> h$sigma.formula
~1
<environment: 0x10275cfb8>
> h$nu.formula
NULL
> h$tau.formula
NULL
因此,模型只是在~1
范围内具有固定方差(xvar
)的均值估计,并且没有像Box-Cox模型那样的高阶参数的复杂性。 (而且我无法解释为什么这与绘制的百分位数不同。为此你可能需要与包作者对应。)