Grouper des donnée en leur attribuant une lettre

Bonjour!

Je galère depuis un bon moment sur ce problème...

Je desire trouver une fonction ou écrire une macro afin de grouper les donnée d'un tableau en fonction du résultat d'une ANOVA qui teste si il y a une différence significative entre chaque echantillons. J'aimerais que la fonction classe la liste de ces échantillons en groupe si il sont statistiquement semblable en leur attribuant une lettre pour chaque groupe.

je joint à ce post un fichier avec un exemple du tableau que l'ANOVA me retourne et de ce que je rêverais qu'il me retourne.

Un grand merci d'avance à celui qui m'aidera à sortir la tête de l'eau!

14workbook1.xlsx (34.96 Ko)

bonjour, bonsoir,

je t'ai créé un fonction classe avec 2 paramètres(valeur, range) ou valeur est la valeur pour laquelle il faut déterminer la lettre groupe et range est le tableau anova, sans la ligne de titre.

regarde comment l'utiliser dans le classeur ci-joint en B16:B21.

23workbook1.xlsm (15.54 Ko)

Hello!

Tout d'abord! Merci beaucoup de ton aide!

Ca se rapproche énormément de ce que j'aimerais faire!

le seul problème que je vois et c'est ma faute de ne pas l'avoir expliquer au départ, c'est qui faudrait laisser la possibilité à un échantillon d'appartenir a plusieurs groupe

exemple: si voiture-train = no, train-bateau = no, mais voiture-bateau = yes , alors : voiture = A, bateau = B et train = AB

Maintenant je sais pas si c'est faisable.

hello,

désolé, je n'ai rien compris. et ton exemple est un peu sommaire pour que je puisse en déduire la règle à appliquer.

il faudrait que, les "échantillons" puisse appartenir à plusieurs groupe (si un échantillon est semblable à un du groupe A et autre du groupe B, qu'il soit alors nomé AB. je sais pas si c'est assez clair je suis pas sur mais il me semble que dans ta fonction il y a une boucle qui s'arrête lorsqu'elle trouve une condition. A ce moment elle devrait executer ce qu'elle doit faire et ensuite continuer pour voir s'il n'y a pas dans le tableau une autre cas qui remplis cette meme condition. Je sais pas si ca t'aide?

rebonsoir,

sur base du fichier que tu as donné et des résultats que tu attendais, j'en ai déduit que ce qui caractérise une classe est la combinaison de yes-no sur une ligne, chaque combinaison différente trouvée reçoit une lettre unique. c'est ce qui est programmé dans la fonction.

pour une adaptation de la fonction je dois comprendre, ce qui caractérise A, B AB plutôt que C ou D, des tes explications ni de tes exemples je ne parviens à déduire la règle.

pourrais-tu par exemple indiquer les valeurs attendues pour l'exemple initial que tu as donné ?

Je t'ai mis ici plusieurs exemples avec à chaque fois en rouge ce que la fonction devrait retourner

bonsoir,

désolé mais mon QI de 87 ne me permet pas de déduire la règle qui se cache derrière le résultat attendu

donc merci de m'expliquer ce qui détermine A, B, C et D.

le but c'est de grouper les échantillons statistiquement semblables et de les "numéroté" de A à Z. le tableau compare chaque échantillons l'un avec l'autre si il sont différent il y a "yes" à l'intersection si il sont semblable il y a "no". Autrement dis, si l'échantillon1 est pareil que l'échantillon2 alors il les groupes sous la lettre A mais si l'échantillon3 et pareil à l'échantillon2 mais différent de l'échantillon1 alors l'échantillon1 prend la lettre "a" l'échantillon2 prend la valeur "ab" et l'échantillon3 prend la valeur "b" et ainsi de suite.

Ces lettres sont au final ce qu'on vois typiquement au dessus de chaque barre sur un graphique ou on veux y représenter les résultats d'un ANOVA

je sais pas si ca aide mais la fonction dans "R" qui fait ca est la suivante mais comme j'ai pas réussis pas a déchiffrer ce code je peux pas le garantir...

> order

function (..., na.last = TRUE, decreasing = FALSE)

{

z <- list(...)

if (any(unlist(lapply(z, is.object)))) {

z <- lapply(z, function(x) if (is.object(x))

xtfrm(x)

else x)

if (!is.na(na.last))

return(do.call("order", c(z, na.last = na.last, decreasing = decreasing)))

}

else if (!is.na(na.last))

return(.Internal(order(na.last, decreasing, ...)))

if (any(diff(sapply(z, length)) != 0L))

stop("argument lengths differ")

ans <- sapply(z, is.na)

if (is.list(ans))

return(integer(0L))

ok <- if (is.matrix(ans))

!apply(ans, 1, any)

else !any(ans)

if (all(!ok))

return(integer(0L))

z[[1L]][!ok] <- NA

ans <- do.call("order", c(z, decreasing = decreasing))

keep <- seq_along(ok)[ok]

ans[ans %in% keep]

}

bonjour,

désolé pour cette réaction tardive, pas d'accès au forum pendant mes vacances.

voici une nouvelle version, basée sur ce que j'ai compris de tes spécifications.

les résultats ne correspondent pas tout à fait aux exemples donnés, mais je pense que les résultats sont corrects.

10anova.xlsm (22.72 Ko)
Rechercher des sujets similaires à "grouper donnee leur attribuant lettre"