Процентили от VGAM

Я использую следующий пример со страниц справки пакета 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()? Спасибо за вашу помощь.


person rnso    schedule 18.12.2014    source источник


Ответы (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)
person shadow    schedule 18.12.2014
comment
Я хотел цифры в виде отдельной таблицы, а не на графике (я уточнил сейчас в вопросе). Нет необходимости вставлять «%» с числами, так как ось Y не является процентом. Но я могу управлять этими вещами. Спасибо за Ваш ответ. Если вы сможете отредактировать ответ для отдельной распечатки таблицы значений, это будет отлично. - person rnso; 18.12.2014