Automatiser des calculs de Ch2

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

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 13 Juil 2018, 14:33

La base : ce sont des comportements émotionnels d'un enfant (en ligne) dans différentes situations de jeu (en colonnes) avec soit l'assistante maternelle (AF) soit le père (P) soit la mère (M).

Voici la base :

structure(list(actions = c("eng_obj", "rec_sout_h", "rec_sout_f",
"rec_sout_e", "rec_sout_ex", "distr", "a_apais", "a_stim", "dc_corp",
"verb_p", "verb_m", "fuit", "exp_vis", "reev_cog", "eng_obj",
"rec_sout_h", "rec_sout_f", "rec_sout_e", "rec_sout_ex", "distr",
"a_apais", "a_stim", "dc_corp", "verb_p", "verb_m", "fuit", "exp_vis",
"reev_cog", "eng_obj", "rec_sout_h", "rec_sout_f", "rec_sout_e",
"rec_sout_ex", "distr", "a_apais", "a_stim", "dc_corp", "verb_p",
"verb_m", "fuit", "exp_vis", "reev_cog"), inter = c("AF", "AF",
"AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF", "AF",
"AF", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P",
"P", "P", "P", "M", "M", "M", "M", "M", "M", "M", "M", "M", "M",
"M", "M", "M", NA), tps = c(45L, 45L, 45L, 45L, 45L, 45L, 45L,
45L, 45L, 45L, 45L, 45L, 45L, 45L, 15L, 15L, 15L, 15L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L), t1_obs = c(55L,
0L, 2L, 0L, 2L, 1L, 6L, 16L, 3L, 39L, 2L, 0L, 3L, 7L, 41L, 6L,
0L, 1L, 3L, 24L, 6L, 53L, 3L, 33L, 8L, 11L, 19L, 12L, 41L, 6L,
0L, 1L, 3L, 24L, 6L, 53L, 3L, 33L, 8L, 11L, 19L, 12L), t1_jlib = c(13L,
0L, 1L, 0L, 0L, 1L, 3L, 3L, 0L, 9L, 0L, 0L, 4L, 7L, 30L, 1L,
0L, 0L, 0L, 9L, 1L, 4L, 2L, 9L, 4L, 0L, 12L, 6L, 23L, 0L, 0L,
0L, 0L, 4L, 6L, 7L, 1L, 5L, 3L, 0L, 27L, 3L), t1_rang = c(4L,
0L, 1L, 0L, 0L, 0L, 0L, 2L, 0L, 2L, 0L, 0L, 0L, 1L, 1L, 2L, 0L,
0L, 0L, 1L, 2L, 0L, 0L, 0L, 0L, 0L, 6L, 0L, 2L, 1L, 0L, 0L, 3L,
0L, 0L, 2L, 0L, 4L, 0L, 2L, 1L, 1L), t1_apr = c(7L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 30L, 0L, 0L, 0L, 1L,
2L, 0L, 2L, 0L, 9L, 1L, 0L, 2L, 5L, 18L, 1L, 0L, 0L, 1L, 3L,
3L, 4L, 1L, 3L, 1L, 5L, 7L, 2L), t2_obs = c(31L, 0L, 0L, 8L,
5L, 10L, 7L, 12L, 17L, 29L, 3L, 1L, 2L, 19L, 86L, 10L, 2L, 1L,
1L, 16L, 12L, 8L, 0L, 54L, 4L, 2L, 42L, 16L, 86L, 10L, 2L, 1L,
1L, 16L, 12L, 8L, 0L, 54L, 4L, 2L, 42L, 16L), t2_jlib = c(12L,
0L, 1L, 0L, 0L, 1L, 2L, 2L, 0L, 5L, 1L, 0L, 2L, 6L, 41L, 0L,
0L, 1L, 1L, 2L, 3L, 0L, 0L, 16L, 1L, 0L, 5L, 9L, 27L, 0L, 1L,
0L, 2L, 3L, 10L, 1L, 0L, 15L, 1L, 0L, 17L, 13L), t2_rang = c(2L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 6L, 0L, 0L,
0L, 2L, 1L, 0L, 4L, 0L, 2L, 2L, 0L, 4L, 3L, 5L, 0L, 0L, 0L, 0L,
2L, 0L, 0L, 0L, 1L, 0L, 0L, 2L, 0L), t2_apr = c(10L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 38L, 0L, 0L, 0L,
0L, 0L, 6L, 0L, 0L, 6L, 1L, 1L, 3L, 2L, 19L, 0L, 0L, 0L, 1L,
1L, 3L, 0L, 0L, 4L, 1L, 0L, 4L, 4L), t3_obs = c(33L, 0L, 4L,
1L, 6L, 6L, 12L, 24L, 14L, 29L, 9L, 0L, 3L, 14L, 63L, 2L, 11L,
0L, 6L, 24L, 7L, 8L, 0L, 60L, 4L, 1L, 34L, 38L, 63L, 2L, 11L,
0L, 6L, 24L, 7L, 8L, 0L, 60L, 4L, 1L, 34L, 38L), t3_jlib = c(19L,
0L, 0L, 0L, 0L, 0L, 4L, 0L, 0L, 7L, 1L, 0L, 2L, 5L, 41L, 3L,
0L, 0L, 4L, 0L, 8L, 2L, 0L, 18L, 0L, 0L, 3L, 10L, 34L, 0L, 1L,
0L, 0L, 1L, 7L, 1L, 0L, 15L, 7L, 0L, 11L, 14L), t3_rang = c(3L,
0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 4L, 2L, 2L,
2L, 0L, 4L, 2L, 0L, 0L, 5L, 1L, 0L, 1L, 4L, 2L, 0L, 0L, 1L, 1L,
3L, 0L, 1L, 0L, 2L, 0L, 0L, 2L, 1L), t3_apr = c(12L, 0L, 0L,
0L, 0L, 0L, 1L, 0L, 0L, 2L, 0L, 0L, 0L, 1L, 65L, 1L, 1L, 0L,
1L, 3L, 9L, 6L, 3L, 29L, 4L, 0L, 4L, 17L, 41L, 0L, 0L, 0L, 1L,
2L, 7L, 1L, 0L, 6L, 0L, 0L, 2L, 5L)), .Names = c("actions", "inter",
"tps", "t1_obs", "t1_jlib", "t1_rang", "t1_apr", "t2_obs", "t2_jlib",
"t2_rang", "t2_apr", "t3_obs", "t3_jlib", "t3_rang", "t3_apr"
), row.names = c(NA, -42L), class = c("tbl_df", "tbl", "data.frame"
), spec = structure(list(cols = structure(list(actions = structure(list(), class = c("collector_character",
"collector")), inter = structure(list(), class = c("collector_character",
"collector")), tps = structure(list(), class = c("collector_integer",
"collector")), t1_obs = structure(list(), class = c("collector_integer",
"collector")), t1_jlib = structure(list(), class = c("collector_integer",
"collector")), t1_rang = structure(list(), class = c("collector_integer",
"collector")), t1_apr = structure(list(), class = c("collector_integer",
"collector")), t2_obs = structure(list(), class = c("collector_integer",
"collector")), t2_jlib = structure(list(), class = c("collector_integer",
"collector")), t2_rang = structure(list(), class = c("collector_integer",
"collector")), t2_apr = structure(list(), class = c("collector_integer",
"collector")), t3_obs = structure(list(), class = c("collector_integer",
"collector")), t3_jlib = structure(list(), class = c("collector_integer",
"collector")), t3_rang = structure(list(), class = c("collector_integer",
"collector")), t3_apr = structure(list(), class = c("collector_integer",
"collector"))), .Names = c("actions", "inter", "tps", "t1_obs",
"t1_jlib", "t1_rang", "t1_apr", "t2_obs", "t2_jlib", "t2_rang",
"t2_apr", "t3_obs", "t3_jlib", "t3_rang", "t3_apr")), default = structure(list(), class = c("collector_guess",
"collector"))), .Names = c("cols", "default"), class = "col_spec"))

