Simuler la loi du cout total de sinistralité

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Abdallah Lina
Messages : 3
Enregistré le : 30 Mar 2012, 17:17

Simuler la loi du cout total de sinistralité

Messagepar Abdallah Lina » 30 Mar 2012, 20:31

Bonsoir
Voila cela fait quelques jours que je me bats avec le R pour essayer de simuler la loi du cout total des sinistres qui est la combinaison de deux variables aléatoire une binomiale négative et l'autre log normale.
En faite c'est la somme (des couts"log-normal")qui va de 1 à( N(nombre de sinistre) qui suit une binomiale négative)

Code : Tout sélectionner

M=1000
> for( i in 1:M){
+ n[i]=rnbinom(M,3.673,mu=.882)
+ for(j in 1:n[i]){
+ w[j]=rlnorm(n[i],11.647,1.768)
+ s[j]=sum(w[j])
+ print(s[j])
+ }
+ }

Il me marque l'erreur que n n'est pas une fonction ce que je comprends mais je vois la syntaxe qu'il faut dans ce cas,je suis complétement perdue.
Merci pour votre aide.

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Re: Simuler la loi du cout total de sinistralité

Messagepar jean lobry » 30 Mar 2012, 21:52

Abdallah Lina a écrit :Bonsoir
Voila cela fait quelques jours que je me bats avec le R pour essayer de simuler la loi du cout total des sinistres qui est la combinaison de deux variables aléatoire une binomiale négative et l'autre log normale.
En faite c'est la somme (des couts"log-normal")qui va de 1 à( N(nombre de sinistre) qui suit une binomiale négative)

Code : Tout sélectionner

M=1000
> for( i in 1:M){
+ n[i]=rnbinom(M,3.673,mu=.882)
+ for(j in 1:n[i]){
+ w[j]=rlnorm(n[i],11.647,1.768)
+ s[j]=sum(w[j])
+ print(s[j])
+ }
+ }

Il me marque l'erreur que n n'est pas une fonction ce que je comprends mais je vois la syntaxe qu'il faut dans ce cas,je suis complétement perdue.
Merci pour votre aide.


Bonsoir,

je n'ai pas la réponse mais voici déjà une version de ton code qui soit copie/collable plus directement dans une session R, et accessoirement plus lisible par un être humain :

Code : Tout sélectionner

M <- 1000
for(i in 1:M){
  n[i] <- rnbinom(M, 3.673, mu = 0.882)
  for(j in 1:n[i]){
    w[j] <- rlnorm(n[i], 11.647, 1.768)
    s[j] <- sum(w[j])
    print(s[j])
  }
}


Je n'ai pas exactement la même erreur, en lieu et place :

Code : Tout sélectionner

Erreur dans n[i] <- rnbinom(M, 3.673, mu = 0.882) : objet 'n' introuvable


Ce qui est logique vu que n n'est pas déclaré. Tu peux faire un coup de :

Code : Tout sélectionner

n <- numeric(M)


en amont de la boucle pour palier ce problème mais je suspecte que tout n'est pas réglé pour autant. Je n'ai pas le loisir de me pencher plus autant sur ton problème, j'espère juste avoir dégrossi la situation pour les suivants sur ce forum qui ne manqueront pas de te guider. Tu verras que c'est un lieu fort sympathique et plein de ressources utiles.

Très cordialement,

Jean Lobry

Abdallah Lina
Messages : 3
Enregistré le : 30 Mar 2012, 17:17

Messagepar Abdallah Lina » 01 Avr 2012, 11:51

Bonjour,
Je m'excuse d'avoir copier le code directement du R c'est vrai que je n'ai pas trop réfléchi à son utilisation plus tard.
Merci Jean Lobry,j'ai essayé votre idée mais malheureusement cela ne marche toujours pas,je désespère de trouver une solution le problème c'est que je n'arrive même plus a y réfléchir je bug que sur ça.

jean lobry
Messages : 733
Enregistré le : 17 Jan 2008, 20:00
Contact :

Messagepar jean lobry » 01 Avr 2012, 12:17

Bonjour,

R étant un langage très vectorisé, je me demande si le code suivant :

Code : Tout sélectionner

M <- 1000
n <- rnbinom(M, 3.673, mu = 0.882)
w <- rlnorm(n, 11.647, 1.768)
sum(w)


n'est pas la traduction de ce que tu essayes de faire.

Très cordialement,

Jean Lobry

Abdallah Lina
Messages : 3
Enregistré le : 30 Mar 2012, 17:17

Messagepar Abdallah Lina » 01 Avr 2012, 17:29

En fait je cherche a simuler la charge totale de sinistre,le but étant de simuler un échantillon d'une binomiale négative,ensuite pour chaque élément de cet échantillon,on lui simulera un échantillon d'une log normale
Est ce que vous penser que s'est faisable sur R?

