[Réglé] Tests post-hoc et chi-deux

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

Nicolas Mazziotta
Messages : 18
Enregistré le : 02 Jan 2007, 09:43

[Réglé] Tests post-hoc et chi-deux

Messagepar Nicolas Mazziotta » 19 Fév 2007, 08:26

Bonjour à tous,

On m'a conseillé d'analyser la structure d'une table de contingence croisant au moins une variable à plus de deux valeurs possibles en effectuant des chi-deux successifs. Je n'ai pas trouvé d'étude de ce problème dans mes lectures ou sur le net.

Par exemple, j'ai deux variables: PPF (deux valeurs) et MN (trois valeurs). Je fais un tri croisé:

Code : Tout sélectionner

$`MN x PPF`
$`MN x PPF`$tab
          PPF
MN         PPF.0 PPF.1
  MN.0     71530 14140
  MN.pers    942  1697
  MN.¬pers  1576   862


L'analyse de la table à l'aide du PEM de Cibois (nombres dans les cases ci-dessous) et l'examen des résidus (*** = résidu supérieur à 3.94) donne la décomposition:

Code : Tout sélectionner


$`MN x PPF`$pem
          PPF
MN         PPF.0        PPF.1
  MN.0     " 39.22 ***" "-39.22 ***"
  MN.pers  "-56.25 ***" " 56.25 ***"
  MN.¬pers "-20.78 ***" " 20.78 ***"

$`MN x PPF`$stat
[1] "χ² = 4375.21, ddl = 2, p = 0 ***, min. = 449"


Je vois donc que MN.0 est clairement opposé aux autres valeurs de MN par son attraction pour PPF.0.

La question est à présent de savoir comment MN.pers et MN.¬pers s'opposent.
Je fais donc un nouveau test:

Code : Tout sélectionner

$tab
          PPF
MN         PPF.0 PPF.1
  MN.pers    942  1697
  MN.¬pers  1576   862

$pem
          PPF
MN         PPF.0        PPF.1
  MN.pers  "-29.85 ***" " 29.85 ***"
  MN.¬pers " 29.85 ***" "-29.85 ***"

$stat
[1] "χ² = 423.64, ddl = 1, p = 0 ***, min. = 1209"


Comme il s'agit d'une comparaison multiple, je multiplie la valeur de p (qui est infime) par 3 (nombre de comparaisons possibles, Bonferroni) avant de conclure que MN.pers et MN.¬pers s'opposent également. La procédure de décomposition de l'écart procède comme le ferait une AFC, mais j'évalue la probabilité de distinction entre les valeurs des variables à l'aide d'un chi-deux ajusté. Est-ce orthodoxe? Y a-t-il un package R qui gère ce problème?

Merci pour toute aide.

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

Messagepar Logez Maxime » 19 Fév 2007, 09:41

Bonjour,



Je ne suis pas sur que ta méthodologie soit adaptée. Lorsque tu pratiques un chi deux sur table de contingence les valeurs attendues dépendent des fréquences marginales qui sont fixées par ton experimentation, si tu réduis ta table de contigence, ces fréquences marginales vont être calculées sur sur un total différent. Donc je ne suis pas sur que cette méthodologie soit la bonne. De plus ce que tu testes lorsque tu fais un chi-deux sur table de contingence s'est l'indépendance entre tes de deux facteurs mais je dirais de façon global, et pas vraiment si une modalité du facteur 1 a des affinités différentes avec les modalités du facteur 2 que la modalité 2 du facteur 1 ( je ne sais pas si je suis vraiment clair) mais en gros tu ne cherches pas a savoir si MN.0 se comporte différement avec PPF que MN.pers avec PPF. C'est un test global sur la table de contigence.

Maxime

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

Messagepar Renaud Lancelot » 19 Fév 2007, 10:05

Voici ce que je ferais:

1. Je me placerais dans le cadre du modèle linéaire généralisé. Ici j'ai éclaté la réponse (PPF) en variables de Bernoulli mais on pourrait rester en binomial.

2. J'ajusterais deux modèles: modèle de la moyenne générale et modèle de PPF en fct de MN.

3. Je comparerais les coefs du second modèle au coef du premier avec un test de Wald.

4. Pour un test global, je ferais un test du rapport des vraisemblances entre les deux modèles.

Mise en oeuvre:

Code : Tout sélectionner

> (mat <- matrix(c(71530, 14140, 942, 1697, 1576, 862), ncol = 2, byrow = TRUE,
+               dimnames = list(c("zero", "pers", "-pers"), c("zero", "un"))))
       zero    un
zero  71530 14140
pers    942  1697
-pers  1576   862
> # data.frame vide
> Data <- data.frame(MN = factor(character(0),
+                                levels = c("zero", "pers", "-pers")),
+                    PPF = numeric(0))
>
> for(i in seq(nrow(mat))){
+   Data <- rbind(Data,
+     data.frame(MN = factor(rep(rownames(mat)[i], sum(mat[i, ])),
+                            levels = levels(Data$MN)),
+                PPF = rep(0:1, times = c(mat[i, 1], mat[i, 2]))))
+     }
> # vérification
> with(Data, table(MN, PPF))
       PPF
MN          0     1
  zero  71530 14140
  pers    942  1697
  -pers  1576   862
>
> fm1 <- glm(PPF ~ 1, data = Data, family = binomial)
> summary(fm1)

Call:
glm(formula = PPF ~ 1, family = binomial, data = Data)

Deviance Residuals:
    Min       1Q   Median       3Q      Max 
-0.6377  -0.6377  -0.6377  -0.6377   1.8400 

Coefficients:
             Estimate Std. Error z value Pr(>|z|)   
(Intercept) -1.489365   0.008567  -173.9   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 86651  on 90746  degrees of freedom
Residual deviance: 86651  on 90746  degrees of freedom
AIC: 86653

Number of Fisher Scoring iterations: 4

>
> fm2 <- glm(PPF ~ -1 + MN, data = Data, family = binomial)
> summary(fm2)

Call:
glm(formula = PPF ~ -1 + MN, family = binomial, data = Data)

Deviance Residuals:
    Min       1Q   Median       3Q      Max 
-1.4354  -0.6006  -0.6006  -0.6006   1.8982 

Coefficients:
         Estimate Std. Error z value Pr(>|z|)   
MNzero  -1.621109   0.009203 -176.14   <2e-16 ***
MNpers   0.588612   0.040631   14.49   <2e-16 ***
MN-pers -0.603390   0.042363  -14.24   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 125802  on 90747  degrees of freedom
Residual deviance:  83359  on 90744  degrees of freedom
AIC: 83365

Number of Fisher Scoring iterations: 4

>
> library(aod)
Package aod, version 1.1-18
> # test chaque coef / moyenne générale
> wald.test(Sigma = vcov(fm2), b = coef(fm2), Terms = 1, H0 = coef(fm1))
Wald test:
----------

Chi-squared test:
X2 = 204.9, df = 1, P(> X2) = 0.0
> wald.test(Sigma = vcov(fm2), b = coef(fm2), Terms = 2, H0 = coef(fm1))
Wald test:
----------

Chi-squared test:
X2 = 2615.6, df = 1, P(> X2) = 0.0
> wald.test(Sigma = vcov(fm2), b = coef(fm2), Terms = 3, H0 = coef(fm1))
Wald test:
----------

Chi-squared test:
X2 = 437.4, df = 1, P(> X2) = 0.0
>
> # test global pour l'effet de MN
> anova(fm1, fm2, test = "Chisq")
Analysis of Deviance Table

Model 1: PPF ~ 1
Model 2: PPF ~ -1 + MN
  Resid. Df Resid. Dev    Df Deviance P(>|Chi|)
1     90746      86651                         
2     90744      83359     2     3292         0


Renaud

Nicolas Mazziotta
Messages : 18
Enregistré le : 02 Jan 2007, 09:43

Messagepar Nicolas Mazziotta » 19 Fév 2007, 10:42

@Maxime:
Je suis entièrement d'accord sur le fait que le chi² teste l'indépendance des variables croisées. Cependant, l'examen des contributions permet de se faire une idée du sens et de la pertinence des associations entre les valeurs des différentes variables (ou bien croiser une variable à trois niveaux avec une autre n'aurait jamais aucun intérêt). C'est d'ailleurs sur ce principe qu'est basé le mosaicplot(shaded=T).

Ma question pourrait être reformulée: soit, dans ma table 3x2, deux valeurs d'une même variable dont la contribution est statistiquement significative et orientée dans le même sens, comment faire pour dire si l'écart entre les contribution est lui-même significatif? Je recours à un nouveau test, indépendant du premier.

