編輯#2:
上格雷格斯諾的指教以下爲使用分析expressi在爲derivative of a Gaussian,和我們的談話後,他的職位,這將讓你確切的斜率在每一點:
s <- d$bw;
slope2 <- sapply(x, function(X) {mean(dnorm(x - X, mean = 0, sd = s) * (x - X))})
## And then, to compare to the method below, plot the results against one another
plot(slope2 ~ slope)
編輯:
OK,我只是重讀你的問題,並看到你想要在輸入矢量x
中的每個點上傾斜。以下是你可能會接近是一種方法:
slope <- (diff(d$y)/diff(d$x))[findInterval(x, d$x)]
的可能進一步的細化是要找到它的區間內的點的位置,然後計算其斜率作爲本區間的斜率的加權平均以及其右側或左側的間隔。
我會通過平均每個點右側和左側的線段斜率來達到此目的。 (特別注意的一點需要採取的第一個和最後一個點,它沒有細分到他們的左側和右側,分別。)
dy <- diff(d$y)
dx <- diff(d$x)[1] ## Works b/c density() returns points at equal x-intervals
((c(dy, tail(dy, 1)) + c(head(dy, 1), dy))/2)/dx
不錯的主意。對於標準正態分佈,斜率(根據維基百科)將是'dnorm(x)* x'。那麼帶寬/標準偏差's',是否是'dnorm(x,0,sd = s)* x'或'dnorm(x,0,sd = s)* x/s'? –
@ JoshO'Brien在那裏至少應該有一個$ - $以及可能是另一個涉及$ s $的部分,當它不是1時。 –
是的,我挖了一點,看起來有兩個因素的''''取消了。這是正確的公式:'s < - d $ bw;斜率< - sapply(x,function(X){mean(dnorm((x-X),0,s)*(x-X))})' –