2011-03-24 5 views
2

Je suis un programmeur R débutant qui tente de tracer un histogramme d'un ensemble de données de sinistres avec plus de 100 000 observations faussées (moyenne = 61 000 $, médiane = 20 000 $, valeur maximale = 15 M $).R histogramme résultats dans le graphique vide

J'ai envoyé le code suivant pour représenter graphiquement la variable adj_unl_claim sur le domaine 100 000 0 $ $:

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

le résultat étant un graphe vide avec des axes, mais pas de barres d'histogramme - juste un graphique vide.

Je soupçonne que le problème est lié à la nature asymétrique de mes données, mais j'ai essayé toutes les combinaisons de pauses et xlim et rien ne fonctionne. Toutes les solutions sont très appréciées!

Répondre

7

Si vous avez défini freq = FALSE, vous obtenez un histogramme des densités de probabilité. Ceux-ci sont probablement beaucoup moins de 1. Par conséquent, vos barres d'histogramme sont probablement imprimées super-minuscules le long de l'axe des x. Essayez à nouveau sans régler le ylim, et R calculera automatiquement les limites raisonnables de l'axe y.

Notez également que la définition du xlim ne modifie pas le tracé réel, mais la quantité que vous voyez. Donc, vous pourriez ne pas voir 10 pauses, si certains d'entre eux tombent au-delà de la limite de 100 000 dans votre intrigue. Il se peut que vous souhaitiez réellement sous-traiter vos données pour exclure les valeurs supérieures à 100 000, puis effectuer un histogramme sur l'ensemble de données réduit pour obtenir le graphique souhaité. Peut-être, je ne suis pas sûr de ce que votre objectif est ici.

1

Cela pourrait vous donner quelque chose à jouer, en utilisant certaines des suggestions de Tyler.

> 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 produit quelque chose comme

Claim histogram

Le problème est que, même si les criques d'histogramme environ 82% des demandes dans ce pseudo-données, il ne couvre qu'environ 31% des la valeur des revendications. Donc, à moins que le seul point que vous voulez faire est que la plupart des revendications sont petites, vous pouvez envisager un graphique différent. Je pense que le vrai point à partir de vos données est que, même si la plupart des réclamations sont assez petites, la plupart des coûts sont dans les grosses réclamations. Les grosses revendications n'apparaîtront pas dans un histogramme, même si vous étendez l'échelle. Au lieu de diviser les revendications en groupes de différentes largeurs, y compris par exemple 0- $ 1000 et $ 1M +, et montrer avec un point dot (a) quelle proportion des réclamations tombent dans chaque groupe et (b) quelle proportion des valeurs des réclamations tombent dans chaque groupe.

1

Deux choses à essayer:

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

tracera un histogramme de toutes les réclamations de moins de 100k $. Ceci omet la queue dans le but de montrer la plus grande partie des données. Sinon,

hist(log(test$adj_unl_claim)) 

se connectera transformer votre taille de réclamation, ce qui porte effectivement la longue queue avant.

1

Merci, mes données ont sous-ensembles de l'affaire. J'ai également ajouté deux lignes de code qui calculent la proportion d'observations dans chaque corbeille d'histogramme, puis les trace avec des sous-ensembles y et x spécifiques:

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