@Renaud:
Je vais devoir potasser un peu pour réagir de manière intelligente.
Merci pour cette suggestion, mais dans la mesure où les tests chi² suffisent (ce dont je ne suis pas certain, mais si ce n'est pas le cas, j'aimerais savoir pq; voir ma réponse @Maxime), je préfèrerais m'y tenir pour l'instant -- délais obligent.

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

Messagepar Renaud Lancelot » 19 Fév 2007, 11:17

Je pense que les tests de Wald indiqués dans mon exemple répondent à ta question: l'écart à la moyenne est-il significatif.

Une autre manière de présenter les choses, probablement moins rigoureuse, est d'utiliser les valeurs tests telles que présentées dans les fcts vtest et plot.vtest du package ttool (sur GuR, section "Packages"). Voir ?vtest et les références citées pour plus d'explications. En reprenant l'exemple précédent:

Code : Tout sélectionner

> ## test values
> library(ttool)
Le chargement a nécessité le package : RODBC
Package ttool, version 0.3-17
> Data$PPF <- factor(Data$PPF)
> (vt <- vtest(MN ~ PPF, data = Data))
$CALL
vtest(formula = MN ~ PPF, data = Data)

$vtest
               0       1
MN.zero   2.2576 -2.2576
MN.pers  -3.1486  3.1486
MN.-pers -1.1603  1.1603

$pval
              0      1
MN.zero  0.0240 0.0240
MN.pers  0.0016 0.0016
MN.-pers 0.2459 0.2459

attr(,"class")
[1] "vtest"
> plot(vt, conf = 95)
>


Le graphe donne une vision de la signification des valeurs tests.

Renaud

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

Messagepar Logez Maxime » 19 Fév 2007, 13:15

Re,


Je n'ai psa dit qu'on ne pouvait pas regarder le sens des contributions entre chaque variable j'ai juste dit que ce n'était pas un test de différence entre ces contributions, tout comme par exemple lorsque tu fais une anova tu tests la différence des moyennes mais pas si la première moyenne est plus grande ou plus petite que la deuxième. Je maintiens quand même ma position par rapport au deuxième test, du fait des fréquences marginales qui changent, mais j'avoue ne pas avoir de solution autre que de commenter les résidus;

Maxime

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

Messagepar Logez Maxime » 19 Fév 2007, 13:27

Re,

En surfant j'ai trouvé ça et ça te permet de dire quelles sont les cases de ta table de contingence qui sont significatives :
http://biol10.biol.umontreal.ca/BIO2041e/Exemple_contingence.pdf
En espérant que ça aide plus.

Maxime

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

Re: Tests post-hoc et chi-deux

Messagepar Matthieu Lesnoff » 20 Fév 2007, 06:42

Nicolas Mazziotta a écrit :Bonjour à tous,
On m'a conseillé d'analyser la structure d'une table de contingence croisant au moins une variable à plus de deux valeurs possibles en effectuant des chi-deux successifs. Je n'ai pas trouvé d'étude de ce problème dans mes lectures ou sur le net.



Il ya de multiples approches pour traiter vos donnees. Je vous conseille : "Agresti, A., 1990. Categorical data analysis. Wiley.", vous trouverez je pense toutes les reponses a votre probleme.

Quelques elements :

- Ce que vous proposez me semble correct. Ceci correspond a un classique partitionnement du Chi2, cf Agresti dans chap 3. Une fois qu'on a verifie la non independance globale par un Chi2 "omnibus", on peut partitionner le Chi2 total a n ddl en n Chi2 independants a 1 ddl. Un exemple de partitionnement en chi2 independants pour vos donnees est de (1) comparer ligne 2 vs 3 (ce que vous avez fait) et (2) lignes 1 vs 2 + 3.

- La meme approche de partitionnement peut etre realisee avec le test du rapport de vraisemblance (dont la statistitique est appellee G dans Agresti, cf exemple tres clair de partitionnemet p. 52). Sous R, il faut ici construire une petite fonction qui calcule les vraisemblances.

- Au moins deux autres approches possibles (cf tjs Agresti) :

# Calculer les odds-ratios et tester leurs egalites en faisant l'aproximation normale.

# Utiliser un modele lineaire generalise (fonction glm sous R) : ici le facteur MN n'a que 2 modalites, donc la regression binomiale (par exemple logistique) peut etre utilisee. C'est ce qu'a decrit Renaud. Dans le cas contraire, il faudrait utiliser un modele log-lineaire.

Dans vos donnees, ttes ces methodes doivent aboutir a des resultats tres proches, car vous avez des grands effectifs et des prob qui ne sont pas proches de 0 ou de 1, donc les conditions asymptotiques sont probablement respectees. Dans le cas contraire, il faudrait faire attention au choix des methodes.

Matthieu

Nicolas Mazziotta
Messages : 18
Enregistré le : 02 Jan 2007, 09:43

Messagepar Nicolas Mazziotta » 20 Fév 2007, 08:19

Je viens de faire plusieurs tests des méthodes proposées par Renaud et de celles que j'avais appliquées au départ. Effectivement, tout concorde. Je vous remercie tous les trois pour votre aide, en particulier:

- Maxime pour m'avoir fait réfléchir sur la nature des tests employés;
- Renaud pour m'avoir présenté pratiquement des techniques que je ne connaissais pas bien;
- Matthieu pour la référence bibliographique.

Si vous n'y voyez pas d'inconvénient, je citerai vos noms en remerciement dans mon rapport.

Par ailleurs, pour information, il y a une seconde édition au livre cité par Matthieu, qui gagnerait certainement à être lu avec ceci sous les yeux

https://home.comcast.net/~lthompson221/ ... crete2.pdf

[Je n'ai pas encore lu, mais ça a l'air riche]
--
Nicolas Mazziotta

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Re: [Réglé] Tests post-hoc et chi-deux

Messagepar mafab francoise » 13 Mai 2019, 07:21

Bonjour je me permet de relancer le sujet,
je pense que j'ai le même soucis,
je souhaiterai savoir si le pourcentage du comportement est différent en fonction des sites et des mois

voici mon script de base:

###### Donnée comportement ######
data<-read.table("taille_comportement_genre.txt",header=T)
data

# tableau d'effectifs des données comportement
tab<-table(data$Comportement,data$Mois,data$Sites)
tab

# tableau des données comportement en pourcentage
p<-prop.table(tab,margin=c(2,3))
p
# Tableau en pourcentage
pp<-p*100
pp


voici à quoi ressemble mon tableau pp :


R version 3.5.0 (2018-04-23) -- "Joy in Playing"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-w64-mingw32/x64 (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.

R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.

Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.

[Workspace loaded from ~/.RData]

> setwd("C:/Users/kiricoupepette/Desktop/Reef conservation/COTS/données")
> ###### Donnée comportement ######
> data<-read.table("taille_comportement_genre.txt",header=T)
> data
Sites Mois Transect Taille Comportement
1 Turtle_point Fevrier 1 30 mange
2 Turtle_point Fevrier 1 45 cache
3 Turtle_point Fevrier 2 32 repos
4 Turtle_point Fevrier 2 35 repos
5 Turtle_point Fevrier 2 45 repos
6 Turtle_point Fevrier 3 40 repos
7 Turtle_point Fevrier 3 42 mange
8 Turtle_point Mars 1 70 cache
9 Turtle_point Mars 2 80 cache
10 Turtle_point Mars 2 60 mange
11 Turtle_point Mars 3 50 repos
12 Turtle_point Mars 3 45 repos
13 Turtle_point Mars 3 50 repos
14 Turtle_point Mars 3 30 repos
15 Turtle_point Mars 3 40 repos
16 Turtle_point Avril 1 45 repos
17 Turtle_point Avril 1 20 mange
18 Turtle_point Avril 2 45 mange
19 Turtle_point Avril 3 65 repos
20 Turtle_point Avril 3 35 repos
21 Turtle_point Avril 3 60 mange
22 Turtle_cave Fevrier 1 40 cache
23 Turtle_cave Fevrier 1 35 cache
24 Turtle_cave Fevrier 1 40 mange
25 Turtle_cave Fevrier 1 44 mange
26 Turtle_cave Fevrier 1 45 mange
27 Turtle_cave Fevrier 2 25 cache
28 Turtle_cave Fevrier 2 50 mange
29 Turtle_cave Fevrier 2 60 mange
30 Turtle_cave Fevrier 2 60 mange
31 Turtle_cave Fevrier 2 60 cache
32 Turtle_cave Fevrier 2 55 mange
33 Turtle_cave Fevrier 2 40 mange
34 Turtle_cave Fevrier 2 60 mange
35 Turtle_cave Fevrier 2 40 mange
36 Turtle_cave Fevrier 2 60 mange
37 Turtle_cave Fevrier 2 50 mange
38 Turtle_cave Fevrier 2 40 mange
39 Turtle_cave Fevrier 3 70 mange
40 Turtle_cave Fevrier 3 65 mange
41 Turtle_cave Fevrier 3 40 repos
42 Turtle_cave Fevrier 3 50 mange
43 Turtle_cave Fevrier 3 60 mange
44 Turtle_cave Fevrier 3 40 <NA>
45 Turtle_cave Fevrier 3 64 mange
46 Turtle_cave Fevrier 3 40 mange
47 Anemone_garden Fevrier 1 70 mange
48 Anemone_garden Fevrier 1 60 mange
49 Anemone_garden Fevrier 2 30 mange
50 Anemone_garden Fevrier 2 40 mange
51 Anemone_garden Fevrier 3 70 repos
52 Anemone_garden Fevrier 3 70 mange
53 Anemone_garden Fevrier 3 50 mange
54 Anemone_garden Fevrier 3 45 mange
55 Anemone_garden Fevrier 3 50 mange
56 Anemone_garden Fevrier 3 35 mange
57 Anemone_garden Fevrier 3 70 repos
58 Anemone_garden Mars 1 30 repos
59 Anemone_garden Mars 2 NA <NA>
60 Anemone_garden Mars 3 NA <NA>
61 Anemone_garden Avril 1 45 mange
62 Anemone_garden Avril 2 60 mange
63 Anemone_garden Avril 3 30 repos
64 Anemone_garden Avril 3 45 repos
Genre_coraux Temperature
1 Galaxea 28
2 roche 28
3 roche 28
4 roche 28
5 roche 28
6 roche 28
7 Porites 28
8 <NA> 28
9 roche 28
10 corail_mou 28
11 roche 28
12 roche 28
13 roche 28
14 roche 28
15 roche 28
16 roche 28
17 Pocillopora 28
18 Platygyra 28
19 roche 28
20 roche 28
21 Acropora 28
22 Lobophyllia 28
23 Lobophyllia 28
24 Porites 28
25 Favites 28
26 Algue_encroutante 28
27 Pocillopora 28
28 Porites 28
29 Favites 28
30 Astreopora 28
31 Lobophyllia 28
32 Favites 28
33 Favites 28
34 Favites 28
35 Platygyra 28
36 Favites 28
37 Lobophyllia 28
38 Favites 28
39 Favites 28
40 Favites 28
41 roche 28
42 Corail_mou 28
43 Favites 28
44 <NA> 28
45 Porites 28
46 Favites 28
47 Favites 28
48 Favites 28
49 Porites 28
50 Porites 28
51 roche 28
52 Favites 28
53 Favia 28
54 Favites 28
55 Favites 28
56 Favites 28
57 roche 28
58 roche 28
59 <NA> 28
60 <NA> 28
61 Porites 27
62 Pocillopora 27
63 sable 27
64 roche 27
> ###### Donnée comportement ######
> data<-read.table("taille_comportement_genre.txt",header=T)
> data
Sites Mois Transect Taille Comportement
1 Turtle_point Fevrier 1 30 mange
2 Turtle_point Fevrier 1 45 cache
3 Turtle_point Fevrier 2 32 repos
4 Turtle_point Fevrier 2 35 repos
5 Turtle_point Fevrier 2 45 repos
6 Turtle_point Fevrier 3 40 repos
7 Turtle_point Fevrier 3 42 mange
8 Turtle_point Mars 1 70 cache
9 Turtle_point Mars 2 80 cache
10 Turtle_point Mars 2 60 mange
11 Turtle_point Mars 3 50 repos
12 Turtle_point Mars 3 45 repos
13 Turtle_point Mars 3 50 repos
14 Turtle_point Mars 3 30 repos
15 Turtle_point Mars 3 40 repos
16 Turtle_point Avril 1 45 repos
17 Turtle_point Avril 1 20 mange
18 Turtle_point Avril 2 45 mange
19 Turtle_point Avril 3 65 repos
20 Turtle_point Avril 3 35 repos
21 Turtle_point Avril 3 60 mange
22 Turtle_cave Fevrier 1 40 cache
23 Turtle_cave Fevrier 1 35 cache
24 Turtle_cave Fevrier 1 40 mange
25 Turtle_cave Fevrier 1 44 mange
26 Turtle_cave Fevrier 1 45 mange
27 Turtle_cave Fevrier 2 25 cache
28 Turtle_cave Fevrier 2 50 mange
29 Turtle_cave Fevrier 2 60 mange
30 Turtle_cave Fevrier 2 60 mange
31 Turtle_cave Fevrier 2 60 cache
32 Turtle_cave Fevrier 2 55 mange
33 Turtle_cave Fevrier 2 40 mange
34 Turtle_cave Fevrier 2 60 mange
35 Turtle_cave Fevrier 2 40 mange
36 Turtle_cave Fevrier 2 60 mange
37 Turtle_cave Fevrier 2 50 mange
38 Turtle_cave Fevrier 2 40 mange
39 Turtle_cave Fevrier 3 70 mange
40 Turtle_cave Fevrier 3 65 mange
41 Turtle_cave Fevrier 3 40 repos
42 Turtle_cave Fevrier 3 50 mange
43 Turtle_cave Fevrier 3 60 mange
44 Turtle_cave Fevrier 3 40 <NA>
45 Turtle_cave Fevrier 3 64 mange
46 Turtle_cave Fevrier 3 40 mange
47 Turtle_cave Avril 1 50 mange
48 Anemone_garden Fevrier 1 70 mange
49 Anemone_garden Fevrier 1 60 mange
50 Anemone_garden Fevrier 2 30 mange
51 Anemone_garden Fevrier 2 40 mange
52 Anemone_garden Fevrier 3 70 repos
53 Anemone_garden Fevrier 3 70 mange
54 Anemone_garden Fevrier 3 50 mange
55 Anemone_garden Fevrier 3 45 mange
56 Anemone_garden Fevrier 3 50 mange
57 Anemone_garden Fevrier 3 35 mange
58 Anemone_garden Fevrier 3 70 repos
59 Anemone_garden Mars 1 30 repos
60 Anemone_garden Mars 2 NA <NA>
61 Anemone_garden Mars 3 NA <NA>
62 Anemone_garden Avril 1 45 mange
63 Anemone_garden Avril 2 60 mange
64 Anemone_garden Avril 3 30 repos
65 Anemone_garden Avril 3 45 repos
Genre_coraux Temperature
1 Galaxea 28
2 roche 28
3 roche 28
4 roche 28
5 roche 28
6 roche 28
7 Porites 28
8 <NA> 28
9 roche 28
10 corail_mou 28
11 roche 28
12 roche 28
13 roche 28
14 roche 28
15 roche 28
16 roche 28
17 Pocillopora 28
18 Platygyra 28
19 roche 28
20 roche 28
21 Acropora 28
22 Lobophyllia 28
23 Lobophyllia 28
24 Porites 28
25 Favites 28
26 Algue_encroutante 28
27 Pocillopora 28
28 Porites 28
29 Favites 28
30 Astreopora 28
31 Lobophyllia 28
32 Favites 28
33 Favites 28
34 Favites 28
35 Platygyra 28
36 Favites 28
37 Lobophyllia 28
38 Favites 28
39 Favites 28
40 Favites 28
41 roche 28
42 Corail_mou 28
43 Favites 28
44 <NA> 28
45 Porites 28
46 Favites 28
47 Favites 27
48 Favites 28
49 Favites 28
50 Porites 28
51 Porites 28
52 roche 28
53 Favites 28
54 Favia 28
55 Favites 28
56 Favites 28
57 Favites 28
58 roche 28
59 roche 28
60 <NA> 28
61 <NA> 28
62 Porites 27
63 Pocillopora 27
64 sable 27
65 roche 27
> # tableau d'effectifs des données comportement
> tab<-table(data$Comportement,data$Mois,data$Sites)
> tab
, , = Anemone_garden


Avril Fevrier Mars
cache 0 0 0
mange 2 9 0
repos 2 2 1

, , = Turtle_cave


Avril Fevrier Mars
cache 0 4 0
mange 1 19 0
repos 0 1 0

, , = Turtle_point


Avril Fevrier Mars
cache 0 1 2
mange 3 2 1
repos 3 4 5

> # tableau des données comportement en pourcentage
> p<-prop.table(tab,margin=c(2,3))
> p
, , = Anemone_garden


Avril Fevrier Mars
cache 0.00000000 0.00000000 0.00000000
mange 0.50000000 0.81818182 0.00000000
repos 0.50000000 0.18181818 1.00000000

, , = Turtle_cave


Avril Fevrier Mars
cache 0.00000000 0.16666667
mange 1.00000000 0.79166667
repos 0.00000000 0.04166667

, , = Turtle_point


Avril Fevrier Mars
cache 0.00000000 0.14285714 0.25000000
mange 0.50000000 0.28571429 0.12500000
repos 0.50000000 0.57142857 0.62500000

> pp<-p*100
> pp
, , = Anemone_garden


Avril Fevrier Mars
cache 0.000000 0.000000 0.000000
mange 50.000000 81.818182 0.000000
repos 50.000000 18.181818 100.000000

, , = Turtle_cave


Avril Fevrier Mars
cache 0.000000 16.666667
mange 100.000000 79.166667
repos 0.000000 4.166667

, , = Turtle_point


Avril Fevrier Mars
cache 0.000000 14.285714 25.000000
mange 50.000000 28.571429 12.500000
repos 50.000000 57.142857 62.500000

> chisq.test(Comportement,Sites)
Error in is.data.frame(x) : object 'Comportement' not found
> chisq.test(data$Comportement,data$Sites)

Pearson's Chi-squared test

data: data$Comportement and data$Sites
X-squared = 18.959, df = 4, p-value = 0.0008007

Warning message:
In chisq.test(data$Comportement, data$Sites) :
l'approximation du Chi-2 est peut-être incorrecte
> chisq.test(pp$Comportement)
Error in pp$Comportement : $ operator is invalid for atomic vectors
> chisq.test(data$Comportement,mois=="Avril")
Error in chisq.test(data$Comportement, mois == "Avril") :
object 'mois' not found
> chisq.test(data$Comportement,Mois=="Avril")
Error in chisq.test(data$Comportement, Mois == "Avril") :
object 'Mois' not found
> # tableau d'effectifs des données comportement
> tab<-table(data$Comportement,data$Mois,data$Sites)
> tab
, , = Anemone_garden


Avril Fevrier Mars
cache 0 0 0
mange 2 9 0
repos 2 2 1

, , = Turtle_cave


Avril Fevrier Mars
cache 0 4 0
mange 1 19 0
repos 0 1 0

, , = Turtle_point


Avril Fevrier Mars
cache 0 1 2
mange 3 2 1
repos 3 4 5

> # tableau des données comportement en pourcentage
> p<-prop.table(tab,margin=c(2,3))
> p
, , = Anemone_garden


Avril Fevrier Mars
cache 0.00000000 0.00000000 0.00000000
mange 0.50000000 0.81818182 0.00000000
repos 0.50000000 0.18181818 1.00000000

, , = Turtle_cave


Avril Fevrier Mars
cache 0.00000000 0.16666667
mange 1.00000000 0.79166667
repos 0.00000000 0.04166667

, , = Turtle_point


Avril Fevrier Mars
cache 0.00000000 0.14285714 0.25000000
mange 0.50000000 0.28571429 0.12500000
repos 0.50000000 0.57142857 0.62500000

> # Tableau en pourcentage
> pp<-p*100
> pp
, , = Anemone_garden


Avril Fevrier Mars
cache 0.000000 0.000000 0.000000
mange 50.000000 81.818182 0.000000
repos 50.000000 18.181818 100.000000

, , = Turtle_cave


Avril Fevrier Mars
cache 0.000000 16.666667
mange 100.000000 79.166667
repos 0.000000 4.166667

, , = Turtle_point


Avril Fevrier Mars
cache 0.000000 14.285714 25.000000
mange 50.000000 28.571429 12.500000
repos 50.000000 57.142857 62.500000

> ag<-subset(pp,Sites=="Anemone_garden")
Error in subset.default(pp, Sites == "Anemone_garden") :
object 'Sites' not found
> # ANEMONE GARDEN
> data<-read.table("compag.txt",header=T)
> data
Comportement Fevrier Mars Avril
1 cache 0.00 0 0
2 mange 81.81 0 50
3 repos 18.18 100 50
> chisq.test(data$Fevrier,data$Mars)

Pearson's Chi-squared test

data: data$Fevrier and data$Mars
X-squared = 3, df = 2, p-value = 0.2231

Warning message:
In chisq.test(data$Fevrier, data$Mars) :
l'approximation du Chi-2 est peut-être incorrecte
> ?prop.test
> install.packages("ttool")
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/src/contrib:
cannot open URL 'https://cran.rstudio.com/src/contrib/PACKAGES'
Installing package into ‘D:/DOCUMENTS/R/win-library/3.5’
(as ‘lib’ is unspecified)
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/src/contrib:
cannot open URL 'https://cran.rstudio.com/src/contrib/PACKAGES'
Warning in install.packages :
package ‘ttool’ is not available (for R version 3.5.0)
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/bin/windows/contrib/3.5:
cannot open URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/PACKAGES'
> library(ttool)
Error in library(ttool) : aucun package nommé ‘ttool’ n'est trouvé
> install.packages("ttool")
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/src/contrib:
cannot open URL 'https://cran.rstudio.com/src/contrib/PACKAGES'
Installing package into ‘D:/DOCUMENTS/R/win-library/3.5’
(as ‘lib’ is unspecified)
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/src/contrib:
cannot open URL 'https://cran.rstudio.com/src/contrib/PACKAGES'
Warning in install.packages :
package ‘ttool’ is not available (for R version 3.5.0)
Warning in install.packages :
unable to access index for repository https://cran.rstudio.com/bin/windows/contrib/3.5:
cannot open URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/PACKAGES'
> install.packages("ttool")
Installing package into ‘D:/DOCUMENTS/R/win-library/3.5’
(as ‘lib’ is unspecified)
Warning in install.packages :
package ‘ttool’ is not available (for R version 3.5.0)
> install.packages("RODBC")
Installing package into ‘D:/DOCUMENTS/R/win-library/3.5’
(as ‘lib’ is unspecified)
trying URL 'https://cran.rstudio.com/bin/windows/contrib/3.5/RODBC_1.3-15.zip'
Content type 'application/zip' length 879459 bytes (858 KB)
downloaded 0 bytes

Warning in install.packages :
downloaded length 0 != reported length 879459
Warning in install.packages :
error 1 in extracting from zip file
Warning in install.packages :
cannot open compressed file 'RODBC/DESCRIPTION', probable reason 'No such file or directory'
Error in install.packages : cannot open the connection
> # Tableau en pourcentage
> pp<-p*100
> pp
, , = Anemone_garden


Avril Fevrier Mars
cache 0.000000 0.000000 0.000000
mange 50.000000 81.818182 0.000000
repos 50.000000 18.181818 100.000000

, , = Turtle_cave


Avril Fevrier Mars
cache 0.000000 16.666667
mange 100.000000 79.166667
repos 0.000000 4.166667

, , = Turtle_point


Avril Fevrier Mars
cache 0.000000 14.285714 25.000000
mange 50.000000 28.571429 12.500000
repos 50.000000 57.142857 62.500000


J'aimerai donc savoir si statistiquement il existe une différence significative entre les pourcentages de comportement ( cache, mange, repos ) en fonction des mois et pouvoir ainsi le représenter graphiquement.
Je dois passer par un modèle ? ou je peux effectuer un test de chi 2 2 à 2 pour chaque site ?

Merci d'avance

Cdlt

Marine F.

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Re: [Réglé] Tests post-hoc et chi-deux

Messagepar mafab francoise » 13 Mai 2019, 08:11

J'ai trouvé une solution en utilisant un G test il me compare les pourcentages de comportement pour chaque mois pour chaque site, mais c'est du manuel, j'aimerai aussi qu'il compare 2 mois entre eux
voici mon script :

##### Turtle point ####
## Février-Mars ###

Input =("
Comportement Février
cache 14.28
mange 28.57
repos 57.14
")

Matriz = as.matrix(read.table(textConnection(Input),
header=TRUE,
row.names=1))
Matriz

GTest(Matriz,
correct="none")
pairwise.G.test(Matriz,p.method = "none")

j'obtiens donc :
Pairwise comparisons using G-tests

data: Matriz

cache mange
mange 0.0275 -
repos 1.5e-07 0.0018

P value adjustment method: none

si je rajoute une colonne avec le mois de mars par exemple , le script marche mais je pense pas qu'il me compare les mois entre eux

## MARS-AVRIL

Input =("
Comportement Mars Avril
cache 0.000000 0.000000
mange 0.000000 50
repos 100.000000 50
")

Matriz = as.matrix(read.table(textConnection(Input),
header=TRUE,
row.names=1))
Matriz

GTest(Matriz,
correct="none")
pairwise.G.test(Matriz,p.method = "none")


N'y a t'il pas une autre méthode plus rapide ?

Merci d'avance
Marine


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité