7 votos

¿Cómo dibujar líneas de media, mediana y modo en R que fin densidad?

He dibujado una distribución sesgada, el uso de estos comandos:

x <- seq(-2.5, 10, length=1000000)
hx5 <- rnorm(x,0,1) + rexp(x,1/5) # tau=5 (rate = 1/tau)
plot(density(hx5), xlim=c(-2.5,10), type="l", col="green",
     xlab="x", main="ExGaussian  curve",lwd=2)

Ahora quiero dibujar tres líneas, para la media, la moda y la mediana de la distribución. Si yo simplemente escribir, por ejemplo:

abline(v=median(hx5))

la línea de salir de la curva, pero quiero terminar la línea con la densidad de puntos del parámetro. Así que, mi problema es:

¿cómo puedo encontrar los valores de la densidad en la media, la moda y la mediana de mis observaciones con el fin de establecer las coordenadas correctas para el dibujo?

8voto

jldugger Puntos 7490

La densidad se representa como una polilínea, que es un par de matrices paralelas, una para $x$, uno para $y$, formando los vértices a lo largo de la gráfica de la densidad (con igualdad de distancias en el $x$ dirección). Como tal, es una aproximación discreta a la idealizada continua de la densidad y la podemos usar las versiones diferentes de las correspondientes integrales para calcular las estadísticas. Debido a que el espacio es por lo general tan cerca, probablemente, hay poca necesidad de interpolar entre puntos sucesivos: se pueden utilizar algoritmos sencillos.

De dónde,

x <- seq(-2.5, 10, length=1000000)
hx5 <- rnorm(x,0,1) + rexp(x,1/5) # tau=5 (rate = 1/tau)
#
# Compute the density.
#
dens <- density(hx5)
#
# Compute some measures of location.
#
n <- length(dens$y)                       #$
dx <- mean(diff(dens$x))                  # Typical spacing in x $
y.unit <- sum(dens$y) * dx                # Check: this should integrate to 1 $
dx <- dx / y.unit                         # Make a minor adjustment
x.mean <- sum(dens$y * dens$x) * dx
y.mean <- dens$y[length(dens$x[dens$x < x.mean])] #$
x.mode <- dens$x[i.mode <- which.max(dens$y)]
y.mode <- dens$y[i.mode]                  #$
y.cs <- cumsum(dens$y)                    #$
x.med <- dens$x[i.med <- length(y.cs[2*y.cs <= y.cs[n]])] #$
y.med <- dens$y[i.med]                                    #$
#
# Plot the density and the statistics.
#
plot(dens, xlim=c(-2.5,10), type="l", col="green",
     xlab="x", main="ExGaussian curve",lwd=2)
temp <- mapply(function(x,y,c) lines(c(x,x), c(0,y), lwd=2, col=c), 
               c(x.mean, x.med, x.mode), 
               c(y.mean, y.med, y.mode), 
               c("Blue", "Gray", "Red"))

Plot

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X