3

这个问题与:Selecting Percentile curve 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 个百分位数?

我试图阅读帮助页面并找到 fit(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
4

1 回答 1

3

看看这是否有意义。具有“smn”和“ssd”的均值和 sd 的正态分布的第 90 个百分位是qnorm(.9, smn, ssd):所以这似乎提供了(有点)合理的结果,尽管不是centiles我建议的完整破解:

 plot(h$xvar, qnorm(.9, fitted(h), h$sigma.fv))

(请注意仅从几个不同的 xvars 但 500 点的大量过度绘图。并且您可能想要设置 ylim 以便可以欣赏整个范围。)

在此处输入图像描述

这里需要注意的是,你需要检查模型的其他部分,看看它是否真的只是一个普通的 Normal 模型。在这种情况下,它似乎是:

> h$mu.formula
y ~ pb(x)
<environment: 0x10275cfb8>
> h$sigma.formula
~1
<environment: 0x10275cfb8>
> h$nu.formula
NULL
> h$tau.formula
NULL

因此,该模型只是~1在 范围内具有固定方差 (the ) 的均值估计xvar,并且没有像 Box-Cox 模型这样的高阶参数带来的复杂性。(而且我无法解释为什么这与绘制的百分位数不同。为此,您可能需要与包作者通信。)

于 2014-12-16T18:08:59.223 回答