Malik Gasmi
Messages : 1
Enregistré le : 11 Juin 2012, 12:55

Messagepar Malik Gasmi » 11 Juin 2012, 15:56

Lina,
Je te rassure que sur R on peut faire enormement de choses pour ne pas dire TOUT et pas uniquement en actuariat comme tu le fais.

Formalisons tout ça!

M nombre de simulations (dans notre cas 1000)
n vecteur de dimension M contenant le nombre de sinistres simulés
w vecteur des couts des n sinistres pour chaque simulation
s est la charge totale pour chaque simulation donc s est un vecteur de taille M.

quand tu utilises n ou s R ne le comprend pas car rien ne lui dit que ça sera des vecteurs il faut donc au préalables les initialiser
(avec n'importe quelle valeur compte tenu du fait qu'ils seront remplis de toutes manières, j'ai choisi de le faire avec 0)


Voici le code:

[i]M=1000
n=rep(0,M)
s=rep(0,M)
for( i in 1:M)
{
n[i]=rnbinom(1,3.673,mu=.882)
w=rlnorm(n[i],11.647,1.768)
s[i]=sum(w)
}



il te suffit de taper s puis ENTRE pour afficher ton vecteur de 1000 simulations des coûts totaux.

Nous avons en théorie E(s)=E(n)*E(w) tu pourras verifier la concordance de tes résultats avec la théorie pour un nombre de simulations assez grand ;-)

Bien à toi;

Wejdene HAMMAMI
Messages : 3
Enregistré le : 26 Aoû 2020, 07:29

Re: Simuler la loi du cout total de sinistralité

Messagepar Wejdene HAMMAMI » 26 Aoû 2020, 11:23

Etes-vous en train de simuler la sinistralité attritionnelle (cout par une log normale et fréquence par une binomiale négative)? J'ai un cas semblable à le votre, sauf que j'ai deux type de sinistralité : une attritionnelle (cout: weibull et fréquence : poisson ) et une grave (cout: GPD et fréquence : poisson), comment pourrai-je simuler la sinistralité totale (attritionnelle et grave ) ?

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Simuler la loi du cout total de sinistralité

Messagepar Facundo Muñoz » 26 Aoû 2020, 13:37

Bonjour,

La solution (et la formalisation) de Malik est bonne.
Je suggère tout de même de poser tout ça dans une fonction de cette manière qui peut être un peu plus performante :

Code : Tout sélectionner

sample_cost <- function(n = 1, disp = 3.673, mu = 0.882, meanlog = 11.647, sdlog = 1.768) {
 
  n_claims <- rnbinom(n, disp, mu)
 
  sum_costs <- function(n_claims) sum(rlnorm(n_claims, meanlog, sdlog))
   
  costs <- vapply(n_claims, sum_costs, 0)
 
  return(costs)
}

sample_cost()  # un seul échantillon de coûts
#> [1] 299182.1
sample_cost(10)  # 10
#>  [1]       0.00       0.00   77034.05  554899.88       0.00  251353.51
#>  [7]       0.00 4290475.01       0.00       0.00
# un graphique de la lois empirique
plot(
  density(sample_cost(1000), from = 0, to = 1e5)
)


Image
ƒacu.-

Wejdene HAMMAMI
Messages : 3
Enregistré le : 26 Aoû 2020, 07:29

Re: Simuler la loi du cout total de sinistralité

Messagepar Wejdene HAMMAMI » 26 Aoû 2020, 16:13

@Facundo Muñoz, et comment pourrai-je simuler la charge totale si je me dispose de deux types de sinistralité dont chacune possède une loi de coût et de fréquence bien spécifique?

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Simuler la loi du cout total de sinistralité

Messagepar Facundo Muñoz » 26 Aoû 2020, 16:49

Si les deux types de sinistralité sont indépendants, vous pouvez programmer une fonction pour chaque un avec les lois pertinentes et simplement additionner les résultats.

Cordialement,
ƒacu.-

Wejdene HAMMAMI
Messages : 3
Enregistré le : 26 Aoû 2020, 07:29

Re: Simuler la loi du cout total de sinistralité

Messagepar Wejdene HAMMAMI » 03 Sep 2020, 10:44

Comment pourrai-je déterminer le nombre de simulations nécessaires ?

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Simuler la loi du cout total de sinistralité

Messagepar Facundo Muñoz » 03 Sep 2020, 15:07

Bonjour,

Essayez avec 10k et ensuite avec 50k. Si les résultats se ressemblent, c'est bon. Ça devrait y aller, et c'est pas chère (en temps de computation) de produire.

Cordialement,
ƒacu.-


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité