Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Chi-deux - R Commander
2 participants
Page 1 sur 1
Chi-deux - R Commander
Bonjour,
J'ai un problème avec R Commander pour faire un test du chi-deux dont je connais déjà la réponse (je veux juste connaitre les résidus). Quand je fais le test avec le logiciel, j'obtiens un chi-deux de 0 alors que je devrais avoir une valeur autour de 955. Et quand il me met mon tableau de contingence, il n'y a que des 1 à la place des nij.
Je m'explique : j'étudie le lien entre les proies d'un animal en fonction de divers villages. J'ai donc fait sur excel une colonne proie, une colonne village et une colonne nombre qui correspond au nombre de proies par village. Je charge ces données dans R commander et je transforme la variable nombre avec "convertir des variables numériques en facteur". Puis je fait un tri croisé en sélectionnant Proie et village. J'obtiens que des 1 dans le tableau de contingence...
D'où vient le problème et que faire ?
Merci.
ps : on peut également avec ce logiciel créer manuellement le tableau de contingence mais il ne faut pas plus de 10 colonnes et 10 lignes, ce que je dépasse de peu malheureusement, sinon ce serais trop simple.
J'ai un problème avec R Commander pour faire un test du chi-deux dont je connais déjà la réponse (je veux juste connaitre les résidus). Quand je fais le test avec le logiciel, j'obtiens un chi-deux de 0 alors que je devrais avoir une valeur autour de 955. Et quand il me met mon tableau de contingence, il n'y a que des 1 à la place des nij.
Je m'explique : j'étudie le lien entre les proies d'un animal en fonction de divers villages. J'ai donc fait sur excel une colonne proie, une colonne village et une colonne nombre qui correspond au nombre de proies par village. Je charge ces données dans R commander et je transforme la variable nombre avec "convertir des variables numériques en facteur". Puis je fait un tri croisé en sélectionnant Proie et village. J'obtiens que des 1 dans le tableau de contingence...
D'où vient le problème et que faire ?
Merci.
ps : on peut également avec ce logiciel créer manuellement le tableau de contingence mais il ne faut pas plus de 10 colonnes et 10 lignes, ce que je dépasse de peu malheureusement, sinon ce serais trop simple.
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Bonjour,
je n'utilise pas cette interface. Par contre ce qui est sur c'est que le passage de numérique en facteur va poser des problèmes. Un facteur ce n'est ni plus ni moins qu'une variable catégorielle dont chaque élément est une catégorie. Quand tu transformes en facteur tu perds toute notion de nombre. La catégorie 1 ne veut pas dire que la valeur vaut 1.
pour faire des tableaux de contingence, la fonction xtabs est toute indiquée.
Cdlt
je n'utilise pas cette interface. Par contre ce qui est sur c'est que le passage de numérique en facteur va poser des problèmes. Un facteur ce n'est ni plus ni moins qu'une variable catégorielle dont chaque élément est une catégorie. Quand tu transformes en facteur tu perds toute notion de nombre. La catégorie 1 ne veut pas dire que la valeur vaut 1.
pour faire des tableaux de contingence, la fonction xtabs est toute indiquée.
Cdlt
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
Bonjour,
merci pour la réponse. Malheureusement, sans transformer les variables, j'obtiens le même résultat aberrant.
Merci.
merci pour la réponse. Malheureusement, sans transformer les variables, j'obtiens le même résultat aberrant.
Merci.
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
J'ai l'impression que le logiciel lit mal mes données :
a partir d'un tableau de contingence, il faut bien créer une colonne correspondant à la variable X (type de village), une pour la variable Y (type de proie) et une colonne avec le nombre de proies consommées par village et par type de proie (càd les nij du tableau de contingence).
Est-ce bien cela ?
merci !
a partir d'un tableau de contingence, il faut bien créer une colonne correspondant à la variable X (type de village), une pour la variable Y (type de proie) et une colonne avec le nombre de proies consommées par village et par type de proie (càd les nij du tableau de contingence).
Est-ce bien cela ?
merci !
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
sous quelle format sont tes données ? Est-ce que tu peux donner un exemple ?
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
Bonjour,
Voici le lien avec mon fichier de données (légèrement simplifié, j'ai enlevé quelques données).
Quand je fais "visualiser" sur R commander, j'obtiens le même tableau que sur Excel.
Merci pour ton aide.
Voici le lien avec mon fichier de données (légèrement simplifié, j'ai enlevé quelques données).
Quand je fais "visualiser" sur R commander, j'obtiens le même tableau que sur Excel.
Merci pour ton aide.
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
http://www.casimages.com/f.php?f=131015113348271598.xls
Autrement, je peux peut-être obtenir mes résidus à partir de la console R, mais je ne connais pas du tout les codes.
Autrement, je peux peut-être obtenir mes résidus à partir de la console R, mais je ne connais pas du tout les codes.
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Déjà le chi² n'est pas de 955.
Méthode :
1. ouvrir R
2. copier le tableau dans le tableau excel
3. impor du tableau dans R : tab <- read.table("clipboard", h=T)
4. passage en table de contingence : tab2 <- xtabs(Nombre ~ Proie + Village, data=tab)
6. les résidus : chi2$residuals
Méthode :
1. ouvrir R
2. copier le tableau dans le tableau excel
3. impor du tableau dans R : tab <- read.table("clipboard", h=T)
4. passage en table de contingence : tab2 <- xtabs(Nombre ~ Proie + Village, data=tab)
- Code:
Village
Proie B G O P
AE 3 4 2 13
FS 9 12 5 4
OI 6 6 8 1
RF 2 6 15 6
RT 8 9 3 11
VK 4 7 3 8
6. les résidus : chi2$residuals
- Code:
Village
Proie B G O P
AE -0.72351197 -0.89841236 -1.37568372 2.79168420
FS 1.12768497 1.19382576 -0.74545617 -1.49835285
OI 0.79940934 0.01585439 1.41389974 -1.99936403
RF -1.62947851 -0.77800952 3.18443971 -0.72104138
RT 0.63245553 0.06741999 -1.56524758 0.81839321
VK -0.25428873 0.30205243 -0.93329580 0.76777844
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
Bonjour,
Je suis désolé mais je n'y arrive pas.... je fais bien un copié des données de excel, puis je tape la première formule, je fais ok et il ne se passe rien... et si je fait un copier-coller de votre formule, j'ai le message suivant : Message d'avis :
In read.table("clipboard", h = T) :
readTableHeader a trouvé une ligne finale incomplète dans 'clipboard'
Je suis désolé mais je n'y arrive pas.... je fais bien un copié des données de excel, puis je tape la première formule, je fais ok et il ne se passe rien... et si je fait un copier-coller de votre formule, j'ai le message suivant : Message d'avis :
In read.table("clipboard", h = T) :
readTableHeader a trouvé une ligne finale incomplète dans 'clipboard'
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Il faut bien partir de la première cellule, glisser vers la dernière pour tout sélectionner et ensuite faire le copier.
Sinon les résultats du test sont ici :
Sinon les résultats du test sont ici :
- Code:
chi2 <- structure(list(statistic = structure(42.2119479257542, .Names = "X-squared"),
parameter = structure(15, .Names = "df"), p.value = 0.000208478400584625,
method = "Pearson's Chi-squared test", data.name = "tab2",
observed = structure(c(3, 9, 6, 2, 8, 4, 4, 12, 6, 6, 9,
7, 2, 5, 8, 15, 3, 3, 13, 4, 1, 6, 11, 8), .Dim = c(6L, 4L
), .Dimnames = structure(list(Proie = c("AE", "FS", "OI",
"RF", "RT", "VK"), Village = c("B", "G", "O", "P")), .Names = c("Proie",
"Village")), class = c("xtabs", "table"), call = xtabs(formula = Nombre ~
Proie + Village, data = tab)), expected = structure(c(4.54193548387097,
6.19354838709677, 4.33548387096774, 5.98709677419355, 6.4,
4.54193548387097, 6.24516129032258, 8.51612903225806, 5.96129032258064,
8.23225806451613, 8.8, 6.24516129032258, 5.10967741935484,
6.96774193548387, 4.87741935483871, 6.73548387096774, 7.2,
5.10967741935484, 6.10322580645161, 8.32258064516129, 5.8258064516129,
8.04516129032258, 8.6, 6.10322580645161), .Dim = c(6L, 4L
), .Dimnames = structure(list(Proie = c("AE", "FS", "OI",
"RF", "RT", "VK"), Village = c("B", "G", "O", "P")), .Names = c("Proie",
"Village"))), residuals = structure(c(-0.723511972796621,
1.12768496801934, 0.799409344165535, -1.62947851242949, 0.632455532033676,
-0.254288726840653, -0.898412355990812, 1.19382575837053,
0.0158543855662755, -0.778009522349969, 0.067419986246324,
0.302052430031394, -1.37568372171191, -0.745456168025213,
1.41389974062231, 3.18443971284759, -1.56524758424985, -0.933295802904135,
2.79168419558682, -1.49835285073855, -1.99936402563012, -0.721041375249283,
0.818393207364568, 0.76777844106878), class = c("xtabs",
"table"), call = xtabs(formula = Nombre ~ Proie + Village,
data = tab), .Dim = c(6L, 4L), .Dimnames = structure(list(
Proie = c("AE", "FS", "OI", "RF", "RT", "VK"), Village = c("B",
"G", "O", "P")), .Names = c("Proie", "Village"))), stdres = structure(c(-0.876796977941641,
1.40965205013118, 0.965152552599526, -2.02881528321388, 0.793776606365423,
-0.308162954590367, -1.1460936452464, 1.57092751831944, 0.0201496369370379,
-1.01969396445948, 0.0890733991384093, 0.385324587625945,
-1.69492698962367, -0.947382424276266, 1.73549926108598,
4.03093668142246, -1.99724074368497, -1.14987785395631, 3.54538297007632,
-1.96282589467374, -2.5296600448907, -0.940800632416673,
1.07640042444908, 0.97506323031098), class = c("xtabs", "table"
), call = xtabs(formula = Nombre ~ Proie + Village, data = tab), .Dim = c(6L,
4L), .Dimnames = structure(list(Proie = c("AE", "FS", "OI",
"RF", "RT", "VK"), Village = c("B", "G", "O", "P")), .Names = c("Proie",
"Village")))), .Names = c("statistic", "parameter", "p.value",
"method", "data.name", "observed", "expected", "residuals", "stdres"
), class = "htest")
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
Merci de m'avoir sauvé !
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Bonsoir, je reviens vers vous car j'ai de nouveau un problème. Je veux maintenant comparer mes colonnes (càd les villages) 2 à 2. J'utilise Biostatgv, qui crée les commandes sur R et donne les résultats. J'ai fait un test de Friedman et un Tau de Kendall qui donnent des résultats différents : pour kendall, j'ai une p-value de 1.2E-6 alors que pour Friedman, p = 1 !! Ce n'est vraiment pas logique.
Voici les commandes utilisées :
Tau de Kendall :
m=matrix(c(0,0,76,40,0,0,47,50,0,0,0,0,61,25,0,0,0,0,0,0,0,0,5,2,0,0,1,2,0,0,10,9,0,0,22,34,0,0,1,2),20,2, byrow=TRUE)
cor.test(m[,1], m[,2], method="kendall")
Friedman :
m = matrix(c(0,0,76,40,0,0,47,50,0,0,0,0,61,25,0,0,0,0,0,0,0,0,5,2,0,0,1,2,0,0,10,9,0,0,22,34,0,0,1,2),nrow=20,ncol=2, byrow=TRUE, dimnames=list(1:20,paste("Groupe",1:2)))
friedman.test(m)
Où est le problème ?
Merci pour votre aide !
Voici les commandes utilisées :
Tau de Kendall :
m=matrix(c(0,0,76,40,0,0,47,50,0,0,0,0,61,25,0,0,0,0,0,0,0,0,5,2,0,0,1,2,0,0,10,9,0,0,22,34,0,0,1,2),20,2, byrow=TRUE)
cor.test(m[,1], m[,2], method="kendall")
Friedman :
m = matrix(c(0,0,76,40,0,0,47,50,0,0,0,0,61,25,0,0,0,0,0,0,0,0,5,2,0,0,1,2,0,0,10,9,0,0,22,34,0,0,1,2),nrow=20,ncol=2, byrow=TRUE, dimnames=list(1:20,paste("Groupe",1:2)))
friedman.test(m)
Où est le problème ?
Merci pour votre aide !
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Au contraire. Le tau de kendll te montre un fort lien entre tes deux variables. L'hypothèse nulle du test de firedman est qu'il n'y a pas de différences entre les groupes. Si les deux variables sont très proches (très fort tau kendall) alors tu t'attends à ce que les groupes soient aussi très proches et donc pas de différence avec le test de friedman. C'est exactement ce que tu observes.Sandpiper a écrit:Ce n'est vraiment pas logique.
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
Ah oui, sur ce coup là je suis d'accord, j'avais pas remarqué que c'était l'inverse. Par contre, pour la moitié des comparaisons, les 2 tests ne s'accordent pas, par exemple j'ai p>0.05 pour les deux tests.
Y aurait-il une explication statistique ? Quel test croire ?
Thanks.
Y aurait-il une explication statistique ? Quel test croire ?
Thanks.
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
Tout simplement parce que tu ne mesures pas la même chose avec les deux. Dans un cas c'est un lien, dans l'autre une comparaison de moyenne. Tu peux très bien ne pas avoir de lien entre les deux et pas de différence de moyenne.
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
D'accord. Juste une dernière question si je peux me permettre :
j'ai voulu vérifier avec un collègue quelques tau en faisant les calculs à la main et on a des résultats bien différents, par exemple 0.21 contre 0.08. Ces calculs sont longs et complexes mais on a fait tous les deux le calcul de manière indépendante et on arrive sr le même tau. Puis-je faire confiance quand même à R ?
Merci, j'espère que c'est ma dernière question :-).
j'ai voulu vérifier avec un collègue quelques tau en faisant les calculs à la main et on a des résultats bien différents, par exemple 0.21 contre 0.08. Ces calculs sont longs et complexes mais on a fait tous les deux le calcul de manière indépendante et on arrive sr le même tau. Puis-je faire confiance quand même à R ?
Merci, j'espère que c'est ma dernière question :-).
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
j'ai pris un exemple de valeur et j'arrive bien au même tau que la fonction cor.
A combien tu arrives pour les données suivantes :
A combien tu arrives pour les données suivantes :
- Code:
x <- c(31L, 23L, 48L, 50L, 33L, 12L, 11L, 43L, 46L, 28L)
y <- c(27L, 20L, 35L, 13L, 48L, 33L, 29L, 21L, 38L, 47L)
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
A la main j'obtiens un tau de -0.022 contre tau= -0.0667 avec R (biostatgv). le code est : m=matrix(c(31,27,23,20,48,35,50,13,33,48,12,33,11,29,43,21,46,38,28,47),10,2, byrow=TRUE)
cor.test(m[,1], m[,2], method="kendall")
cor.test(m[,1], m[,2], method="kendall")
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Re: Chi-deux - R Commander
il faut faire toute les comparaisons possibles :
- Code:
rx <- rank(x)
ry <- rank(y)
rks <- cbind(rx, ry)
# toutes combinaisons 2 à 2 possibles
co <- combn(length(x),2)
# la fonction qui compare deux couples de rangs deux à deux (rxi, ryi) et (rxj, ryj):
fun <- function(i, j) {
aux <- (all(rks[i,]>rks[j,]) | all(rks[i,]<rks[j,]))
aux <- aux*1
aux
}
# si rxi > rxj et ryi > ryj, ou si rxi < rxj et ryi < ryj alors c'est une paire concordante, sinon non
# cherche à savoir si pour chaque comparaison de 2 lignes 2 à 2, si elle concordante (1) ou non (0)
nc <- apply(co, 2, function(u) fun(u[1], u[2]))
head(nc)
[1] 1 1 0 1 0 0
co[,1:6]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 1 1 1
[2,] 2 3 4 5 6 7
# ce qui veut dire que tous les rangs de la ligne 1 sont > ou < aux rangs des lignes 2 et 3 mais pas à ceux de la ligne 4
# vérification
rks[1:4,]
rx ry
[1,] 5 4
[2,] 3 2
[3,] 9 7
[4,] 10 1
# calcule la somme des paires concordantes :
nc <- sum(nc)
# calcule le nombre de paires non concordantes (nombre de comparaisons possibles - nbre de paires concordantes)
nd <- ncol(co)-nc
# le calcul du tau :
(nc-nd)/ncol(co)
[1] -0.06666667
droopy- Nombre de messages : 1156
Date d'inscription : 04/09/2009
Re: Chi-deux - R Commander
C'est bon merci j'ai toutes mes p-values !! Par contre, rassurez moi, il est bien obsolète de comparer 2 p-values entre elles ? Par exemple si p1 = 0.02 et p2=0.00001, la différence n'est pas plus significative pour la comparaison de p2 ?
Sandpiper- Nombre de messages : 46
Date d'inscription : 24/05/2013
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum