(Это сообщение является второй половиной проблемы из: How to apply loess.smoothing to both plot and then extract points?)Как интерполировать и извлечь точки над лессовой гладкой в R?
Я нанесен лессом сглаживания на диаграмме рассеяния (то есть между двумя количественными переменным). Я хотел бы извлечь только точки данных в диаграмме рассеяния, которые находятся выше этой линии сглаживания.
Например, если это мое рассеивание:
qplot(mpg, cyl, data=mtcars)
Я могу построить тем более гладкий, как:
qplot(hp,wt,data=mtcars) + stat_smooth(method="loess")
Теперь я хочу, чтобы извлечь только точки данных, которые выше гладкого. Я играл с кодом, представленным в (Method to extract stat_smooth line fit):
model <- loess(wt ~ hp, data=mtcars)
xrange <- range(mtcars$hp)
xseq <- seq(from=xrange[1], to=xrange[2], length=80)
pred <- predict(model, newdata = data.frame(hp = xseq), se=TRUE)
y = pred$fit
ci <- pred$se.fit * qt(0.95/2 + .5, pred$df)
ymin = y - ci
ymax = y + ci
loess.DF <- data.frame(x = xseq, y, ymin, ymax, se = pred$se.fit)
Это приводит к кадру данных loess.DF 80 строк и 5 столбцов.
Теперь я знаю, что я должен применить функцию для прохождения каждой строки исходного фрейма данных mtcars и интерполировать для каждого x-значения (hp) его ближайшее предсказанное значение yess yess (wt). Моя единственная идея выполнить эту интерполяцию - использовать линейную интерполяцию, подобную (http://www.ajdesigner.com/phpinterpolation/linear_interpolation_equation.php). После этого я бы просто сравнил значение y в mtcars с интерполированным предсказанным значением yess leess. Если значение y в mtcars больше, чем предсказанное значение y leess, тогда я сохраняю эту исходную точку данных; В противном случае я удаляю его.
Я начал кодировать это, но понимаю, что я не могу сделать это эффективным образом. Одна из проблем заключается в том, что мой (реальный) набор данных (который не является mtcars) очень велик (~ 40 000 строк): во-первых, чтобы выполнить линейную интерполяцию, мне нужно найти два значения x в лессовой подгонке, которые наиболее близки к исходное значение x в моем наборе данных (если нет точно одного идеального совпадения), и я не знаю, как это сделать эффективно, не просматривая увеличивающиеся значения x.
Как эффективный способ приблизиться к этому, например, сначала проверить его на наборе данных mtcars? Спасибо.