uniforme probabilidad numeros normal graficar grafica ejemplos distribuciones distribucion como binomial aleatorios ajuste r random mean standard-deviation

probabilidad - Generar números aleatorios con media fija y sd



probabilidad binomial en r (2)

Desde que pediste una sola línea:

rnorm2 <- function(n,mean,sd) { mean+sd*scale(rnorm(n)) } r <- rnorm2(100,4,1) mean(r) ## 4 sd(r) ## 1

Cuando se generan números aleatorios en R usando rnorm (o runif etc.), rara vez tienen la media exacta y SD como la distribución de la que se toman muestras. ¿Hay algún simple o dos liners que haga esto por mí? Como solución preliminar, he creado esta función pero parece ser algo que debería ser nativo de R o algún paquete.

# Draw sample from normal distribution with guaranteed fixed mean and sd rnorm_fixed = function(n, mu=0, sigma=1) { x = rnorm(n) # from standard normal distribution x = sigma * x / sd(x) # scale to desired SD x = x - mean(x) + mu # center around desired mean return(x) }

Para ilustrar:

x = rnorm(n=20, mean=5, sd=10) mean(x) # is e.g. 6.813... sd(x) # is e.g. 10.222... x = rnorm_fixed(n=20, mean=5, sd=10) mean(x) # is 5 sd(x) # is 10

La razón por la que quiero esto es que ajuste mi análisis en datos simulados antes de aplicarlo a datos reales. Esto es bueno porque con los datos simulados conozco las propiedades exactas (medios, SD, etc.) y evito la inflación de valor p porque estoy haciendo estadísticas inferenciales. Estoy preguntando si existe algo simple como por ejemplo

rnorm(n=20, mean=5, sd=10, fixed=TRUE)


Esta es una mejora de la función sugerida en una respuesta anterior para que cumpla con la necesidad del OP de tener un argumento "fijo".

Y aún en una línea ;-)

rnorm. <- function(n=10, mean=0, sd=1, fixed=TRUE) { switch(fixed+1, rnorm(n, mean, sd), as.numeric(mean+sd*scale(rnorm(n)))) } rnorm.() %>% {c(mean(.), sd(.))} #### [1] 0 1 rnorm.(,,,F) %>% {c(mean(.), sd(.))} #### [1] 0.1871827 0.8124567

Elegí ingresar valores predeterminados para cada argumento y agregar un paso as.numeric para deshacerme de los atributos generados por la función de scale .