Lorsque j'écris les lignes pour faire ces calculs en boucle, cela donne ceci :

# Obs_AF/P
tab1 <- matrix (c(eth [1, 4], eth [1, 8], eth [1, 12], eth [15, 4], eth [15, 8], eth [15, 12]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# Obs_AF/M
tab1 <- matrix (c(eth [1, 4], eth [1, 8], eth [1, 12], eth [29, 4], eth [29, 8], eth [29, 12]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# jlib_AF/P
tab1 <- matrix (c(eth [1, 5], eth [1, 9], eth [1, 13], eth [15, 5], eth [15, 9], eth [15, 13]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# jlib_AF/M
tab1 <- matrix (c(eth [1, 5], eth [1, 9], eth [1, 13], eth [29, 5], eth [29, 9], eth [29, 13]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# rang_AF/P
tab1 <- matrix (c(eth [1, 6], eth [1, 10], eth [1, 14], eth [15, 6], eth [15, 10], eth [15, 14]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# rang_AF/M
tab1 <- matrix (c(eth [1, 6], eth [1, 10], eth [1, 14], eth [29, 6], eth [29, 10], eth [29, 14]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# apr_AF/P
tab1 <- matrix (c(eth [1, 7], eth [1, 11], eth [1, 15], eth [15, 7], eth [15, 11], eth [15, 15]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# apr_AF/M
tab1 <- matrix (c(eth [1, 7], eth [1, 11], eth [1, 15], eth [29, 7], eth [29, 11], eth [29, 15]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
###rec_sout-h
# Obs_AF/P
tab1 <- matrix (c(eth [2, 4], eth [2, 8], eth [2, 12], eth [16, 4], eth [16, 8], eth [16, 12]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# Obs_AF/M
tab1 <- matrix (c(eth [2, 4], eth [2, 8], eth [2, 12], eth [30, 4], eth [30, 8], eth [30, 12]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res
# jlib_AF/P
tab1 <- matrix (c(eth [2, 5], eth [2, 9], eth [2, 13], eth [16, 5], eth [16, 9], eth [16, 13]), 2, 3, byrow=T)
tab <- data.frame (tab1)
res <- chisq.test(tab)
res

etc...

Peut-on automatiser ces calculs fastidieux à écrire ?

Je vous remercie pour vos précieux conseils

Très cordialement

Alain Blanchet

Victor Cazalis
Messages : 68
Enregistré le : 24 Aoû 2014, 06:19

Re: Automatiser des calculs de Ch2

Messagepar Victor Cazalis » 13 Juil 2018, 18:44

Bonjour,

C'est possible mais un peu fastidieux de le boucler sans modifier la structure du tableau. Il faudrait utiliser un premier indice qui fasse varier les colonnes (obs, jlib...)

tab(c(eth[1, 3+i], eth[1, 7+1]...

Et un deuxième indice qui fasse varier les lignes pour changer les comparaisons. Ca donnerait donc quelque chose du style


Mais une solution qui me semble bien plus pratique serait de structurer le tableau pour avoir une combinaison action/variable par ligne et les temps et assistance en colonnes. Par exemple :

action Var AM_t1 AM_t2 AM_t3 P_t1 P_t2 P_t3 M_t1 M_t2 M_t3
fuit obs 1 2 1 45 43 34 ...

Ainsi il sera très facile de faire une boucle qui comparera toutes les AM à tous les P (un test par ligne en prenant les 3 colonnes AM et les trois colonnes P), une seconde boucle qui comparera AM et M et une troisième boucle qui comparera P et M.

Ca vous aide ? Si ce n'est pas assez clair, ou que ça ne suffit pas, je pourrai vous faire un petit code puisque vous nous avez fourni le tableau.

Bon week-end, Victor

Pierre-Yves Berrard
Messages : 483
Enregistré le : 12 Jan 2016, 23:30

Re: Automatiser des calculs de Ch2

Messagepar Pierre-Yves Berrard » 13 Juil 2018, 19:00

D'accord avec Victor sur la nécessité de remanier les données. Ça peut se faire assez vite avec les packages tidyr et dplyr :

Exemple :

Code : Tout sélectionner

library(tidyr)
library(dplyr)

eth2 <-
  eth %>%
  gather(var, valeur, -(1:3)) %>%
  separate(var, c("tmp", "categorie")) %>%
  spread(tmp, valeur)

Ensuite, un simple filtre peut être effectué pour retomber sur les matrices sur lesquelles appliquer le test du khi-2.
PY

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 14 Juil 2018, 12:20

Merci pour votre aide, j'ai maintenant un fichier qui va me faciliter la tâche,

Je réfléchis à "comment faire maintenant" (lorsque vous dites un simple filtre que voulez vous dire ?)

Si je n'y arrive pas, je vous redemanderai de l'aide

Merci à vous

Très cordialement
Alain Blanchet

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 14 Juil 2018, 12:57

Rebonjour,

J'ai donc fait la chose suivante :
library(tidyr)
library(dplyr)

eth2 <-
eth %>%
gather(var, valeur, -(1:3)) %>%
separate(var, c("tmp", "categorie")) %>%
spread(tmp, valeur)


tab <- filter(eth2[c(1,5),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(2,6),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(3,7),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(4,8),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(5,9),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(6,10),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(7,11),5:7])
res <- chisq.test(tab)
res
tab <- filter(eth2[c(8,12),5:7])
res <- chisq.test(tab)
res

etc..

Est-ce la bonne solution ?

Merci pour vos conseils éclairés

Bien à vous

Alain

Pierre-Yves Berrard
Messages : 483
Enregistré le : 12 Jan 2016, 23:30

Re: Automatiser des calculs de Ch2

Messagepar Pierre-Yves Berrard » 14 Juil 2018, 16:40

Je pensais à quelque chose du style :

Code : Tout sélectionner

combinaisons <- expand.grid(unique(eth2$actions), unique(eth2$categorie), c("P", "M"))

liste_matrices <- apply(
  combinaisons,
  1,
  function(x)
    eth2 %>%
    filter(actions == x[1], categorie == x[2], inter %in% c("AF", x[3])) %>%
    select(t1, t2, t3) %>%
    as.matrix()
)

# noms des croisements
liste_matrices  <-
  setNames(
    liste_matrices,
    apply(combinaisons, 1, paste, collapse = ".")
  )

lapply(liste_matrices, chisq.test)
PY

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 14 Juil 2018, 17:04

J'essaie, et je vous donne des nouvelles, en tout cas, c'est savant.

Merci à vous

AB

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 15 Juil 2018, 08:56

Ça marche très bien, sauf la dernière ligne :

lapply(liste_matrices, chisq.test)

Ce qui doit sans doute être dû au fait que de nombreuses tables contiennent très peu d'événements.

En tout cas, merci encore je vais pouvoir appliquer la méthode à 8 autres fichiers correspondant à 8 autres enfants en interaction avec des adultes.

Bien cordialement

AB

Pierre-Yves Berrard
Messages : 483
Enregistré le : 12 Jan 2016, 23:30

Re: Automatiser des calculs de Ch2

Messagepar Pierre-Yves Berrard » 15 Juil 2018, 11:12

Alain Blanchet a écrit :Ce qui doit sans doute être dû au fait que de nombreuses tables contiennent très peu d'événements.

Très certainement.
PY

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 15 Juil 2018, 14:18

J'ai un nouveau problème, lié à mon incompétence dans le programme que vous avez proposé et qui a fort bien marché. Mais des erreurs dans le fichier m'ont amené à créer un nouveau fichier, mais du fait d'un ordre différents, le listage des matrices ne se fait plus et je ne sais pas comment modifier votre programme pour qu'à nouveau cela fonctionne.

Voici le nouveau fichier aux normes que vous avez souhaitez:
structure(list(actions = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L,
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L,
9L, 9L, 9L, 9L, 9L, 9L, 10L, 10L, 10L, 10L, 10L, 10L, 10L, 10L,
10L, 10L, 10L, 10L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 11L,
11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L,
12L, 12L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L, 13L,
13L, 14L, 14L, 14L, 14L, 14L, 14L, 14L, 14L, 14L, 14L, 14L, 14L
), .Label = c("a_apais", "a_stim", "dc_corp", "distr", "eng_obj",
"exp_vis", "fuit", "rec_sout_e", "rec_sout_ex", "rec_sout_f",
"rec_sout_h", "reev_cog", "verb_m", "verb_p"), class = "factor"),
inter = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L,
3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("AF", "M", "P"
), class = "factor"), tps = c(45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L, 45L, 45L, 45L, 45L, 15L, 15L,
15L, 15L, 15L, 15L, 15L, 15L), categorie = c("apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang", "apr", "jlib",
"obs", "rang", "apr", "jlib", "obs", "rang"), t1 = c(1L,
8L, 17L, 0L, 3L, 6L, 6L, 0L, 0L, 1L, 6L, 2L, 0L, 8L, 49L,
6L, 4L, 7L, 53L, 2L, 2L, 4L, 53L, 0L, 0L, 0L, 8L, 0L, 1L,
1L, 3L, 0L, 0L, 2L, 3L, 0L, 1L, 2L, 4L, 1L, 3L, 4L, 24L,
0L, 2L, 9L, 24L, 1L, 20L, 38L, 164L, 12L, 18L, 23L, 41L,
2L, 30L, 30L, 41L, 1L, 2L, 13L, 10L, 0L, 7L, 27L, 19L, 1L,
2L, 12L, 19L, 6L, 0L, 0L, 1L, 0L, 5L, 0L, 11L, 2L, 0L, 0L,
11L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L,
0L, 0L, 6L, 0L, 1L, 0L, 3L, 3L, 1L, 0L, 3L, 0L, 1L, 2L, 7L,
2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L,
6L, 1L, 0L, 1L, 6L, 2L, 2L, 20L, 20L, 2L, 2L, 3L, 12L, 1L,
5L, 6L, 12L, 0L, 0L, 1L, 7L, 0L, 1L, 3L, 8L, 0L, 1L, 4L,
8L, 0L, 2L, 27L, 118L, 5L, 3L, 5L, 33L, 4L, 9L, 9L, 33L,
0L), t2 = c(1L, 6L, 22L, 1L, 3L, 10L, 12L, 0L, 6L, 3L, 12L,
0L, 1L, 5L, 37L, 0L, 0L, 1L, 8L, 0L, 0L, 0L, 8L, 4L, 0L,
0L, 50L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 31L,
0L, 1L, 3L, 16L, 2L, 0L, 2L, 16L, 1L, 30L, 35L, 94L, 6L,
19L, 27L, 86L, 5L, 38L, 41L, 86L, 6L, 0L, 7L, 5L, 2L, 4L,
17L, 42L, 2L, 3L, 5L, 42L, 4L, 0L, 0L, 2L, 0L, 0L, 0L, 2L,
0L, 1L, 0L, 2L, 0L, 0L, 0L, 24L, 0L, 0L, 0L, 1L, 0L, 0L,
1L, 1L, 0L, 0L, 1L, 16L, 0L, 1L, 2L, 1L, 0L, 0L, 1L, 1L,
2L, 0L, 4L, 1L, 0L, 0L, 1L, 2L, 0L, 0L, 0L, 2L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 10L, 0L, 0L, 0L, 10L, 0L, 1L, 18L, 58L, 1L,
4L, 13L, 16L, 0L, 2L, 9L, 16L, 3L, 0L, 2L, 10L, 0L, 1L, 1L,
4L, 0L, 1L, 1L, 4L, 2L, 2L, 15L, 86L, 1L, 4L, 15L, 54L, 1L,
6L, 16L, 54L, 2L), t3 = c(3L, 11L, 35L, 1L, 7L, 7L, 7L, 0L,
9L, 8L, 7L, 2L, 1L, 1L, 71L, 1L, 1L, 1L, 8L, 1L, 6L, 2L,
8L, 0L, 0L, 0L, 41L, 0L, 0L, 0L, 0L, 0L, 3L, 0L, 0L, 0L,
1L, 1L, 19L, 0L, 2L, 1L, 24L, 3L, 3L, 0L, 24L, 4L, 37L, 57L,
98L, 8L, 41L, 34L, 63L, 2L, 65L, 41L, 63L, 4L, 1L, 5L, 8L,
0L, 2L, 11L, 34L, 2L, 4L, 3L, 34L, 1L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 0L, 1L,
0L, 0L, 0L, 2L, 1L, 1L, 18L, 3L, 1L, 0L, 6L, 1L, 1L, 4L,
6L, 0L, 1L, 0L, 11L, 0L, 0L, 1L, 11L, 0L, 1L, 0L, 11L, 2L,
0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 1L, 3L, 2L, 2L, 3L, 14L,
43L, 2L, 5L, 14L, 38L, 1L, 17L, 10L, 38L, 4L, 0L, 3L, 26L,
0L, 0L, 7L, 4L, 0L, 4L, 0L, 4L, 1L, 5L, 20L, 88L, 2L, 6L,
15L, 60L, 2L, 29L, 18L, 60L, 5L)), .Names = c("actions",
"inter", "tps", "categorie", "t1", "t2", "t3"), class = "data.frame", row.names = c(NA,
-168L))

Désolé de prendre de votre temps,

Encore merci

AB

Pierre-Yves Berrard
Messages : 483
Enregistré le : 12 Jan 2016, 23:30

Re: Automatiser des calculs de Ch2

Messagepar Pierre-Yves Berrard » 16 Juil 2018, 07:03

Essayez d'ajouter list(), pour prévenir une simplification de l'objet par apply :

Code : Tout sélectionner

liste_matrices <- apply(
  combinaisons,
  1,
  function(x)
    eth2 %>%
    filter(actions == x[1], categorie == x[2], inter %in% c("AF", x[3])) %>%
    select(t1, t2, t3) %>%
    as.matrix() %>%
    list()
)
PY

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 16 Juil 2018, 07:24

Merci, tout marche très bien

Très cordialement

AB

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

Re: Automatiser des calculs de Ch2

Messagepar Logez Maxime » 16 Juil 2018, 08:40

Bonjour,

Une autre possibilité avec la fonction gather du package tidyr :

Code : Tout sélectionner

tmp <- gather(eth2, "vars", "values", -(1:4))
xtabs(values ~ inter + vars + categorie + actions, tmp)
Si les levels des différents facteurs correspondent aux différentes modalités que tu souhaites croiser alors ça sera bon.

Bien cordialement,
Maxime

Alain Blanchet
Messages : 68
Enregistré le : 21 Mai 2013, 09:49

Re: Automatiser des calculs de Ch2

Messagepar Alain Blanchet » 16 Juil 2018, 11:48

La solution est bonne aussi, elle a l'avantage de préciser quelles sont les facteurs impliqués.

Merci bien

AB


Retourner vers « Questions en cours »

Qui est en ligne

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