首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VGAM百分位数

VGAM百分位数
EN

Stack Overflow用户
提问于 2014-12-18 12:55:09
回答 1查看 394关注 0票数 1

我正在使用VGAM包的帮助页中的以下示例

代码语言:javascript
复制
library(VGAM)
fit4 <- vgam(BMI ~ s(age, df = c(4, 2)), lms.bcn(zero = 1), data = bmi.nz, trace = TRUE)
qtplot(fit4, percentiles = c(5,50,90,99), main = "Quantiles", las = 1, xlim = c(15, 90), ylab = "BMI", lwd = 2, lcol = 4) 

我正在用它得到一个适当的图表:

如何避免从图表中绘制点?另外,我需要打印出这些百分位数的值,在每个年龄为20,30,40.80(单独作为一个表)。这是如何做到的呢?在这里,我可以使用ggplot()格式命令而不是qtplot()命令吗?谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-18 13:39:56

像这样的事怎么样:

代码语言:javascript
复制
# required packages
library(VGAM)
require(reshape2)
require(ggplot2)
# fitted values from vgam 
fit4 <- vgam(BMI ~ s(age, df = c(4, 2)), lms.bcn(zero = 1), data = bmi.nz, trace = TRUE)
fitted.values <- data.frame(qtplot.lmscreg(fit4, percentiles = c(5,50,90,99))$fitted.values)
fitted.values[, 'age'] <- bmi.nz[, 'age']
# melt data.frame
dmelt <- melt(fitted.values, id.vars='age')
# ploting
ggplot(dmelt, aes(age, value, group=variable)) + 
  geom_line(color='blue') + 
  annotate(geom='text', 
           x = max(bmi.nz[, 'age']) + 3, 
           y = unlist(fitted.values[which.max(fitted.values[, 'age']), -ncol(fitted.values)]),
           label=c(' 5%', '50%', '90%', '99%')) +
  lapply(2:8*10, function(i) {
    annotate(geom='text', 
           x = i, 
           y = 1+unlist(fitted.values[which.min(abs(fitted.values[, 'age'] - i)), -ncol(fitted.values)]),
           label=paste0(round(unlist(fitted.values[which.min(abs(fitted.values[, 'age'] - i)), -ncol(fitted.values)]),1), '%'))
  }) +
  scale_y_continuous('BMI') +
  theme_bw(base_size=16)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27547093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档