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 » 29 Juil 2008, 13:38

La commande "table" est parfaite pour faire des tableaux croisés dynamiques. Elle nous produit de jolis tableaux qu'il suffit de copier coller dans Excel (pas besoin d'importation compliquée) pour pouvoir les analyser ensuite.

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

Messagepar Renaud Lancelot » 30 Juil 2008, 13:50

Benoît Lamy a écrit :Bon bon, je vais me lancer dans les tableaux croisés dynamiques.
D'après moi, ce n'est pas possible d'utiliser la covariance (puisque ce sont des facteurs codés arbitrairement), j'ai raison?


La covariance de quoi ? Si vous voulez dire que vous ne pouvez pas utiliser l'analyse de covariance, c'est une erreur.

Renaud

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

Messagepar Renaud Lancelot » 30 Juil 2008, 13:52

Benoît Lamy a écrit :La commande "table" est parfaite pour faire des tableaux croisés dynamiques. Elle nous produit de jolis tableaux qu'il suffit de copier coller dans Excel (pas besoin d'importation compliquée) pour pouvoir les analyser ensuite.


Euh... Là, vous êtes optimistes: la fct table produit des tableaux multidimensionnel (si il y a plus de deux variables croisées) et ça me fait mal à la tête rien que d'imaginer ce qu'Excel pourrait faire avec ça ;-)

Renaud

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

Messagepar Benoît Lamy » 30 Juil 2008, 14:11

Renaud Lancelot a écrit :La covariance de quoi ? Si vous voulez dire que vous ne pouvez pas utiliser l'analyse de covariance, c'est une erreur.

Renaud


Bein, pour moi, étant donné que ce sont des facteurs codés arbitrairement, la corrélation n'a aucun sens.
Par exemple, si vous vous intéressez à la puissance du véhicule que vous codez par un chiffre pour avoir plusieurs classes, vous aurez1, 2, 3,... comme numéro de classe mais cela est totalement arbitraire, puisque vous eussiez pu diviser la deuxième classe en 2, fusionner la troisième et la quatrième, etc. Mais je peux me tromper; quand vous parlez de l'analyse de la covariance, c'est aov, anova (je m'aperçois d'ailleurs ne pas avoir exploré cette voie-là), une simple var, autre chose?

Euh... Là, vous êtes optimistes: la fct table produit des tableaux multidimensionnel (si il y a plus de deux variables croisées) et ça me fait mal à la tête rien que d'imaginer ce qu'Excel pourrait faire avec ça ;-)


Cela tombe bien, je me contente pour l'instant d'analyser les variables deux par deux :) .

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

Messagepar Renaud Lancelot » 31 Juil 2008, 08:03

Benoît Lamy a écrit :
Renaud Lancelot a écrit :La covariance de quoi ? Si vous voulez dire que vous ne pouvez pas utiliser l'analyse de covariance, c'est une erreur.

Renaud


Bein, pour moi, étant donné que ce sont des facteurs codés arbitrairement, la corrélation n'a aucun sens.


Bien sûr que si. Mais ça dépend de la manière dont vous calculez cette corrélation.

Par exemple, si vous vous intéressez à la puissance du véhicule que vous codez par un chiffre pour avoir plusieurs classes, vous aurez1, 2, 3,... comme numéro de classe mais cela est totalement arbitraire, puisque vous eussiez pu diviser la deuxième classe en 2, fusionner la troisième et la quatrième, etc. Mais je peux me tromper;


Il est bien sûr absurde de vouloir calculer une corrélation entre deux facteurs, ou entre un facteur et une variable numérique, en se basant sur le codage numérique des facteurs. C'est bien pour cela que la notion de facteur à été introduite dans le langage S (R, S-Plus...).

quand vous parlez de l'analyse de la covariance, c'est aov, anova (je m'aperçois d'ailleurs ne pas avoir exploré cette voie-là), une simple var, autre chose?


aov ou lm
mais ces fonctions ne sont pas appropriées pour analyser des comptages ==> modèle linéaire généralisé et ses extensions.

Renaud

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

Messagepar Benoît Lamy » 31 Juil 2008, 08:40

Nous sommes donc d'accord, la corrélation n'est quasiment pas utilisable dans mon cas, et il faut que je trouve autre chose. Pour l'instant, en deux dimensions, la fonction "table" est tout à fait correcte.

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

Messagepar Renaud Lancelot » 31 Juil 2008, 08:56

Oui: table + chisq.test, par exemple.

Code : Tout sélectionner

> set.seed(123)
> x <- sample(letters[1:10], replace = TRUE, size = 1e6)
> y <- sample(LETTERS[1:10], replace = TRUE, size = 1e6)
> tab <- table(x, y)
> chisq.test(tab)

        Pearson's Chi-squared test

data:  tab
X-squared = 64.9184, df = 81, p-value = 0.904


Renaud

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

Messagepar Benoît Lamy » 31 Juil 2008, 09:39

Oui, effectivement, j'utilisais beaucoup le chisq.test, jusqu'à ce qu'il se mît à faire absolument n'importe quoi:

Code : Tout sélectionner

> vecto1 <- c(100, 80, 60, 40, 20, 10)
> vecto3 <- c(99.9, 80.1, 60, 40.1, 19.9, 10.1)
> chisq.test(vecto1, vecto3)

        Pearson's Chi-squared test

data:  vecto1 and vecto3
X-squared = 30, df = 25, p-value = 0.2243

Warning message:
In chisq.test(vecto1, vecto3) :
  l'approximation du Chi-2 est peut-être incorrecte
> chisq.test(vecto1, vecto3, simulate.p.value = TRUE)

        Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)

data:  vecto1 and vecto3
X-squared = 30, df = NA, p-value = 1

> vectoc <- c(10, 20, 40, 60, 80, 100)
> chisq.test(vecto1, vectoc)

        Pearson's Chi-squared test

data:  vecto1 and vectoc
X-squared = 30, df = 25, p-value = 0.2243

Warning message:
In chisq.test(vecto1, vectoc) :
  l'approximation du Chi-2 est peut-être incorrecte
> chisq.test(vecto1, vectoc, simulate.p.value = TRUE)

        Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)

data:  vecto1 and vectoc
X-squared = 30, df = NA, p-value = 1


Le chisq.test m'a l'air bloqué sur la valeur 0.22 quand simulate.p.value = FALSE, et sur 1 quand simulate.p.value = TRUE, quelles que soient les données.

J'ai refait ensuite le test avec un autre vecteur, approximativement les mêmes résultats:

Code : Tout sélectionner

> vecta <- c(62, 62, 60, 64, 62, 62)
> chisq.test(vecto1, vecta)

        Pearson's Chi-squared test

data:  vecto1 and vecta
X-squared = 12, df = 10, p-value = 0.2851

Warning message:
In chisq.test(vecto1, vecta) :
  l'approximation du Chi-2 est peut-être incorrecte
> chisq.test(vecto1, vecta, simulate.p.value = TRUE)

        Pearson's Chi-squared test with simulated p-value (based on 2000 replicates)

data:  vecto1 and vecta
X-squared = 12, df = NA, p-value = 1

Un dernier pour la route:

Code : Tout sélectionner

> chisq.test(vecto1, vecto1)

        Pearson's Chi-squared test

data:  vecto1 and vecto1
X-squared = 30, df = 25, p-value = 0.2243

Warning message:
In chisq.test(vecto1, vecto1) :
  l'approximation du Chi-2 est peut-être incorrecte

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 31 Juil 2008, 10:46

il vaudrait mieux dire que tu ne comprends pas les sorties de R...c'est plus prudent :)

Tu ne rédiges pas correctement le test donc R ne te donne pas ce que tu attends :

Code : Tout sélectionner

> vecto1 <- c(100, 80, 60, 40, 20, 10)
> vecto3 <- c(99.9, 80.1, 60, 40.1, 19.9, 10.1)
> chisq.test(cbind(vecto1,vecto3))

        Pearson's Chi-squared test

data:  cbind(vecto1, vecto3)
X-squared = 0.001, df = 5, p-value = 1


C'est ce qu'on attend les effectifs ne sont quasiment pas différents

Code : Tout sélectionner

vecto3 <- c(70, 8, 68, 45.1, 23.9, 15.1)
chisq.test(cbind(vecto1,vecto3))

        Pearson's Chi-squared test

data:  cbind(vecto1, vecto3)
X-squared = 55.79, df = 5, p-value = 8.967e-11


Curieusement là ça marche... :)


Code : Tout sélectionner

chisq.test(vecto1,vecto3)

        Pearson's Chi-squared test

data:  vecto1 and vecto3
X-squared = 30, df = 25, p-value = 0.2243

Warning message:
In chisq.test(vecto1, vecto3) : Chi-squared approximation may be incorrect


Et là j'obtiens ce que tu obtiens dans tes tests parce que j'ai mal rédigé la commande.



L'aide de chisq.test est pourtant très explicite contrairement à d'autres fonctions donc il faut la regarder quand on a un doute

Nicolas

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

Messagepar Benoît Lamy » 31 Juil 2008, 11:58

:oops: Désolé. Mettons que je n'ai rien dit.

Nicolas Péru
Messages : 1408
Enregistré le : 07 Aoû 2006, 08:13

Messagepar Nicolas Péru » 31 Juil 2008, 12:48

Pour regarder les corrélations entre tes facteurs, tu peux toujours utiliser une ACM qui travaillent avec les facteurs. ça te permettras de dégrossir le travail.

Nicolas

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

Messagepar Benoît Lamy » 31 Juil 2008, 13:11

Merci pour l'info. Je vais chercher dans google pour voir comment cela fonctionne.

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

Messagepar Benoît Lamy » 20 Aoû 2008, 09:38

Rebonjour à tous, j'ai pris un peu de recul, j'ai fait tous mes tableaux croisés, vu ce qui semblait corrélé, fait mes tests du Khi deux. Ensuite, j'ai regroupé ma matrice en un tableau de variables (regrouper ceux qui ont toutes leurs caractéristiques en commun, en faisant d'une part la somme des sinistres, d'autre part la somme des jours d'exposition au risque), laissé tomber des variables me semblant peu intéressantes, et j'arrive finalement à un tableau de 30000 lignes du genre:
facteur1 facteur2... facteurN nombredesinistres nombredejoursdexposition
1 1 A 2 1327
1 1 B 2 1025
...
3 7 F 4 4336
...

Après lectures de nombreux livres, apparemment, le nombre de sinistres suit une loi de Poisson de paramètre (nombre de jours d'exposition * f(alpha*facteur1+beta*facteur2+...+quelquechose*facteurN)), avec f l'inverse de la fonction de lien, c'est à dire l'exponentielle.
Mais comment faire comprendre à R qu'il doit intégrer le nombre de jours d'exposition dans le paramètre de son exponentielle?
La commande family=poisson(link=nombredesinistres*log) me renvoie un message d'erreur. J'ai fouillé ensuite du côté de link.glm et make.link, et ce sans trouver.
J'avais bien pensé à diviser le nombre de sinistres par le nombre de jours d'exposition et multiplier tout par disons 100000 pour avoir un nombre entier de sinistres et le même nombre de jours d'exposition pour chaque ligne (et ajouter un weights=nombredejoursdexposition pour garder le poids relatif), mais je me suis rendu compte qu'ajuster une loi de poisson là-dessus n'avait plus aucun sens.
Comment faire? Merci d'avance pour votre aide.

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

Messagepar Renaud Lancelot » 20 Aoû 2008, 09:49

Il faut utiliser un terme offset. Avec la fonction standard de R, le modèle devrait se présenter sous la forme:

Code : Tout sélectionner

glm(sinistres ~ facteur1 + facteur2 + offset(log(nbjours)),
    family = poisson(log), data = myData)


Il faudra vérifier en particulier que la variance résiduelle est à peu près égale à la moyenne. Si elle est bcp plus grande, il faudra utiliser des modèles plus appropriés, comme un modèle binomial négatif, par exemple (il y a plusieurs packages de R qui le font).

Renaud

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 20 Aoû 2008, 09:50

Bonjour,

Tu peux lui spécifier en utilisant un offset soit dans la formule de ton modèle soit dans les arguments du modèle :

Code : Tout sélectionner

# dans la formule :
glm(y~offset(log(x))+...,family=poisson())
# dans les arguments :
glm(y~...,offset=log(x),family=poisson())


Maxime


Retourner vers « Questions en cours »

Qui est en ligne

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