Как построить взвешенное сглаживание лесса в ggplot2?

Как добавить сглаживание лесса, которое учитывает другой столбец в качестве весов?

Допустим, у меня есть следующий 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)

Построение лессового сглаживания приводит к следующему:

лёсс-выравнивание без утяжелителей

Но я хочу использовать вес столбца таким образом, чтобы лесс был таким же, как если бы каждая точка с весом 10 существовала в 10 раз:

    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)

сглаживание с грузами

Я нашел параметры весов функции лёсс. Но я не знаю, как вызвать его из geom_smooth().


person JerryWho    schedule 24.02.2014    source источник
comment
Лучший ответ см. здесь: stackoverflow.com/questions/13904788/   -  person zuuz    schedule 05.01.2015


Ответы (1)


Думаю, мне нужно добавить в aes только еще один параметр:

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

введите здесь описание изображения

person JerryWho    schedule 24.02.2014