Est-ce que vous aviez en tête?
centroids <- aggregate(cbind(x,y)~class,df,mean)
ggplot(df,aes(x,y,color=factor(class))) +
geom_point(size=3)+ geom_point(data=centroids,size=5)
Cela crée une trame de données séparée, centroids
, avec des colonnes x
, y
et class
où x
et y
sont les valeurs moyennes par classe. Ensuite, nous ajoutons une deuxième couche de géométrie de point en utilisant centroid
comme jeu de données.
Ceci est une version légèrement plus intéressante, utile dans l'analyse de cluster.
gg <- merge(df,aggregate(cbind(mean.x=x,mean.y=y)~class,df,mean),by="class")
ggplot(gg, aes(x,y,color=factor(class)))+geom_point(size=3)+
geom_point(aes(x=mean.x,y=mean.y),size=5)+
geom_segment(aes(x=mean.x, y=mean.y, xend=x, yend=y))
EDIT Réponse au commentaire de l'OP.
Des barres d'erreur verticales et horizontales peuvent être ajoutées en utilisant geom_errorbar(...)
et geom_errorbarh(...)
.
centroids <- aggregate(cbind(x,y)~class,df,mean)
f <- function(z)sd(z)/sqrt(length(z)) # function to calculate std.err
se <- aggregate(cbind(se.x=x,se.y=y)~class,df,f)
centroids <- merge(centroids,se, by="class") # add std.err column to centroids
ggplot(gg, aes(x,y,color=factor(class)))+
geom_point(size=3)+
geom_point(data=centroids, size=5)+
geom_errorbar(data=centroids,aes(ymin=y-se.y,ymax=y+se.y),width=0.1)+
geom_errorbarh(data=centroids,aes(xmin=x-se.x,xmax=x+se.x),height=0.1)
Si vous voulez calculer, par exemple, 95% de confiance au lieu de std. erreur, remplacez
f <- function(z)sd(z)/sqrt(length(z)) # function to calculate std.err
avec
f <- function(z) qt(0.025,df=length(z)-1, lower.tail=F)* sd(z)/sqrt(length(z))
Cela tombe bien, je vous remercie. Est-il possible d'ajouter également des barres horizontales et verticales au centroïde qui représentent l'erreur standard pour les valeurs x et y? – cyril
Voir les modifications à la fin. – jlhoward
Merci! C'est parfait. – cyril