R гистограмма приводит к пустому графику - PullRequest
2 голосов
/ 24 марта 2011

Я начинающий программист R, пытающийся построить гистограмму набора данных страховых требований с 100 000+ наблюдений, которые сильно искажены (среднее значение = 61 000 долларов США, медиана = 20 000 долларов США, максимальное значение = 15 миллионов долларов США).

Я отправил следующий код для построения графика переменной adj_unl_claim в домене $ 0-100000:

hist(test$adj_unl_claim,freq=FALSE,ylim=c(0,1),xlim=c(0,100000),prob=TRUE,breaks=10,col='red')

с результатом в виде пустого графика с осями, но без гистограммы - просто пустой график.

Я подозреваю, что проблема связана с искаженным характером моих данных, но я пробовал каждую комбинацию разрывов и xlim, и ничего не работает. Любые решения приветствуются!

Ответы [ 4 ]

7 голосов
/ 24 марта 2011

Если вы установили freq = FALSE, то вы получите гистограмму плотностей вероятностей.Вероятно, они намного меньше 1. Следовательно, ваши столбцы гистограммы, вероятно, напечатаны очень маленькими вдоль оси X.Попробуйте еще раз, не устанавливая ylim, и R автоматически рассчитает разумные пределы оси y.

Обратите также внимание, что установка xlim не меняет фактический график, насколько вы его видите.Таким образом, вы можете не увидеть 10 разрывов, если некоторые из них выходят за пределы 100000 на вашем графике.Возможно, вы захотите сначала установить поднабор данных, чтобы исключить значения свыше 100000, а затем сделать гистограмму на сокращенном наборе данных, чтобы получить нужный график.Может быть, я не уверен, что ваша цель здесь.

1 голос
/ 29 марта 2011

Спасибо, подмножество моих данных помогло. Я также добавил две строки кода, которые вычисляют долю наблюдений в каждой ячейке гистограммы, а затем выстраивают их с определенными подмножествами y и x:

k<-hist(gb2_agg$adj_unl_claim,prob=TRUE,breaks=100000)
k$counts<-k$counts/sum(k$counts)
plot(k,ylim=c(0,.02),xlim-c(0,50000),col='blue')
1 голос
/ 25 марта 2011

Две вещи, которые нужно попробовать:

hist(test$adj_unl_claim[test$adj_unl_claim < 100000])

построит гистограмму всех претензий на сумму менее 100 тыс. Долларов США.Это опускает хвост в интересах показа основной массы данных.В качестве альтернативы,

hist(log(test$adj_unl_claim))

лог-преобразует ваш размер заявки, эффективно возвращая длинный хвост обратно.

1 голос
/ 25 марта 2011

Это может дать вам возможность поиграть, воспользовавшись некоторыми советами Тайлера.

> claim <- c(15000000, rexp(99999, rate = 1/400)^1.76) 
> summary(claim)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
       0     4261    20080    61730    67790 15000000 
> 
> hs    <- 100000     # highest value to show on histogram
> br    <- 10         # number of bars to show on histogram
> 
> hist(claim, xlim = c(0,hs), freq = FALSE, breaks = br*max(claim)/hs, col='red')
> 
> length(claim[claim<hs]) / length(claim) #proportion of claims shown
[1] 0.82267
> sum(claim[claim<hs])    / sum(claim)    #proportion of value shown
[1] 0.3057994

, где hist произвел что-то вроде

Claim histogram

Проблема в том, что, хотя гистограмма охватывает около 82% утверждений в этих псевдоданных, она покрывает только около 31% значения утверждений. Таким образом, если только вы не хотите сказать, что большинство утверждений невелики, вы можете рассмотреть другой график.

Я предполагаю, что реальная точка зрения на ваши данные состоит в том, что, хотя большинство претензий довольно мало, большая часть затрат приходится на крупные претензии. Большие претензии не будут отображаться в гистограмме, даже если вы увеличите масштаб. Вместо этого разбейте заявки на группы различной ширины, в том числе, например, 0-1000 и 1 млн. Долларов США, и покажите точечным графиком (а), какая доля претензий попадает в каждую группу и (б) какая доля значений претензий падает в каждую группу.

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