La larghezza di banda ottimale per la stima dei derivati sarà diversa dalla larghezza di banda per la stima della densità. In generale, ogni caratteristica di una densità ha il proprio selettore di larghezza di banda ottimale.
Se il tuo obiettivo è minimizzare l'errore quadratico integrato medio (che è il solito criterio) non c'è nulla di soggettivo al riguardo. Si tratta di derivare il valore che minimizza il criterio. Le equazioni sono riportate nella sezione 2.10 di Hansen (2009) .
La parte difficile è che la larghezza di banda ottimale è una funzione della densità stessa, quindi questa soluzione non è direttamente utile. Esistono diversi metodi per provare a risolvere questo problema. Questi di solito approssimano alcuni funzionali della densità usando approssimazioni normali. (Si noti che non si suppone che la densità stessa sia normale. Si presume che alcuni funzionali della densità possano essere ottenuti assumendo la normalità.)
Dove vengono imposte le approssimazioni determina quanto è buono il selettore di larghezza di banda. L'approccio più rozzo è chiamato la "regola di riferimento normale" che impone l'approssimazione a un livello elevato. La fine della Sezione 2.10 di Hansen (2009) fornisce la formula usando questo approccio. Questo approccio è implementato nella hns()
funzione dal ks
pacchetto su CRAN. Questo è probabilmente il migliore che otterrai se non vuoi scrivere il tuo codice. Quindi puoi stimare la derivata di una densità come segue (usando ks
):
library(ks)
h <- hns(x,deriv.order=1)
den <- kdde(x, h=h, deriv.order=1)
Un approccio migliore, generalmente noto come selettore "plug-in diretto", impone l'approssimazione a un livello inferiore. Per la stima della densità lineare, questo è il metodo Sheather-Jones, implementato in R utilizzando density(x,bw="SJ")
. Tuttavia, non penso che ci sia una struttura simile disponibile in qualsiasi pacchetto R per la stima dei derivati.
Invece di usare la stima diretta del kernel, potresti stare meglio con uno stimatore polinomiale locale. Questo può essere fatto usando la locpoly()
funzione dal ks
pacchetto in R. Anche in questo caso, non è stata implementata una selezione ottimale della larghezza di banda, ma il bias sarà minore rispetto agli stimatori del kernel. per esempio,
den2 <- locpoly(x, bandwidth=?, drv=1) # Need to guess a sensible bandwidth