Une matrice de taille énorme

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

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 20 Aoû 2008, 10:57

Merci à vous, je vais essayer cela de ce pas.

J'ai bien pensé au problème de surdispersion, et effectivement quand on fait la moyenne et la variance de mes nombres de sinistres, on arrive à une variance 6 fois plus élevée que la moyenne.
Mais je ne sais pas à quel point c'est significatif, dans la mesure où il n'y a pas la même exposition au risque.
Si j'ai une matrice à deux lignes:
facteur1 ... nb sinistre nombre de jours d'exposition
... 1 10
... 3 10
J'aurais bien une moyenne égale à la variance.

Mais avec la matrice:
facteur1 ... nb sinistre nombre de jours d'exposition
... 2 20
... 3 10
J'ai une sous dispersion alors que les choses n'ont pas grandement changé.

Certes, je peux passer au fréquence, et vérifier si la moyenne de mes fréquences est égale à la variance.
Cela dit, cela introduit immédiatement un nouveau biais, c'est l'unité de base de mon exposition. Je l'ai prise en jours, mais je l'aurais prise en une autre unité, les résultats auraient pu être différents.
Si je reviens à ma matrice, j'ai donc comme fréquence 0.1 et 0.3 (sous dispersion), et si je prends comme unité non plus le jour mais comme unité la tranche de dix jours, je me retrouve avec comme fréquences 2/2 i.e 1 et 3/1 i.e 3 et, miracle! je me retrouve en équidispersion.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 20 Aoû 2008, 12:37

La surdispersion se juge par rapport au modèle ajusté ==> faire glm avant toute chose.

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 20 Aoû 2008, 21:27

Fait, effectivement l'offset fait parfaitement ce que je voulais faire, merci bien.

Par contre, il me semble que les remarques que j'ai faites concernant l'interprétation de la surdispersion (que j'ai retrouvée, une variance 5 fois supérieure à la moyenne) restent valables, non?

J'ai cherché surdispersion, puis surdispersion poisson dans google, mais il n'y a pas grand chose de réellement explicatif.

Sinon, je peux voir également si mes données s'ajustent mieux à une binomiale négative, effectivement. J'ai vu un topic dans ce forum ici où vous répondiez à un problème approchant le mien. Je n'ai plus qu'à regarder tout cela.
Merci encore pour votre aide extrêmement précieuse.

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 04 Sep 2008, 07:26

Bonjour à tous, mon stage touche à sa fin.
Je dois remettre mon modèle et mon rapport vendredi soir. J'ai sous la main un modèle binomial, un modèle de Poisson, et j'ai aussi travaillé avec glm.nb pour obtenir une modélisation avec une loi binomiale négative. Mais ces modèles ne collent pas très bien avec ce que j'observe.

Si j'appelle T mon vecteur de sinistres observés, T1 les valeurs prédites par une loi de Poisson, T2 mes valeurs prédites par une binomiale, T3 les valeurs prédites par une binomiale négative, je me suis dit que peut-être T pouvait être de la forme: T=a*T1+b*T2+c*T3+constante éventuelle
avec a, b et c dépendant des caractéristiques des assurés (encore que, certains des modèles que j'ai créés se ressemblaient énormément).

Mais offset ne semble pas répondre à ce problème, pas plus que les model.extract ou model.offset.
Y a t-il une commande permettant de faire ce que je veux SVP?
Merci.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 04 Sep 2008, 11:33

Benoît Lamy a écrit :Bonjour à tous, mon stage touche à sa fin.
Je dois remettre mon modèle et mon rapport vendredi soir. J'ai sous la main un modèle binomial, un modèle de Poisson, et j'ai aussi travaillé avec glm.nb pour obtenir une modélisation avec une loi binomiale négative. Mais ces modèles ne collent pas très bien avec ce que j'observe.

Si j'appelle T mon vecteur de sinistres observés


Mauvaise idée: T est un mot réservé en R. Choisir un autre nom de variable.

, T1 les valeurs prédites par une loi de Poisson, T2 mes valeurs prédites par une binomiale, T3 les valeurs prédites par une binomiale négative, je me suis dit que peut-être T pouvait être de la forme: T=a*T1+b*T2+c*T3+constante éventuelle
avec a, b et c dépendant des caractéristiques des assurés (encore que, certains des modèles que j'ai créés se ressemblaient énormément).


C'est typiquement un modèle qui est facilement spécifié avec l'argument formula des modèles.

Mais offset ne semble pas répondre à ce problème, pas plus que les model.extract ou model.offset.


No comprendo... Où est le pb ?

Y a t-il une commande permettant de faire ce que je veux SVP?
Merci.


Voici comment je spécifierais un modèle binomial négatif avec la fct negbin du package aod (pas forcément la mieux adaptée mais au moins, je la connais ;-)):

Code : Tout sélectionner

library(aod)
m1 <- negbin(Toto ~ T1 + T2 + T3 + offset(log(N)), random = ~ 1, data = Data)


Ce modèle correspond à Toto = a*T1+b*T2+c*T3+constante pour les effets fixes, avec un terme offset où N est le dénominateur des proportions modélisées. Le paramètre de surdispersion peut être modélisé par une variable explicative via l'argument random (voir l'aide de la fct).

Voir le package gamlss pour des options bcp plus riches sur modèle binomial négatif. Il y a plein d'autres types de modèles possible pour rendre compte de la surdispersion, comme les modèles mixtes ou les modèles GEE.

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 04 Sep 2008, 12:40

Je vous remercie de votre réponse, mais en la lisant je me dis que je me suis très mal expliqué, désolé.
Les binomiales négatives, cela va, avec vos explications sur d'autres sujets, l'aod, le vcd (en fait c'est ce dernier que j'utilise :oops: j'avais essayé le vôtre mais je m'y retrouvais mieux avec le glm.nb du vcd) , les pages d'aides, j'ai compris, cela tourne comme je veux.

En fait, je souhaiterais que les paramètres a, b, c, dépendent des caractéristiques.
Ainsi j'ai des facteurs F1, F2, F3..., qui prennent les valeurs F1_1 (première valeur possible prise par F1), F1_2 (deuxième valeur prise par F1), F1_3 (troisième valeur possible prise par F1),..., F2_1 (première valeur possible prise par F2), F2_2 (deuxième valeur possible prise par F2), F2_3 (troisième valeur possible prise par F2), ...

Et si je note F1=F1_1: le facteur F1 vaut F1_1:
Je voudrais arriver à quelque chose du genre:
a = 0.7*l'indicatrice de (F1=F1_1)+0.9*l'indicatrice de(F1=F1_2)-0.6*l'indicatrice de(F1=F1_3)+...+3.7*l'indicatrice de (F2=F2_1)-1.4*l'indicatrice de (F2=F2_2)+...
De même pour b et c, qui s'expriment en une somme d'indicatrices multipliées par un coefficient, les indicatrices portant sur les caractéristiques de chaque ligne.

Et finalement cela donnerait (en notant Toto le vecteur observé)
Toto=(0.7*l'indicatrice de (F1=F1_1)+0.9*l'indicatrice de(F1=F1_2)-0.6*l'indicatrice de(F1=F1_3)+...+3.7*l'indicatrice de (F2=F2_1)-1.4*l'indicatrice de (F2=F2_2)+...)*T1+(0.3*l'indicatrice de (F1=F1_1)+1.1*l'indicatrice de(F1=F1_2)+0.4*l'indicatrice de(F1=F1_3)+...-2.7*l'indicatrice de (F2=F2_1)+8.4*l'indicatrice de (F2=F2_2)+...)*T2+5.7*l'indicatrice de (F1=F1_1)+1.5*l'indicatrice de(F1=F1_2)-0.1*l'indicatrice de(F1=F1_3)+...-1.7*l'indicatrice de (F2=F2_1)-4.8*l'indicatrice de (F2=F2_2)+...)*T3
Où ce qui serait donné par R seraient les coefficients 0.7, 0.9, 0.6,3.7, 1.4, 0.3, 1.1,...

Si je mets simplement: Toto~T1+T2+T3+F1+F2+F3+...+offset(log(N)), l'ordinateur ne va pas me donner ce que je veux.
Voilà, j'espère avoir été plus compréhensible.

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 04 Sep 2008, 12:45

Je vais regarder ce qu'est le random du negbin, merci pour l'info, peut-être vais-je rebasculer.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 04 Sep 2008, 13:02

Benoît Lamy a écrit :
Si je mets simplement: Toto~T1+T2+T3+F1+F2+F3+...+offset(log(N)), l'ordinateur ne va pas me donner ce que je veux.
Voilà, j'espère avoir été plus compréhensible.


Si, si, à condition que les variables explicatives soient bien déclarées comme des facteurs (factor). Après ajustement du modèle, vous pourrez obtenir les coefficients propres à chaque modalité des variables explicatives (modulo ceux qui sont "noyés" dans la cste du modèle), et les valeurs prédites pour chaque combinaison possible de ces modalités.

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 05 Sep 2008, 09:46

Non, cela ne fait pas ce que je voulais, cela propose un autre modèle, sûrement digné d'intérêt, je vais d'ailleurs le tester de ce pas.
Mais j'ai finalement réussi à ruser pour faire ce que je voulais: en passant par deux (j'ai laissé tomber le modèle binomial qui est très semblable au modèle de Poisson) model.matrix concaténés, avec chaque moitié de chaque ligne multiplié par l'estimation correspondante, et ensuite un simple lm.
Les résultats ne sont pas à la hauteur de ce que j'attendais, cela dit.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Sep 2008, 10:32

Heu, ça ne m'étonne pas...

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 05 Sep 2008, 12:13

Au moins j'aurais essayé, non? J'en suis à un stade où je ne peux pas faire l'économie d'une tentative.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Sep 2008, 12:42

Ce que je voulais dire c'est que tu te lances dans des manip qui me paraissent hasardeuses et hors des clous. Cela dit tu sais peut-être très bien ce que tu fais et dans ce cas pas de pb. Mais vu de loin, ça paraît "space"...

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 05 Sep 2008, 12:58

La base de la réflexion n'était quand même pas si stupide: on sait (enfin, des personnes pensent) que la loi des sinistres suit une Poisson, d'autres disent que cela s'ajuste mieux avec une binomiale négative. Quoi de plus normal que de se dire que: Toto = a*T1+b*T2, en prenant a et b fixes (ne dépendant de rien) dans un premier temps, puis de se demander si on ne pourrait pas gagner en précision en se disant que a et b peuvent dépendre des caractéristiques?
Pour moi, la base statistique est bonne, ce que je ne comprends pas, c'est que les résultats soient aussi peu encourageants; un problème dans mon code R, peut-être?

Ah, et je me suis souvenu pourquoi je préférais (mais ne le prenez pas mal) le glm.nb au negbin; parce que le negbin ne permet pas l'argument weights; or il est évident qu'une ligne avec énormément de clients et d'exposition est plus significative et doit être traitée différemment qu'une ligne avec peu d'exposition au risque.

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Sep 2008, 13:27

Benoît Lamy a écrit :La base de la réflexion n'était quand même pas si stupide:


Loin de moi cette idée !

on sait (enfin, des personnes pensent) que la loi des sinistres suit une Poisson, d'autres disent que cela s'ajuste mieux avec une binomiale négative. Quoi de plus normal que de se dire que: Toto = a*T1+b*T2, en prenant a et b fixes (ne dépendant de rien) dans un premier temps, puis de se demander si on ne pourrait pas gagner en précision en se disant que a et b peuvent dépendre des caractéristiques?


Je ne comprends pas ce que tu veux faire.

Pour moi, la base statistique est bonne, ce que je ne comprends pas, c'est que les résultats soient aussi peu encourageants; un problème dans mon code R, peut-être?


Il faudrait d'abord formaliser ce que tu veux faire, en s'appuyant sur l'avis de gens expérimentés dans le domaine. La mise en oeuvre est encore une autre histoire.

Ah, et je me suis souvenu pourquoi je préférais le glm.nb au negbin; parce que le negbin ne permet pas l'argument weights; or il est évident qu'une ligne avec énormément de clients et d'exposition est plus significative et doit être traitée différemment qu'une ligne avec peu d'exposition au risque.


