[RESOLU] valeurs aberrantes avec le test de Dixon

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

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

[RESOLU] valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 16 Avr 2019, 17:31

Bonjour,
Désolé de vous ennuyer avec ça. Mais je ne sais toujours pas bien utiliser R.

Je souhaite récupérer la valeur aberrante lors d'un test de Dixon. La valeur 10.89611 dans l'exemple ci-dessous (ou bien sa position dans le vecteur)
>dixon.test(Rs18,type="10")

Dixon test for outliers

data: Rs18
Q.1er passage = 0.99619, p-value = 0.006349
alternative hypothesis: highest value 10.89611 is an outlier

Je récupére bien la p value avec la cde

> dixon.test(Rs18,type="10")[[3]]
1
0.006349133

avec dixon.test(Rs18,type="10")[[2]] je récupère "highest value 10.89611 is an outlier" et pas la valeur de cette valeur aberrante.

Merci de votre aide

Cordialement
Michel

Eric Wajnberg
Messages : 656
Enregistré le : 11 Aoû 2008, 15:37
Contact :

Re: valeurs aberrantes avec le test de Dixon

Messagepar Eric Wajnberg » 17 Avr 2019, 09:26

Code : Tout sélectionner

> dixon.test
Erreur : objet 'dixon.test' introuvable

Votre exemple n'est pas reproductible.

Eric.

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

Re: valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 17 Avr 2019, 09:39

bonjour Eric

Désolé, je pense qu'il manque,dans mon exemple, l'élément : library(outliers). Le dixon.test() est dans cette bibliothèque.

Je cherche toujours la manière de récupérer la valeur aberrante (en tant que valeur) annoncée par le test de dixon.

cordialement

Michel

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

Re: valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 17 Avr 2019, 16:10

pour faire suite à mon précédent commentaire
on peut prendre comme exemple.
Rs18<-c(10.90,10.46,10.46)
pour info j'ai 2250 valeurs à examiner par 3 (750 points mesurés 3 fois)

cordialement

Michel

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

Re: valeurs aberrantes avec le test de Dixon

Messagepar Pierre-Yves Berrard » 17 Avr 2019, 16:18

Bonjour,

highest value 10.89611 is an outlier

Je ne connais pas le package outliers, mais comme l'indique le message ci-dessus, 10.89611 est la plus grande valeur du jeu de données testé.

On peut donc la récupérer par max(Rs18).

Pour s'en convaincre, essayer de remplacer 10.9 par un nombre plus grand dans Rs18.
PY

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

Re: valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 17 Avr 2019, 16:39

Bonsoir,

Bien merci, j'avais pensé à trier le vecteur avec sort(vecteur) mais utiliser max ou min est bien mieux.
J'ai encore un point à éclaircir : le test de dixon donne the highest value ou (exclusif) the lowest value, comment choisis-je le min ou le max des valeurs du vecteur?
Je pourrai peut-être m'en sortir en prenant la première lettre de l'"alternative hypothesis".
Mais j'avais pensé qu'il était possible de récupérer la valeur "facilement" comme pour la p.value : dixon.test(Rs18,type="10")[[3]]
(pour info, si p.value<-0.05, je sors la valeur de la moyenne).

Je cherche une solution élégante dans l'esprit de R (comme dans beaucoup de tests) : le nom du test suivi de l'"adresse" de la valeur.

merci de votre aide

Michel

Mickael Canouil
Messages : 555
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: valeurs aberrantes avec le test de Dixon

Messagepar Mickael Canouil » 18 Avr 2019, 08:18

Bonjour,

si la fonction ne retourne pas la valeur que vous cherchez, la seule solution est de créer une version modifiée de la fonction.
Il vous suffit de récupérer le code source: https://cran.r-project.org/package=outliers

D'après la documentation, la fonction retourne:

Code : Tout sélectionner

Value
A list with class htest containing the following components:

statistic      the value of Dixon Q-statistic.
p.value        the p-value for the test.
alternative    a character string describing the alternative hypothesis.
method         a character string indicating what type of test was performed.
data.name      name of the data argument.


Cordialement,
Mickaël

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

Re: valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 18 Avr 2019, 10:31

bonjour
merci pour cette réponse.
je pense qu'il va me falloir encore un bout de temps avant d'aller modifier des codes sources.
Donc pour l'instant je me contenterai d'une condition sur le premier mot de l'hypothèse alternative, en plus de celle sur la p.value.

merci à tous

Michel

Mickael Canouil
Messages : 555
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: [RESOLU] valeurs aberrantes avec le test de Dixon

Messagepar Mickael Canouil » 18 Avr 2019, 11:29

Modifier une fonction n'est pas plus difficile que le reste de R.

Si vous télécharger l'archive tar.gz, dans le répertoire ./R/, vous avez dixon.test.R

Le message que vous avez évoqué est présent:
à la ligne 26:

Code : Tout sélectionner

alt = paste("lowest value",x[1],"is an outlier");

à la ligne 41

Code : Tout sélectionner

alt = paste("highest value",x[n],"is an outlier");


vous voulez ce fameux "x[n]" ou "x[1]"

ligne 63-66, un objet de type list (puis classe S3 "htest") est créé.

Code : Tout sélectionner

RVAL <- list(statistic = c(Q = Q), alternative = alt, p.value = pval, method = "Dixon test for outliers",
    data.name = DNAME)
class(RVAL) <- "htest"
return(RVAL)


Il suffit de changer ça pour inclure la valeur, par exemple:

Code : Tout sélectionner

RVAL <- list(
  statistic = c(Q = Q),
  alternative = alt,
  p.value = pval,
  method = "Dixon test for outliers",
  data.name = DNAME,
  outlier_value = if (grepl("highest", alt)) x[n] else x[1]
)
class(RVAL) <- "htest"


ou encore extraire la valeur directement depuis le résultat de la fonction actuelle via une expression régulière:

Code : Tout sélectionner

res_dixon <- list(
  statistic = c(Q = NA),
  alternative = paste("highest value", 123, "is an outlier"),
  p.value = NA,
  method = "Dixon test for outliers",
  data.name = NA
)
class(res_dixon) <- "htest"

as.numeric(gsub("[A-Za-z ]+([0-9.]+)[A-Za-z ]+$", "\\1", res_dixon[["alternative"]]))
#> [1] 123
Mickaël

Michel Carpentier
Messages : 74
Enregistré le : 04 Fév 2018, 13:49

Re: [RESOLU] valeurs aberrantes avec le test de Dixon

Messagepar Michel Carpentier » 18 Avr 2019, 15:00

merci Mickael.

Il faut que je passe du temps sur ta proposition. Je pense que cela me sera d'une grande utilité pour les autres fonctions. Je le ferai...

cordialement

Michel


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Bing [Bot] et 1 invité