Графики плотности слоев в R без использования density ()

Я вычислил и построил оценки плотности ядра по Гауссу с использованием пакета KernSmooth следующим образом:

 x <- MyData$MyNumericVector
 h <- dpik(x)
 est <- bkde(x, bandwidth=h)
 plot(est, type='l')

Это метод, описанный в документации KernSmooth. Обратите внимание, что dpik() находит оптимальную полосу пропускания, а bkde() использует эту полосу пропускания для соответствия оценке плотности ядра. Важно, чтобы я использовал этот метод вместо базовой функции density().

Как мне наложить эти графики друг на друга?

Я не могу использовать базовую density() функцию, на которую опирается geom_density() из ggplot2, поскольку оценки пропускной способности и плотности ядра лучше всего оптимизировать с помощью пакета KernSmooth (см. Deng & Wickham, 2011 здесь: http://vita.had.co.nz/paper/density-rating.pdf). Поскольку Уикхэм написал ggplot2 и вышеупомянутый обзор пакетов оценки плотности ядра, было бы логично, что есть способ использовать ggplot2 для определения плотности слоев, который не зависит от базовой функции density(), но я не уверен.

Могу ли я использовать для этого ggplot2, даже если я не хочу использовать базовую density() функцию? А что насчет lattice?


person logan_stats    schedule 08.07.2015    source источник


Ответы (1)


Вы можете сделать это с помощью geom_line:

 m <- ggplot(NULL, aes(x=bkde(movies$votes)$x,y=bkde(movies$votes)$y)) + geom_line()
 print(m)

Если бы вы делали t с помощью lattice :: densityplot, вы, вероятно, могли бы добавить некоторые значения в список перетаскивания:

darg
список аргументов, передаваемых в функцию плотности. Как правило, это должен быть список с нулем или более следующих компонентов: bw, adjust, kernel, window, width, give.Rkern, n, from, to, cut, na.rm (подробности см. В плотности)

person IRTFM    schedule 08.07.2015
comment
Для интересующихся вот как получился код: ggplot() + geom_line(aes(x = bkde(MyFirstDataframe$MyNumericVector, bandwidth = h)$x, y = bkde(MyFirstDataframe$MyNumericVector, bandwidth = h)$y)) + geom_line(aes(x = bkde(MySecondDataframe$MyNumericVector, bandwidth = h)$x, y = bkde(MySecondDataframe$MyNumericVector, bandwidth = h)$y)) - person logan_stats; 09.07.2015