2010-07-08 13 views
12

Avere un set di dati e calcolarne le statistiche è semplice. E il contrario?Statistiche "inverse": generazione di dati in base alla deviazione media e standard

Diciamo che so che alcune variabili hanno una media X, una deviazione standard Y e presuppongono una distribuzione normale (gaussiana). Quale sarebbe il modo migliore per generare un set di dati "casuale" (di dimensioni arbitrarie) che si adatti alla distribuzione?

MODIFICA: Questo tipo di sviluppo si sviluppa da this question; Potrei fare qualcosa in base a quel metodo, ma mi chiedo se c'è un modo più efficiente per farlo.

risposta

12

È possibile generare le variabili casuali normali con il numero Box-Mueller method. Quindi per trasformare quello per avere sigma medio e deviazione standard sigma, moltiplica i tuoi campioni per sigma e aggiungi mu. Cioè per ogni z dalla normale standard, return mu + sigma * z.

1

Si potrebbe fare una sorta di simulazione Monte Carlo. Inizia con un ampio intervallo accettabile casuale e genera alcuni valori veramente casuali. Controlla le tue statistiche e verifica se la media e la varianza sono disattivate. Regola il "range accettabile" per i valori casuali e aggiungi altri valori. Ripeti fino a quando non avrai raggiunto i requisiti e la dimensione del campione della popolazione.

Appena in cima alla mia testa, fammi sapere cosa ne pensi. :-)

0

È facile generare set di dati con distribuzione normale (vedere http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform).
Ricorda che il campione generato non avrà una distribuzione esatta di N (0,1)! Hai bisogno di standarize - media sottostringa e poi dividere per deviazione standard. Quindi sei libero di trasformare questo campione in distribuzione normale con i parametri dati: moltiplica per deviazione standard e poi aggiungi media.

2

Vi darò un esempio utilizzando R e il 2 ° algoritmo in lista here.

X<-4; Y<-2 # mean and std 
z <- sapply(rep(0,100000), function(x) (sum(runif(12)) - 6) * Y + X) 

plot(density(z)) 
> mean(z) 
[1] 4.002347 

> sd(z) 
[1] 2.005114 

> library(fUtilities) 

> skewness(z,method ="moment") 
[1] -0.003924771 
attr(,"method") 
[1] "moment" 

> kurtosis(z,method ="moment") 
[1] 2.882696 
attr(,"method") 
[1] "moment" 
8

Questo è veramente facile da fare in Excel con la funzione norminv(). Esempio:

= NORMINV (rand(), 100, 15)

genererebbe un valore da una distribuzione normale con media di 100 e stdev di 15 (IQ umani). Trascina questa formula su una colonna e ottieni tutti i valori che desideri.

+0

+1 per senza bisogno di programmazione – quantumSoup

1

La funzione MATLAB normrnd dalla casella degli strumenti di statistica può generare numeri casuali distribuiti normalmente con un dato mu e sigma.

Problemi correlati