perMANOVA en python ou en R

a marqué ce sujet comme résolu.

Bonjour,

J’ai un petit problème sur lequel je penche depuis le début de la semaine.

J’ai un jeux de données :

Une colonne « Parcelle » qui correspond à l’objet étudié : une parcelle de terrain qui peut avoir deux état : "C" (cultivée) ou "P" (prairie)

Ensuite une colonne « Nombre » qui indique le nombre de vers de terre collectés.

Et enfin une colonne « Stade » qui contient l’état des vers de terre "AD" ou "JV" pour adulte ou juvénile.

L’idée est de déterminer si l’un des deux types fait un meilleurs bio-indicateur que l’autre (ou que l’ensemble) pour déterminer le type de parcelle.

Le test de Shapiro sur la colonne Nombre nous indique que les données ne suivent pas une distribution normale et il n’est pas possible de les normaliser avec l’algo BoxCox. Il faut donc faire un test non paramétrique.

J’ai pu lancer sous R un test de Kruskal-Wallis pour vérifier qu’il y a déjà une différence de population collectée (sans tenir compte du stade) entre les deux types de parcelles. J’ai refais le même test avec une Permanova à un facteur (la parcelle).

kruskal_data <- kruskal.test(Nombre~Parcelle, data=data)
kruskal_data$p.value # H0 rejected => significant differences

distance_data <- DistContinuous(data$Nombre, coef="Pythagorean")
permanova_data_parcelle <- PERMANOVA(Distance=distance_data,
                                     group=factor(data$Parcelle))
summary(permanova_data_parcelle) # H0 rejected => significant differences

Ce qui m’amène à ma première question : est-ce que ces deux tests mesurent bien exactement la même chose ? C’est juste la puissance du test qui diffère ? Ou est-ce que je me trompe et dans ce cas ma méthodologie est mauvaise ?

Ensuite je veux déterminer si l’un des deux stades et plus discriminant que l’autre (ou que l’ensemble).

Il me semble que ce que je dois faire, c’est une Permanova à deux facteurs. Est-ce qu’il faut regarder les deux facteurs individuellement, ou est-ce que je dois regarder la combinaison des deux ? Dis autrement : est-ce que j’utilise 'Nombre ~ C(Parcelle) + C(Stade)' ou 'Nombre ~ C(Parcelle:Stade)' ?

Enfin dernière question, je n’arrive pas à trouver la syntaxe pour effectuer cette Permanova, ni en R, ni en Python.

Sur R, j’ai un truc du style :

library(PERMANOVA)

[…] # import et mise en forme des données dans le tableau data…

contrast_data <- ConstructContrasts(data[c("Parcelle", "Stade")], 2) # Doesn’t work !!!!
permanova_data <- PERMANOVA(Distance=distance_data,
                            group=factor(data$Parcelle),
                            C=contrast_data)
summary(permanova_data) # H0 rejected => significant differences

La documentation de R est comme toujours, assez absconse.

Sur Python :

import scipy as sp
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

[…] # import et mise en forme des données dans le tableau data…

data_parcelle = data[["Parcelle", "Nombre"]]
data_stade = data[["Stade", "Nombre"]]


def statistic(parcelle, stade):
    permuted_data = data
    permuted_data["Parcelle"] = parcelle
    permuted_data["Stade"] = stade
    model = ols('Nombre ~ C(Parcelle) + C(Stade)', data=permuted_data).fit()
    return sm.stats.anova_lm(model, typ=2)


print(sp.stats.permutation_test(data=(data_parcelle, data_stade),
                                statistic=statistic))

j’ai aboutit à ce truc farfelu après avoir compris après plusieurs heures de recherche que l’argument data attendait deux jeux de données et non un seul, ce qui me fait me demander si je ne fait pas fausse route.

Donc si une âme charitable et surtout bien calée en statistiques réussi à comprendre mieux que moi ce que je fais, qu’elle n’hésite pas à m’aiguiller dans la bonne direction.

En vous remerciant d’avance.

Je poste la réponse si jamais ça peut servir à quelqu’un:

Sous R, il faut utiliser le package vegan. La fonction est adonis2(distance_matrix, data=df). C’est sûr qu’avec un nom pareil, on risque pas de la trouver dans la doc. Et la matrice des distance se calcule avec vegdist

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte