2016-09-30 2 views
2

Edit:Какова основная настройка для лесса в ggplot2 geom_smooth?

x = c(324, 219, 406, 273, 406, 406, 406, 406, 406, 168, 406, 273, 168, 406, 273, 168, 219, 324, 324, 406, 406, 406, 273, 273, 324, 324, 219, 273, 219, 273, 273, 324, 273, 324, 324, 406, 219, 406, 273, 273, 406, 219, 324, 273, 324, 406, 219, 324, 219, 324, 324, 406, 406, 406, 324, 273, 273, 219, 219, 324, 273, 324, 324, 219, 324, 219, 324, 219, 219, 324, 273, 406, 406, 273, 324, 273, 273, 219, 406, 273, 273, 324, 324, 324, 324, 324, 406, 324, 273, 406, 406, 219, 219, 324, 273, 406, 324, 324, 324, 324) 
y = c(68,121,NA,87,NA,17,20,15,17,146,25,91,141,24,88,143,120,63,62,16,21,20,83,88,65,63,124,88,120,91,85,65,91,63,69,23,115,23,87,90,20,120,65,90,65,20,120,60,110,60,17,20,20,20,68,80,87,124,121,65,85,67,60,115,60,120,66,121,117,68,90,17,23,90,61,80,88,121,NA,91,88,62,60,70,60,60,27,76,96,23,20,113,118,60,91,23,60,60,65,70) 

data = data.frame(x,y) 

Я создаю следующий график с ggplot2 и функция geom_smooth(). Я использовал код:

g = ggplot(data, aes(x,y)) + 
    geom_point() + 
    geom_smooth(method="loess") + 
    geom_smooth(method="lm", col="red") 

Мои данные содержат переменные x (имеет только 9 значений) и y (метрические). Теперь я хочу, чтобы добавить точки проекции loess метода, рассчитанного с кодом:

loes = loess(data$y ~ data$x) 
RR = sort(unique(predict(loes)), decreasing=TRUE) # y coordinates 
LL = unique(x, fromLast=TRUE) # x coordinates 

Теперь я добавляю эти точки проекции на мой участок.

g + geom_point(aes(y=RR[1], x=LL[1]), col="blue", size=2, shape=18) + 
    geom_point(aes(y=RR[2], x=LL[2]), col="blue", size=2, shape=18) + 
    geom_point(aes(y=RR[3], x=LL[3]), col="blue", size=2, shape=18) + 
    geom_point(aes(y=RR[4], x=LL[4]), col="blue", size=2, shape=18) + 
    geom_point(aes(y=RR[5], x=LL[5]), col="blue", size=2, shape=18) 

Почему синие точки не на синей лесс линии в ggplot? Используемый код для метода loess отличается от стандарта loess -функция в R?

Info: Для моих исходных данных с более чем 8.000 наблюдениями нет псевдоинверсных предупреждений, но проблема такая же.

Example Image

+0

[? Как сделать большой R воспроизводимый пример] (http://stackoverflow.com/questions/5963269) – Axeman

+0

@Axeman: Мои dataset ihas получил около 8.000 наблюдений, и мне не разрешено публиковать данные. Если я добавлю несколько синих точек, похоже, на линии. Если у вас есть предложение сделать его более ясным, сообщите мне. –

+0

Вы прочитали эту ссылку? В нем обсуждается целая куча стратегий, чтобы дать воспроизводимый пример, не разделяя (все) наши данные. Это происходит, если вы используете один из примеров в '? Geom_smooth'? – Axeman

ответ

5

Ошибка в этих строках:

loes = loess(y ~ x, data = data) 
RR = sort(unique(predict(loes)), decreasing=TRUE) # y coordinates 
LL = unique(x, fromLast=TRUE) # x coordinates 

предсказание выполняется с использованием той же функции, но не в порядке. Вы должны использовать newdata, чтобы соответствующим образом соответствовать прогнозу с помощью предикторов.

g = ggplot(data, aes(x,y)) + 
    geom_smooth(method="loess", color = "red") 

RR <- predict(loes, newdata = data.frame(x = unique(x))) 

g + annotate("point", x = unique(x), y = RR) 

Показывает точки, лежащие на сглаженной линии: enter image description here

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