Question

Je l'ensemble de données suivantes que je suis en train de comploter avec ggplot2, il est une série chronologique de trois expériences A1, B1 et C1 et chaque expérience a eu trois répétitions.

Je suis en train d'ajouter une stat qui détecte et supprime les valeurs aberrantes avant de retourner une lisse (moyenne et la variance?). J'ai écrit ma propre fonction des valeurs aberrantes (non représenté), mais je me attendre il y a déjà une fonction pour ce faire, je viens pas trouvé.

Je l'ai regardé stat_sum_df ( « median_hilow », geom = « lisse ») à partir de quelques exemples dans le livre de ggplot2, mais je ne comprenais pas l'aide de doc Hmisc pour voir si elle supprime les valeurs aberrantes ou non.

Y at-il une fonction pour supprimer les valeurs aberrantes comme celui-ci dans ggplot, ou si ce que je Modifier mon code ci dessous pour ajouter ma propre fonction?

EDIT: Je viens de voir ce ( Comment utiliser les tests aberrants dans code R ) et de l'avis que Hadley recommande d'utiliser une méthode robuste comme RLM. Je complotais des courbes de croissance bactérienne, donc je ne pense pas un modèle linéaire est le meilleur, mais des conseils sur d'autres modèles ou en utilisant ou en utilisant des modèles robustes dans cette situation serait appréciée.

library (ggplot2)  

data = data.frame (day = c(1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7,1,3,5,7), od = 
c(
0.1,1.0,0.5,0.7
,0.13,0.33,0.54,0.76
,0.1,0.35,0.54,0.73
,1.3,1.5,1.75,1.7
,1.3,1.3,1.0,1.6
,1.7,1.6,1.75,1.7
,2.1,2.3,2.5,2.7
,2.5,2.6,2.6,2.8
,2.3,2.5,2.8,3.8), 
series_id = c(
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"A1", "A1", "A1","A1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"B1", "B1","B1", "B1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1",
"C1","C1", "C1", "C1"),
replicate = c(
"A1.1","A1.1","A1.1","A1.1",
"A1.2","A1.2","A1.2","A1.2",
"A1.3","A1.3","A1.3","A1.3",
"B1.1","B1.1","B1.1","B1.1",
"B1.2","B1.2","B1.2","B1.2",
"B1.3","B1.3","B1.3","B1.3",
"C1.1","C1.1","C1.1","C1.1",
"C1.2","C1.2","C1.2","C1.2",
"C1.3","C1.3","C1.3","C1.3"))

> data
   day   od series_id replicate
1    1 0.10        A1      A1.1
2    3 1.00        A1      A1.1
3    5 0.50        A1      A1.1
4    7 0.70        A1      A1.1
5    1 0.13        A1      A1.2
6    3 0.33        A1      A1.2
7    5 0.54        A1      A1.2
8    7 0.76        A1      A1.2
9    1 0.10        A1      A1.3
10   3 0.35        A1      A1.3
11   5 0.54        A1      A1.3
12   7 0.73        A1      A1.3
13   1 1.30        B1      B1.1
... etc...

est ce que j'ai jusqu'à présent et travaille bien, mais les valeurs aberrantes ne sont pas supprimés:

r <- ggplot(data = data, aes(x = day, y = od))
r + geom_point(aes(group = replicate, color = series_id)) + # add points
   geom_line(aes(group = replicate, color = series_id)) + # add lines
   geom_smooth(aes(group = series_id))  # add smoother, average of each replicate

EDIT:. Je viens d'ajouter deux graphiques ci-dessous montrant des exemples des problèmes de valeurs aberrantes que je vais avoir à partir des données réelles plutôt que les exemples données ci-dessus

Les premières parcelles montre des séries p26s4 et autour du jour 32 sont allés quelque chose vraiment bizarre dans deux des répétitions, montrant 2 valeurs aberrantes.

La deuxième série parcelles montre p22s5 et le jour 18, quelque chose de bizarre avec la allé lire ce jour-là, l'erreur de la machine probable que je pense.

En ce moment je suis les yeux agglomérer les données, pour vérifier que les courbes de croissance semblent OK. Après avoir pris les conseils de Hadley et la famille = réglage « symétrique », je suis convaincu que le loess lisse fait un travail décent d'ignorer les valeurs aberrantes.

«

@ Peter / @ hadley, la prochaine chose que je voudrais faire est d'essayer de s'adapter à une logistique, Gompertz ou courbe de croissance de richard à ces données au lieu d'un loess et de calculer le taux de croissance dans la phase exponentielle. Finalement, je prévois d'utiliser le paquet Grofit dans R ( http: // Cran .R-project.org / web / packages / Grofit / index.html ), mais pour l'instant je voudrais tracer ces manuellement à l'aide ggplot2 si possible. Si vous avez des pointeurs alors il serait très apprécié.

Était-ce utile?

La solution

Avez-vous essayé l'argument family = "symmetric" à geom_smooth (qui à son tour se passer à loess)? Cela rendra le loess résistant en douceur aux valeurs aberrantes.

Cependant, en regardant vos données, pourquoi pensez-vous un ajustement linéaire ne suffit pas? Vous avez seulement 4 x valeurs, et il ne semble certainement pas être des preuves solides pour un départ de la linéarité.

Autres conseils

D'abord, je ne suis pas sûr une « aberrante » est même défini correctement sur ces petites données.

Deuxièmement, vous auriez alors décider ce que vous entendez par « aberrante » qui est, est l'un des médicaments, l'un des réplicats, ou l'un des points de temps?

Comme le note Hadley, il y a peu de signes d'écart par rapport à la linéarité.

Enfin, je pense qu'une partie du point d'utiliser une plus lisse est qu'il traite bien avec des valeurs aberrantes, pour autant qu'il subsiste suffisamment de données. Mais vous avez très peu.

Alors, je dois demander exactement pourquoi vous voulez supprimer les valeurs aberrantes. Autrement dit, qu'est-ce que vous allez faire avec ces données (en plus de faire de belles parcelles)?

J'espère que cette aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top