Usted puede hacer esto usando funciones R estándar como esta:
c <- 1
d <- 2
a <- -2
b <- 3.5
ll <- pnorm(a, c, d)
ul <- pnorm(b, c, d)
x <- qnorm(runif(3000, ll, ul), c, d)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')
La función pnorm se utiliza para encontrar los límites que se utilizan para la distribución uniforme, los datos se generan a partir de un uniforme y luego se transforman a la normalidad.
Esto es aún más simple utilizando el paquete Distr:
library(distr)
N <- Norm(c,d)
N2 <- Truncate(N, lower=a, upper=b)
plot(N2)
x <- r(N2)(3000)
hist(x)
range(x)
mean(x)
sd(x)
plot(x, type='l')
Nótese que en ambos casos la media no es C y la SD no es d. Si desea que la media y la sd de los datos truncados resultantes sean cyd, entonces necesita que la distribución principal (antes de truncar) tenga valores diferentes (una sd más alta, la media depende de los valores truncados), encontrar esos valores sería una buen problema de tarea para un curso de teoría matemática/estadística. Si eso es lo que realmente necesita, agregue un comentario o edite la pregunta para decirlo específicamente.
Si desea generar los datos de la normal no truncada, pero sólo representar los datos dentro del rango [a, b] entonces sólo tiene que utilizar el argumento ylim para trazar:
plot(rnorm(3000, c, d), ylim=c(a,b))
Esto no hace lo que el OP pedido. Quiere 3000 puntos siguiendo la distribución normal, por lo que 'rnorm' es el camino a seguir – nico
es una pregunta mal formada ... Adiviné. Si en realidad estaba trazando los valores aleatorios en el eje y, como parte de ello sugiere, ¿qué diablos es la solicitud de límite del eje x? No tiene sentido. Mi suposición es que los valores aleatorios se solicitan para generar una función de densidad como hicieron @joFrhwld y @Joris Mays. Esta es la forma correcta de generar una función de densidad. – John