2015-11-04 7 views
0

Я создаю графики конвергенции для набора данных RDS в R и хотел бы обозначить эти графики. Прямо сейчас моя ось x - «# наблюдений», а моя ось Y - это оценки RDS, а сам график обозначается «График конвергенции для clientcondom = 1». Есть ли способ изменить это? Смотрите ниже код:Графики конвергенции меток в R

convergence.plot(site[[1]], 'clientcondom', est.func=RDS.I.estimates) convergence.plot(site[[2]], 'clientcondom', est.func=RDS.I.estimates) convergence.plot(site[[3]], 'clientcondom', est.func=RDS.I.estimates)

Кроме того, есть способ объединить эти участки в единый сюжет - У меня есть три места здесь, было бы неплохо, чтобы объединить их и смотреть на них бок о бок. Большое спасибо за ваши ответы!

Суматра

+0

Где 'convergence.plot' взялось? – Heroka

+0

@ Heroka, насколько я понимаю, график конвергенции связан с фреймом данных RDS, библиотека RDS. Я очень новичок в R, поэтому считаю, что это - любые предложения были бы оценены, спасибо! – sumatraed

+0

Я использовал некоторые из них в исходном коде конвергенции.plot, но я не вижу никакого решения, которое не включает в себя модификацию кода самостоятельно или повторное использование его частей для создания ваших собственных сюжетов. , – Heroka

ответ

0

Давайте начнем с вашим вторым вопросом: Если ваши данные в одном rds.data.frame, вы можете легко построить свои три участка на одном графике.

Во-первых, позволяет создать список, как у вас есть

set.seed(1) 
site1_df <-as.rds.data.frame(data.frame(id=1:10,recruiter.id=c("seed",5,7,3,8,2,10,9,1,6),network.size.variable=c(5,4,8,9,1,2,6,7,10,3),site1=as.factor(sample(c("blue", "red"), 10, replace = TRUE)))) 
site2_df <-as.rds.data.frame(data.frame(id=1:10,recruiter.id=c("seed",5,7,3,8,2,10,9,1,6),network.size.variable=c(5,4,8,9,1,2,6,7,10,3),site2=as.factor(sample(c("blue", "red"), 10, replace = TRUE)))) 
site3_df <-as.rds.data.frame(data.frame(id=1:10,recruiter.id=c("seed",5,7,3,8,2,10,9,1,6),network.size.variable=c(5,4,8,9,1,2,6,7,10,3),site3=as.factor(sample(c("blue", "red"), 10, replace = TRUE)))) 
sites_list <-list(site1_df,site2_df,site3_df) 

Тогда сократить список до одного rds.data.frame:

sites_df <-Reduce(function(...) merge(..., all=T), sites_list) 
sites_rds <-as.rds.data.frame(sites_df) 

Вы можете построить все объекты в одной и той же схеме:

convergence.plot(sites_rds,c("site1","site2","site3"), est.func=RDS.I.estimates) 

enter image description here

Для вашего первого вопроса вам необходимо создать свою собственную функцию convergence.plot2 на основе convergence.plot. Функция convergence.plot2 ниже ставит «Оценку оси Y» для ylab «Ось X-наблюдений» для xlab и «Ваш заголовок сходимости (сайт1,2,3)» для вашего title. Измените их по своему вкусу. Обязательно измените все вхождения.

convergence.plot2 <-function (rds.data, outcome.variable, est.func = RDS.II.estimates, 
    as.factor = FALSE, ...) 
{ 
    if (as.factor) { 
     for (o in outcome.variable) { 
      rds.data[[o]] <- as.factor(rds.data[[o]]) 
     } 
    } 
    f <- function(v) cumulative.estimate(rds.data, v, est.func, 
     ...) 
    ests <- lapply(outcome.variable, f) 
    make.plot <- function(i) { 
     Var1 <- Var2 <- value <- NULL 
     e <- ests[[i]] 
     nm <- outcome.variable[i] 
     if (ncol(e) == 2) { 
      e1 <- e[, 2, drop = FALSE] 
      attr(e1, "n") <- attr(e, "n") 
      e <- e1 
      nm <- paste0(outcome.variable[i], "=", colnames(e)[1]) 
      rds.data[[outcome.variable[i]]] <- as.factor(rds.data[[outcome.variable[i]]]) 
     } 
     if (ncol(e) > 1) { 
      rownames(e) <- attr(e, "n") 
      dat <- melt(e) 
      datl <- melt(e[nrow(e), , drop = FALSE]) 
      p <- ggplot(dat) + geom_line(aes(x = Var1, color = as.factor(Var2), 
       y = value)) + scale_color_hue(nm) + ylab("Y-axis Estimate") + 
       xlab("X-Axis # of Observations") + scale_y_continuous(limits = c(0, 
       1)) + theme_bw() 
      p <- p + geom_hline(data = datl, aes(yintercept = value, 
       color = as.factor(Var2)), linetype = 2, alpha = 0.5) 
      p 
     } 
     else { 
      dat <- data.frame(value = e[, 1], Var1 = attr(e, 
       "n")) 
      datl <- dat[nrow(dat), , drop = FALSE] 
      v <- rds.data[[outcome.variable[i]]] 
      rng <- if (!is.numeric(v)) 
       c(0, 1) 
      else range(v, na.rm = TRUE) 
      p <- ggplot(dat) + geom_line(aes(x = Var1, y = value)) + 
       ylab(paste("Estimated", nm)) + xlab("# of Observations") + 
       scale_y_continuous(limits = rng) + theme_bw() 
      p <- p + geom_hline(data = datl, aes(yintercept = value), 
       linetype = 2, alpha = 0.5) 
      p 
     } 
     return(p + ggtitle(paste("Your title Convergence plot of", nm))) 
    } 
    plots <- lapply(1:length(outcome.variable), make.plot) 
    do.call(.grid.arrange_RDS, plots) 
} 

Это то важно, чтобы добавить эту новую функцию в RDS среды. RDS использует функции, которые можно найти только в собственной среде.

environment(convergence.plot2) <- asNamespace('RDS') 

Вызов convergence.plot2:

convergence.plot2(sites_rds,c("site1","site2","site3"), est.func=RDS.I.estimates) 

enter image description here

Смежные вопросы