2016-01-04 2 views
0

Comment générer des données ayant la même moyenne, la même déviation standard mais des formes ou distributions très différentes? Voici une réponse de jthetzel sur la façon de créer des données avec la même moyenne et la même déviation standard, mais j'ai besoin d'aide pour la rendre non-normale. Idéalement, j'aimerais des graphiques de formes très différentes qui partagent la même moyenne et la même déviation standard.Comment générer des données ayant la même moyenne, la même déviation standard mais des formes ou distributions très différentes dans R?

#install.packages("Runuran") 
library(Runuran) 
## Discrete normal distribution bounded between 0 and 100 
# Create UNU.RAN discrete distribution object 
discrete <- unuran.discr.new(pv = dnorm(0:100, mean = 50, sd = 25), lb = 0, ub = 100) 

# Create UNU.RAN object using the Guide-Table Method for Discrete Inversion 
unr <- unuran.new(distr = discrete, method = "dgt") 

# Generate random variates from the UNU.RAN object 
d2 <- ur(unr = unr, n = 1000) 

summary(d2) 
sd(d2) 
hist(d2) 
+2

Je ne sais pas ce que cela signifie pour générer des données non paramétriques, d'autant plus que vous spécifiez les paramètres (moyenne et écart-type). Toute distribution donnée (à l'exception des distributions à variance infinie comme la distribution de Cauchy) peut être traduite et mise à l'échelle avec une moyenne et une variance données, mais vous ne pouvez pas parler de générer des données sans une distribution sous-jacente. – user295691

+0

@ user295691 J'ai mal utilisé le mot non-paramétrique. Fondamentalement, je veux générer des données qui ont différentes formes, mais ont la même moyenne et l'écart-type. – Meli

Répondre

4

Vous pouvez prendre un ensemble de nombres générés à partir de toute distribution et de traduire/échelle pour avoir l'écart-type souhaité. Dans Vanilla R, ces fonctions ressemblent à r * - runif, rnorm, rbeta, rpois, rlnorm, etc. Voir ?Distributions pour une liste des distributions intégrées prises en charge.

Même les distributions qui n'ont pas de variance finie peuvent être abusées de cette manière.

d1 <- rcauchy(1000) 
d2 <- 12 * (d1 - mean(d1))/sd(d1) + 5 
sd(d2) # will be 12 
mean(d2) # will be 5 

Pour plus de commodité, voici une fonction qui le fera

shoehorn <- function(d, desired.mean, desired.sd) { 
    desired.sd * (d - mean(d))/sd(d) + desired.mean 
}