How to plot weighted loess smoothing in ggplot2?

ggplot2, loess, r, smoothing

Solution

I guess I have to add only another parameter to aes:

  ggplot(data=df, aes(x=x, y=y, size=weight, weight=weight)) + geom_point() + geom_smooth(method=loess, legend=FALSE)

Problem

How do I add a loess-smoothing which respects another column as weights? Let's say I have the following data.frame: ``` library(ggplot2) df <- data.frame(x=seq(1:21)) df$y <- df$x*0.3 + 10 df$weight <- 10 df[6,] <- c(6, 0.1, 1) df[7,] <- c(7, 0.1, 1) df[13,] <- c(13, 0.1, 1) df[14,] <- c(14, 0.1, 1) df[20,] <- c(20, 0.1, 1) df[21,] <- c(21, 0.1, 1) ggplot(data=df, aes(x=x, y=y, size=weight)) + geom_point() + geom_smooth(method=loess, legend=FALSE) ``` Plotting a loess-smoothing brings up the following: But I want to use the column weight such that loess is the same as if every point with weight 10 is 10-times existent: ``` df2 <- subset(df, !(x %in% c(6,7,13,14,20,21))) df2$weight <- 1 df3 <- df2 for(i in seq(1:9)){ df3 <- rbind(df3, df2) } df3 <- rbind(df3, c(6, 0.1, 1)) df3 <- rbind(df3, c(7, 0.1, 1)) df3 <- rbind(df3, c(13, 0.1, 1)) df3 <- rbind(df3, c(14, 0.1, 1)) df3 <- rbind(df3, c(20, 0.1, 1)) df3 <- rbind(df3, c(21, 0.1, 1)) ggplot(data=df3, aes(x=x, y=y)) + geom_point() + geom_smooth(method=loess, legend=FALSE) # or to demonstrate ggplot(data=df3, aes(x=x, y=y)) + geom_jitter() + geom_smooth(method=loess, legend=FALSE) ``` I found the parameter weights of the function loess. But I don't know how to invoke it from geom_smooth().

Original source

Related problems