Получение кривой (не нормально распределенной) поверх гистограммы - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь получить кривую поверх гистограммы; однако кривая каким-то образом начиналась с y = 0, а x при некотором отрицательном значении, но она должна начинаться с x = 0, где она имеет самую высокую частоту.

Это значения data:

 [1] 0.41645505 0.17807010 0.04401494 0.00000000 0.53424325 0.00000000 0.78833026 0.14429310 0.00000000 0.35345068 0.00000000 0.00000000
[13] 0.03157549 0.00000000 0.00000000 0.83979615 0.15510495 0.00000000 0.00000000 0.38146542 0.60273251 0.28437203 0.00000000 0.00000000
[25] 0.63672858 0.00000000 0.28479730 0.00000000 0.73017781 0.39795789 0.00000000 0.00000000 0.56448031 0.00000000 0.92790850 0.00000000
[37] 0.00000000 0.46136357 0.27828194 0.00000000 0.01385383 0.36895497 0.06200592 0.00000000 0.17517336 0.57521911 0.00000000 0.32508820
[49] 0.00000000 0.00000000
hist(data)

Созданная гистограмма в порядке. Однако, когда я попытался построить кривую сверху:

plot(density(data))

он создал график, который начинался с (-0.2, 0), но в данных нет значения, которое было бы отрицательным.

Мне нужна кривая / линия на верхней части столбцов гистограммы.

Ответы [ 2 ]

4 голосов
/ 07 июля 2019

tl; dr используйте from=0 в своем выражении плотности, чтобы ограничить диапазон. (Не забудьте использовать freq=FALSE или prob=TRUE в своей гистограмме для масштабирования гистограммы до плотностей, а не счетчиков.)

Данные:

dat  <- c(0.41645505,0.17807010,0.04401494,0.00000000, 0.53424325,
          0.00000000,0.78833026,0.14429310,0.00000000,0.35345068,
          0.00000000,0.00000000,0.03157549,0.00000000,0.00000000,
          0.83979615,0.15510495,0.00000000,0.00000000,0.38146542,
          0.60273251,0.28437203,0.00000000,0.00000000,0.63672858,
          0.00000000,0.28479730,0.00000000,0.73017781,0.39795789,
          0.00000000,0.00000000,0.56448031,0.00000000,0.92790850,
          0.00000000,0.00000000,0.46136357,0.27828194,0.00000000,
          0.01385383,0.36895497,0.06200592,0.00000000,0.17517336,
          0.57521911,0.00000000,0.32508820,0.00000000,0.00000000)

Использование from=0 в density() указывает R начать вывод с 0. Если вы хотите получить более гладкую, менее плавную линию, вы можете понизить аргумент adjust до density(). Ответ @ RuiBarradas показывает вам, как провести плавную линию через середины вершин столбцов гистограммы - хотя, возможно, это не имеет большого теоретического смысла как способ характеризации плотности.

par(las=1)
hist(dat,freq=FALSE,col="gray", main="")
lines(density(dat, from=0),col=2,lwd=2)
lines(density(dat, from=0, adjust=0.25),col=4,lwd=2)

enter image description here

0 голосов
/ 07 июля 2019

Используя lattice, вы можете найти и визуализировать распределение внутри каждой корзины:

Если ваша обычная гистограмма выглядит следующим образом:

dat  <- c(0.41645505,0.17807010,0.04401494,0.00000000, 0.53424325,
          0.00000000,0.78833026,0.14429310,0.00000000,0.35345068,
          0.00000000,0.00000000,0.03157549,0.00000000,0.00000000,
          0.83979615,0.15510495,0.00000000,0.00000000,0.38146542,
          0.60273251,0.28437203,0.00000000,0.00000000,0.63672858,
          0.00000000,0.28479730,0.00000000,0.73017781,0.39795789,
          0.00000000,0.00000000,0.56448031,0.00000000,0.92790850,
          0.00000000,0.00000000,0.46136357,0.27828194,0.00000000,
          0.01385383,0.36895497,0.06200592,0.00000000,0.17517336,
          0.57521911,0.00000000,0.32508820,0.00000000,0.00000000)
dat.hist <- hist(dat, breaks =6, border = "white", col="gray",main = "")
plot(dat.hist)

enter image description here

Вы можете визуализировать распределение внутри каждой корзины, используя:

library(lattice)
lattice::densityplot( ~ dat | cut(dat, breaks = dat.hist$breaks),
                      layout = c(5, 1))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...