R直方图导致空图

时间:2011-03-24 20:23:35

标签: r histogram

我是一名初学者R程序员,他试图绘制一份保险索赔数据集的直方图,该数据集包含100,000多个严重偏差的观察值(平均值= 61,000美元,中值= 20,000美元,最大值= 15M美元)。

我已经提交了以下代码来绘制$ 0- $ 100,000域名的adj_unl_claim变量:

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

结果是带有轴但没有直方图条形的空图形 - 只是一个空图形。

我怀疑这个问题与我数据的偏差有关,但我已经尝试了休息和xlim的每一个组合,但没有任何作用。非常感谢任何解决方案!

4 个答案:

答案 0 :(得分:7)

如果您设置了freq = FALSE,那么您将获得概率密度的直方图。这些可能远小于1.因此,您的直方图条可能沿x轴打印得非常小。在不设置ylim的情况下再次尝试,R将自动计算合理的y轴限制。

另请注意,设置xlim不会改变实际情节,只会改变你看到的情节。所以你可能实际上看不到10个休息时间,如果它们中的一些超出你的情节中的100000限制。实际上,您可能希望将数据子集化为首先排除超过100000的值,然后对简化数据集执行直方图以获得所需的绘图。也许,我不确定你的目标是什么。

答案 1 :(得分:1)

使用泰勒的一些建议,这可能会给你一些游戏。

> 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美元和100万美元,并用点图表示(a)每组中的索赔比例和(b)索赔价值的比例下降进入每个小组。

答案 2 :(得分:1)

要尝试两件事:

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

将绘制所有索赔低于10万美元的直方图。为了显示大量数据,这省略了尾部。可替代地,

hist(log(test$adj_unl_claim))

会对您的索赔规模进行记录转换,从而有效地将长尾拖回来。

答案 3 :(得分:1)

谢谢,对我的数据进行子集化就可以了。我还添加了两行代码,用于计算每个直方图bin中观察的比例,然后使用特定的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')