Peter
Peter

Reputation: 143

plot survival curves with confident interval bars

Hi I would have a question. I am trying to draw 3 survival curve on the same plot. For each plot I would like to add the confident interval.

For this I have a data frame

          dput(df)
    structure(list(lowerA = c(4.1, 4.6, 5.5, 4.7, 5), Group1 = c(4.8, 
5.4, 6.4, 5.5, 5.7), upperA = c(5.7, 6.3, 7.3, 6.3, 6.6), lowerB = c(6.2, 
7.1, 8.7, 7.4, 8.2), Group2 = c(7.3, 8.3, 10, 8.6, 9.5), upperB = c(8.6, 
9.6, 11.4, 9.9, 10.8), lowerC = c(18.3, 19.5, 24.3, 22.9, 25.5
), Group3 = c(21.4, 22.5, 27.6, 26.3, 29), upperC = c(24.7, 25.8, 
31, 29.8, 32.7)), .Names = c("lowerA", "Group1", "upperA", "lowerB", 
"Group2", "upperB", "lowerC", "Group3", "upperC"), row.names = c("year1", 
"year2", "year3", "year4", "year5"), class = c("tbl_df", "tbl", 
"data.frame"))

I tried this. It works but it's not beautiful.

ya <- rownames(df)
xa <- Group1
z1a <- lowerA
z2a <- upperA


xb <- Group2
z1b <- lowerB
z2b <- upperB


xc <- Group3
z1c <- lowerC
z2c <- upperC
#
plot(ya, xa, ylim = c(0,40))
lines(ya, xa, c)
# now the confidence bands
lines(ya, z1a, lty = "dotted")
lines(ya, z2a, lty = "dotted")

lines(yb, xb, col="green")
# now the confidence bands
lines(yb, z1b, lty = "dotted",col="green")
lines(yb, z2b, lty = "dotted", col="green")

lines(yc, xc, col="red")
# now the confidence bands
lines(yc, z1c, lty = "dotted", col="red")
lines(yc, z2c, lty = "dotted", col="red")

Any help? Suggestion?

Best, Peter

Upvotes: 0

Views: 166

Answers (1)

tobiasegli_te
tobiasegli_te

Reputation: 1463

You could do something like this:

colnames(df) <- gsub("A","1",colnames(df))
colnames(df) <- gsub("B","2",colnames(df))
colnames(df) <- gsub("C","3",colnames(df))

colors <- c("blue","green","red")

library(scales)
plot(df$Group1, type = "n",ylim = c(0,40))
for(i in 1:3){
    lines(df[,paste0("Group",i)], col = colors[i])

    polygon(x = c(1:nrow(df),nrow(df):1),
        y = c(df[,paste0("lower",i)],rev(df[,paste0("upper",i)])),
        col = alpha(colors[i], 0.1),
        border = NA)

    arrows(x0 = c(1:nrow(df)),
        x1 = c(1:nrow(df)),
        y0 = df[,paste0("lower",i)],
        y1 = df[,paste0("upper",i)],
        col = colors[i],
        angle = 90,
        length = 0.05,
        code = 3)
}

legend("topleft", legend = c("A","B","C"),
    col = c("blue","green","red"),
    lty = 1,
    bty = "n")

Edit: Note that the colors of the polygons are semitransparent, overlaps of confidence intervals remain visible. I changed a value in your example to illustrate this.

Edit 2: I added a legend and error bars Plot

Upvotes: 1

Related Questions