glm.nb est une fonction "subtile" (trop pour moi !), notamment avec l'argument weights, et ses conséquences sur la matrice de var-vcov des coeffs. Cela m'a valu qques échanges scabreux avec les auteurs. Le bug a été corrigé depuis mais j'ai tjs du mal à suivre ce qui se passe dans la fct et les utilitaires style summary. Bon courage !

Pour les lignes avec énormément de clients, c'est le boulot du terme offset d'en tenir compte. Pour les lignes "très exposées", c'est le boulot normal de l'algorithme de déterminer quels sont les facteurs les plus influents. Tenter d'influencer l'analyse a priori avec une pondération me paraît une mauvaise idée. Bref, je n'utiliserais pas de pondération dans cette analyse, sauf si tu veux diminuer l'influence de certaines observations dont tu sais qu'elles sont doûteuses (suspicion de fausse déclaration, etc.).

Renaud

Benoît Lamy
Messages : 75
Enregistré le : 09 Juil 2008, 07:57

Messagepar Benoît Lamy » 09 Sep 2008, 20:53

Désolé de ne pas avoir répondu plus tôt (déménagement, tout cela...); merci à tous en tout cas pour votre aide, spécialement à Renaud.

Je reprends, je détaille au maximum.

Une première source dit que le nombre de sinistres théorique suit une loi de Poisson de paramètre jours d'exposition*f(z), z étant l'ensemble des caractéristiques de l'assuré (âge, puissance du véhicule, bonus/malus, etc.).
Un deuxième document trouvé sur internet dit que le nombre de sinistres d'un assuré suivait plutôt une loi binomiale négative.
Je créée donc les deux modèles, et vois que ceux-ci s'ajustent mal.

Je me dis donc: il se peut que les écarts entre la répartition réelle et la répartition théorique prrévue par Poisson d'une part et les écarts entre la répartition réelle et la répartition théorique prévue par la binomiale négative puissent se compenser. Par exemple, si on avait comme répartition réelle de sinistres, 3 (pour la première ligne), 4 (pour la deuxième ligne), et 5 (pour la troisième ligne), comme première répartition théorique, 4, 3, 5, comme deuxième répartition théorique, 5, 3, 4, on aurait donc un modèle collant parfaitement avec Toto=T1-T2+4 (certes, reste à interpréter cette formule et tout et tout).
EN effet, on a bien: 4-5+4=3
3-3+4=4
5-4+4=5

La démarche supplémentaire est de voir si les paramètres (dans notre exemple, 1 et -1) dépendent ou non des caractéristiques de chaque assuré.

C'est à dire que l'on passe d'un modèle simple Toto=a*T1+b*T2+constante à Toto=f1(z)*T1+f2(z)*T2+constante avec f1 et f2 deux fonctions, et z les caractéristiques de chaque assuré.
La logique sous-jacente est qu'il se peut que pour une certaine classe d'assurés T1 soit bien meilleur que T2, et pour d'autres que ce soit l'inverse. C'est à dire que pour cette première classe, le f1(z) est en valeur absolue grand par rapport à la valeur absolue de f2(z), pour la deuxième, c'est l'inverse.

Le problème est: comment modéliser un modèle pareil, où f1=FActeur1_1*alpha1_1+alpha1_2*Facteur1_2+..., où Facteur1_2 désigne la deuxième modalité prise par le facteur 1, facteur 1 qui fait partie des caractéristiques de l'assuré.
C'est là que j'ai eu l'idée avec model.matrix d'avoir deux matrice en zéros et uns, de multiplier la première par le vecteur de valeurs théoriques selon Poisson, la deuxième par le vecteur de valeurs théoriques selon la binomiale négative, et de concaténer le tout.
Il ne reste qu'à faire un simple lm avec le vecteur de vraies valeurs d'un côté et toutes les autres colonnes de l'autre, et j'ai bien: Toto=T1*f1(z)+T2*f2(z)
Et normalement cela devrait être bon.


Retourner vers « Questions en cours »

Qui est en ligne

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