2011-03-24 81 views
2

我是一個初學R程序員,試圖繪製一個保險索賠數據集的直方圖,其中有100,000多個觀測值嚴重偏斜(平均值= 61,000美元,中值= 20,000美元,最高值= $ 15M)。R直方圖結果爲空圖

我已經提交了下面的代碼繪製在$ 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的組合,但沒有任何工作。任何解決方案都非常感謝!

回答

7

如果您設置了freq = FALSE,那麼您將獲得概率密度的直方圖。這些可能遠小於1.因此,您的直方圖條可能沿x軸打印超微小。不用設置ylim,再試一次,R會自動計算合理的y軸限制。

還要注意,設置xlim不會改變實際情節,只是你看到了多少。所以你可能實際上看不到10個休息時間,如果有一些休息時間超出了你的情節的100000個限制。您可能實際上想要對數據進行子集化,先排除超過100000的值,然後對縮小的數據集執行直方圖以獲取所需的繪圖。也許,我不確定你的目標是什麼。

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和$ 1M +,並用點圖顯示(a)索賠中哪些比例落入每個組,以及(b)索賠價值的比例下降多少分成每個組。

1

兩件事情嘗試:

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

將繪製的不足10萬$的所有索賠的直方圖。爲了顯示大部分數據,這忽略了尾部。另外,

hist(log(test$adj_unl_claim)) 

將記錄變換你的要求大小,有效地使長長的尾巴回來。

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')