簡體   English   中英

核密度的導數

[英]Derivative of Kernel Density

我使用密度{stats}來構造變量向量的內核“高斯”密度。如果我使用以下示例數據集:

    x <- rlogis(1475, location=0, scale=1)  # x is a vector of values - taken from a rlogis just for the purpose of explanation
    d<- density(x=x, kernel="gaussian")

有沒有辦法在每個n=1475點獲得該密度d的一階導數

編輯#2:

繼Greg Snow關於使用高斯導數的解析表達式的優秀建議,以及他們的帖子之后的對話,這將獲得每個點的確切斜率:

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)

編輯:

好的,我只是重讀了你的問題,看到你想要輸入向量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

密度估計器的曲線只是所有內核的總和,在您的情況下是高斯(除以點數)。 和的導數是導數和常數的導數的和,乘以一個常數乘以導數。 因此,給定點處的密度估計的導數將僅是該給定點處的1475條不同高斯曲線的斜率的平均值。 每條高斯曲線將具有對應於每個數據點的平均值和基於帶寬的標准偏差。 因此,如果您可以計算高斯的斜率,那么找到密度估計的斜率只是1475個斜率的平均值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM