Domanda

E 'possibile generare distribuzioni in R per i quali la media, SD, skew e curtosi sono noti? Finora sembra la strada migliore sarebbe quello di creare numeri casuali e trasformarli conseguenza. Se c'è un pacchetto su misura per generare distribuzioni specifiche che potrebbero essere adattati, non ho ancora trovato. Grazie

È stato utile?

Soluzione

C'è una distribuzione Johnson nel pacchetto SuppDists. Johnson vi darà una distribuzione che soddisfa entrambi i momenti o quantili. Altri commenti sono corretti che 4 momenti non lo fa un make distribuzione. Ma Johnson sarà sicuramente provare.

Ecco un esempio di montaggio di un Johnson ad alcuni dati di esempio:

require(SuppDists)

## make a weird dist with Kurtosis and Skew
a <- rnorm( 5000, 0, 2 )
b <- rnorm( 1000, -2, 4 )
c <- rnorm( 3000,  4, 4 )
babyGotKurtosis <- c( a, b, c )
hist( babyGotKurtosis , freq=FALSE)

## Fit a Johnson distribution to the data
## TODO: Insert Johnson joke here
parms<-JohnsonFit(babyGotKurtosis, moment="find")

## Print out the parameters 
sJohnson(parms)

## add the Johnson function to the histogram
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

Il look di scena finale come questo:

entrare descrizione dell'immagine qui

È possibile vedere un po 'il problema che gli altri fanno notare di come 4 momenti non colgono pienamente una distribuzione.

In bocca al lupo!

Modifica Come Hadley ha sottolineato nei commenti, la misura Johnson guarda fuori. Ho fatto un test rapido e in forma la distribuzione Johnson utilizzando moment="quant" che si inserisce la distribuzione Johnson con 5 quantili invece dei 4 momenti. I risultati sembrano molto meglio:

parms<-JohnsonFit(babyGotKurtosis, moment="quant")
plot(function(x)dJohnson(x,parms), -20, 20, add=TRUE, col="red")

Il che produce il seguente:

entrare descrizione dell'immagine qui

Qualcuno ha qualche idea per cui Johnson sembra polarizzato quando si forma utilizzando momenti?

Altri suggerimenti

Questa è una domanda interessante, che in realtà non ha una soluzione buona. Presumo che anche se non si conoscono gli altri momenti, si ha un'idea di ciò che la distribuzione dovrebbe essere simile. Ad esempio, è unimodale.

Ci diversi modi di affrontare questo problema:

  1. assumere un sottostanti momenti di distribuzione e partita. Ci sono molti pacchetti R standard per fare questo. Uno svantaggio è che la generalizzazione multivariata può essere poco chiara.

  2. approssimazioni di sella. In questo lavoro:

    Gillespie, CS e Renshaw, E. Una migliorata approssimazione di sella. Mathematical Biosciences , 2007.

    Non vediamo al recupero di un pdf / PMF quando somministrato solo i primi momenti. Abbiamo scoperto che questo approccio funziona quando l'asimmetria non è troppo grande.

  3. espansioni Laguerre:

    Mustapha, H. e Dimitrakopoulosa, R. generalizzato Laguerre espansioni di densità di probabilità multivariate con momenti . Computer e Matematica con le applicazioni , 2010.

    I risultati in questo lavoro sembrano più promettenti, ma non li hanno codificato in su.

Questa domanda è stato chiesto più di 3 anni fa, quindi spero che la mia risposta non arriva troppo tardi.

è un modo per identificare in modo univoco una distribuzione in cui conoscere alcuni dei momenti. In questo modo è il metodo di Massimo Entropy . La distribuzione che i risultati di questo metodo è la distribuzione che massimizza la tua ignoranza circa la struttura della distribuzione, dato ciò che si sa . Qualsiasi altro tipo di distribuzione che ha anche i momenti che hai specificato, ma non è la distribuzione MaxEnt è implicitamente assumendo più struttura di quello che in ingresso. Il funzionale per massimizzare è di Shannon Informazione Entropia, $ S [p (x)] = - \ int p (x) log p (x) dx $. Conoscendo la media, sd, asimmetria e curtosi, tradurre da limitazioni per il primo, secondo, terzo, e quarto momenti della distribuzione, rispettivamente.

Il problema è quindi di massimizzare il S soggetto ai vincoli: 1) $ \ int x p (x) dx = "primo momento" $, 2) $ \ int x ^ 2 p (x) dx = "secondo momento" $, 3) ... e così via

Vi consiglio il libro "Harte, J., Massima Entropia ed ecologia:. Una teoria della abbondanza, la distribuzione, e Energetica (Oxford University Press, New York, 2011)"

Ecco un link che cerca di implementare questo in R: https://stats.stackexchange.com/questions/21173/max-entropy-solver- in-r

Sono d'accordo è necessario stima della densità di replicare qualsiasi distribuzione. Tuttavia, se si dispone di centinaia di variabili, come è tipico in una simulazione Monte Carlo, si avrebbe bisogno di avere un compromesso.

Un approccio suggerito è il seguente:

  1. Utilizza il Fleishman trasformare per ottenere il coefficiente per la data curtosi skew e. Fleishman prende la curtosi skew e e ti dà i coefficienti
  2. Genera N variabili normali (media = 0, std = 1)
  3. trasformare i dati in (2) con i coefficienti Fleishman per trasformare i dati normali alla data skew e curtosi
  4. In questa fase, utilizzare i dati di dalla fase (3) e trasformarlo la deviazione media e standard desiderato (std) utilizzando = new_data desiderati (dati dal punto 3) * desiderata std
  5. + medio

I dati risultanti dal punto 4 avrà il desiderato curtosi media, std, asimmetria e.

Avvertenze:

  1. Fleishman non funzionerà per tutte le combinazioni di asimmetria e kurtois
  2. passaggi precedenti presuppongono variabili non correlate. Se si desidera generare i dati correlati, avrete bisogno di un passo prima della Fleishman trasformare

Una soluzione per voi potrebbe essere la biblioteca PearsonDS. Esso consente di utilizzare una combinazione dei primi quattro momenti con la restrizione che curtosi> asimmetria ^ 2 + 1.

Per generare 10 valori casuali da quella distribuzione try:

library("PearsonDS")
moments <- c(mean = 0,variance = 1,skewness = 1.5, kurtosis = 4)
rpearson(10, moments = moments)

I parametri non in realtà definiscono completamente una distribuzione. Per questo è necessario una densità o equivalentemente una funzione di distribuzione.

Il metodo di entropia è una buona idea, ma se avete i campioni di dati si utilizza più informazioni rispetto all'utilizzo dei soli momenti! Quindi, un momento in forma è spesso meno stabile. Se si dispone di più informazioni su come gli sguardi di distribuzione come allora l'entropia è un concetto buono, ma se si dispone di ulteriori informazioni, per esempio sul supporto, quindi utilizzarlo! Se i dati sono distorta e positivo quindi utilizzando un modello log-normale è una buona idea. Se si conosce anche la coda superiore è finita, allora non utilizzare il lognormale, ma forse la distribuzione Beta 4 parametri. Se non si sa nulla di supporto o di coda caratteristiche, allora forse un ridimensionata e spostata modello log-normale va bene. Se avete bisogno di più flessibilità per quanto riguarda la curtosi, quindi per esempio un Logt con scala + shifting è spesso soddisfacente. Può anche aiutare se noto che la misura dovrebbe essere quasi normale, se questo è il caso, quindi utilizzare un modello che include la distribuzione normale (spesso il caso in ogni caso), altrimenti si rischia di esempio usare una distribuzione secante-iperbolica generalizzata. Se si vuole fare tutto questo, poi a un certo punto il modello avrà alcuni casi diversi, e si dovrebbe fare in modo che non vi siano lacune o cattivi effetti di transizione.

Come @ David e @Carl scritto sopra, ci sono diversi pacchetti dedicati per generare differenti distribuzioni, vedi ad esempio la probabilità distribuzioni un'attività Visualizza su CRAN .

Se siete interessati nella teoria (come disegnare un campione di numeri che corrispondono ad una specifica distribuzione con i parametri indicati), poi basta guardare per le formule appropriate, per esempio vedere la href="http://en.wikipedia.org/wiki/Gamma_distribution" rel="nofollow noreferrer"> distribuzione , e costituiscono un sistema di qualità semplice con i parametri forniti per calcolare scala e forma.

Vedere un esempio concreto qui , dove ho Computerizzata i parametri alfa e beta di una distribuzione beta richieste basate su media e deviazione standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top