【问题标题】:Percentiles from VGAM来自 VGAM 的百分位数
【发布时间】:2015-02-17 06:29:42
【问题描述】:

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

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() 命令吗?感谢您的帮助。

【问题讨论】:

    标签: r ggplot2 regression quantile vgam


    【解决方案1】:

    这样的事情怎么样:

    # 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)
    

    【讨论】:

    • 我希望这些数字作为一个单独的表格而不是在情节上(我现在已经在问题中澄清了)。由于 y 轴不是百分比,因此无需使用数字粘贴“%”。但我可以管理这些事情。感谢您的回答。如果您可以编辑答案以单独打印值表,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2020-05-28
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    相关资源
    最近更新 更多