Test de normalité par sous-population en masse pour plusieurs variables

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

Véronique Darmendrail
Messages : 37
Enregistré le : 27 Fév 2020, 10:49

Test de normalité par sous-population en masse pour plusieurs variables

Messagepar Véronique Darmendrail » 30 Mar 2023, 13:34

Bonjour

Grâce à cette page, j'ai trouvé comment faire un tableau présentant pour plusieurs variables les test-t (Welch) de différences de moyennes et les tests de Wilcoxon : https://stackoverflow.com/questions/25383570/apply-t-test-and-wilcoxon-test-on-several-variables-in-a-table

Code : Tout sélectionner

## using am as the grouping variable
data.frame(stats_t = apply(subset(mtcars, select=-am), 2, function(y) t.test(y ~ mtcars$am)$statistic),
           p_t     = apply(subset(mtcars, select=-am), 2, function(y) t.test(y ~ mtcars$am)$p.value),
           stats_w = apply(subset(mtcars, select=-am), 2, function(y) wilcox.test(y ~ mtcars$am, exact = FALSE)$statistic),
           p_w     = apply(subset(mtcars, select=-am), 2, function(y) wilcox.test(y ~ mtcars$am, exact = FALSE)$p.value)
)


Maintenant j'aimerais me faire un tableau avec les tests de normalité sur des variables quantitatives par sous-population de mtcars$am

J'arrive à le faire pour une variable mais pas à lancer le travail pour toutes les variables

Code : Tout sélectionner

tapply(mtcars$mpg, INDEX = mtcars$am,
FUN = shapiro.test)


Est-ce que ce serait possible de faire un data.frame joli avec 1 colonne du nom de variables, 1 colonne de la stat de Shapiro du 1er groupe, 1 colonne sa p-value, 1 colonne de la stat de Shapiro pour le 2e groupe, et une colonne pour la p-value du 2è groupe ?


Dans la même lignée j'aimerais faire des tests de différence de proportions/contingence

Code : Tout sélectionner

mtcars$vs2 <- mtcars$vs
contin.vs <- table(mtcars$vs, mtcars$am)

contin.vs
prop.table(contin.vs, margin = 1)
fisher.test(contin.vs)

# mais je n'arrive pas à généraliser pour la suite :

apply(subset( mtcars[,c("vs","vs2")]), 2, function(y) fisher.test(table(mtcars$am, y)$estimate)
      apply(subset( mtcars[,c("vs","vs2")]), 2, function(y) fisher.test(table(mtcars$am, y)
     
tab.fishertest <- data.frame(
    oddsratio = apply(subset(mtcars[, c("vs","vs2")]), 2, function(y)
    fisher.test(table(mtcars$am, y)$estimate), # le 2 veut dire à appliquer sur les colonnes
    p_t     = apply(subset(mtcars[, c("vs","vs2" )]), 2, function(y)
      fisher.test(table(mtcars$am, y)$p.value))
    )
   


Merci d'avance pour votre aide

Véronique Darmendrail
Messages : 37
Enregistré le : 27 Fév 2020, 10:49

Re: Test de normalité par sous-population en masse pour plusieurs variables

Messagepar Véronique Darmendrail » 31 Mar 2023, 11:46

Je me réponds à moi même, mais j'ai fini par trouver :

Code : Tout sélectionner

    sp <- split(mtcars, mtcars$am)
    sp1 <- sp[[1]]
    sp2 <- sp[[2]]
    apply(subset(sp1, select=-am), MARGIN =2, FUN=shapiro.test)
    apply(subset(sp2, select=-am), MARGIN =2, FUN=shapiro.test)
    apply(subset(sp1, select=-am), 2, function(y) shapiro.test(y)$statistic)
   
   
    tab.shapiro <- data.frame(
      stats_t_shapiro_am.0 = apply(subset(sp1, select=-am), 2, function(y) shapiro.test(y)$statistic), # le 2 veut dire à appliquer sur les colonnes
      p_shapiro_am.0     = apply(subset(sp1, select=-am), 2, function(y) shapiro.test(y)$p.value),
      stats_t_shapiro_am.1 = apply(subset(sp2, select=-am), 2, function(y) shapiro.test(y)$statistic),
      p_shapiro_am.1     = apply(subset(sp2, select=-am), 2, function(y) shapiro.test(y)$p.value)
    )
    tab.shapiro


Pour les test de différence de contingence, je me suis rendue compte que les tests de différence que j'utilisais déjà de la fonction summarize du package paper pour les variables facteurs donne justement les fisher.exact dont j'ai besoin. Je n'ai donc pas besoin de les calculer à part.


Retourner vers « Questions en cours »

Qui est en ligne

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