(這篇文章是問題的後半部分: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)
這導致在80行和5列的數據幀loess.DF。
我現在知道我必須應用函數來檢查原始mtcars數據框的每一行,併爲每個x值(hp)插入其最接近的預測黃土y值(wt)。我完成這種插值的唯一想法是使用類似於(http://www.ajdesigner.com/phpinterpolation/linear_interpolation_equation.php)的線性插值。之後,我將簡單比較mtcars中的y值與插值預測黃土y值。如果mtcars中的y值大於預測的黃土y值,則保留原始數據點;否則,我刪除它。
我開始編寫代碼,但意識到我無法以有效的方式做到這一點。一個問題是我的(真實)數據集(不是mtcars)非常大(約40,000行):首先,爲了進行線性插值,我需要找到最接近於黃土擬合的兩個x值我的數據集中的原始x值(如果沒有完全匹配的話),我不知道如何有效地做到這一點,而不需要搜索增加的黃土x值。
如何有效的方法來處理這個問題,例如,首先在mtcars數據集上進行測試?謝謝。