2014-10-15 1 views
0

У меня есть простой фрейм данных с большим количеством записей в нем. Я хотел бы построить график плотности распределения.Что не так с моим графиком плотности в ggplot2

Краткое резюме кадр данных:

summary(rr_stats) 
rr  
Min. : 1.00 
1st Qu.:17.00 
Median :20.00 
Mean :20.33 
3rd Qu.:23.00 
Max. :96.00 

Первые 20 записей в моем ДФ:

rr_stats[1:20,1] 
[1] 30 28 29 32 32 33 28 25 35 24 28 22 30 26 22 26 23 25 23 23 

Когда я сюжет этот ДФ сюжет плотности выглядит довольно странно:

ggplot(rr_stats, aes(x=rr)) + geom_density() + xlim(0,55) 

enter image description here

Я сделал те же операции с другим кадром данных с аналогичными данными, но вот сюжет выглядит намного лучше:

enter image description here

Что я делаю неправильно?

(изменить) Проблема, похоже, связана с размером кадра данных? С 50,000 записей вопрос едва noticable_ enter image description here

Но с 80,000 записей он начинает быть более заметным: enter image description here

+0

Вы пытались изменить пропускную способность ядра? –

ответ

0

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

rr_stats <- data.frame(rr = c(30,28, 29, 32, 32, 33, 28, 25, 35, 24, 28, 22, 30, 26, 22, 26, 23, 25, 23, 23)) 
require(ggplot2) 
ggplot(rr_stats, aes(x=rr)) + geom_density() + xlim(0,55) 

я получаю второй участок в вашем вопросе, не первый:

enter image description here

0

кажется, что ваши данные дискретно. geom_density() дает вам ядерную плотность (например, вы неявно предполагаете непрерывное распределение). Для того, чтобы посмотреть, что идет не так, я смоделировали маленький пример:

N<-80000 
S<-as.data.frame(rbinom(N,55,0.5)) 
dens80000<-density(S[,1]) 
dens80000 
dens10000<-density(S[1:1000,]) 
par(mfrow=c(1,2)) 
plot(dens80000) 
plot(dens10000) 

densities Обратите внимание, как ширина полосы отличается, например. дает вам более плавный сюжет. Полоса пропускания вычисляется автоматически, поэтому, когда N = 80k, ширина полосы пропускания меньше, чем для N = 10k, что, в свою очередь, приводит к расчетной плотности «пикового» из-за дискретности данных. Разумеется, это можно решить, изменив пропускную способность на более высокую настройку или просто используя более подходящий график.

plot(density(S[,1],bw=2)) 

enter image description here

или ggplot вы можете использовать настроить аргумент в stat_density(), например. сделать что-то вроде:

ggplot(S, aes(x=S[,1])) + geom_density() + stat_density(adjust = 2) + xlim(0,55) 

enter image description here

я не уверен, если есть более элегантный способ установить пропускную способность в ggplot, но смотреть на это, когда у меня есть время.

Смежные вопросы