2011-01-01 27 views
5

Stavo cercando di programmare l'algoritmo per il cdf per la distribuzione t multivariata successiva a Genz e Bretz, Il pacchetto di riferimento in R è mvtnorm.Perché i miei numeri non corrispondono, distribuzione multivariata in R mvtnorm

Durante la verifica della funzione, ho riscontrato che i miei numeri non corrispondono. Nell'esempio seguente, corretto dalla guida di mvtnorm, la variabile casuale multivariata t ha componenti indipendenti. Quindi l'integrale dovrebbe essere solo il prodotto di 3 probabilità indipendenti

> lower <- -1 
> upper <- 3 
> df <- 4 
> corr <- diag(3) 
> delta <- rep(0, 3) 
> pmvt(lower=lower, upper=upper, delta=delta, df=df, corr=corr) 
[1] 0.5300413 
attr(,"error") 
[1] 4.321136e-05 
attr(,"msg") 
[1] "Normal Completion" 

L'errore segnalato è 4e-5, l'errore rispetto al prodotto della probabilità indipendenti

> (pt(upper, df) - pt(lower, df))**3 
[1] 0.4988254 

è

0.5300413 - 0.4988254 = 0.0312159

Sto ottenendo d iscrepanze nel mio codice rispetto a R mvtnorm per vari esempi in circa lo stesso intervallo.

Sono principalmente un principiante in R. Quindi, cosa sto sbagliando o cosa è sbagliato?

(non sono registrato su una mailing list R-aiuto, così cerco qui.)

UPDATE: Come ha spiegato pchalasani, le mie statistiche era sbagliato, l'errore nel mio codice è stato in qualche aiutante funzione non nel codice di distribuzione t. Un buon modo di vedere che essere non correlato non implica indipendenza, sta guardando la distribuzione condizionale. Ecco le frequenze di colonna% * 100 per indipendente una variabile casuale bivariata (10000 campioni) per i quartili (distribuzione condizionale sulla variabile di colonna).

bivariati scorrelati variates normali

([[26, 25, 24, 23], 
    [24, 23, 24, 25], 
    [24, 27, 24, 24], 
    [24, 23, 26, 25]]) 

bivariato incorrelati t variates

([[29, 20, 22, 29], 
    [20, 31, 28, 21], 
    [20, 29, 29, 20], 
    [29, 18, 18, 29]]) 

La distribuzione nella prima e ultima colonna è molto diverso dalle colonne centrali. (Spiacente, nessun codice R, dato che non so come fare in fretta con R.)

+0

Non vedo nulla di evidentemente sbagliato in quello che stai facendo. L'esecuzione di pmvt() per il caso 1-dimensionale sembra OK; per il caso bidimensionale [pmvt (lower = rep (lower, 2), upper = rep (upper, 2), df = df)] dà 0.6429955 con un errore nominale di 1e-15, mentre (pt (upper, df) -pt (lower, df))^2 è 0.6289736. Il tuo codice fornisce risposte che corrispondono al prodotto di distribuzioni t indipendenti? Sono d'accordo che un bug sembra improbabile: potrebbe esserci qualcosa nelle definizioni che ti mancano? Se non ci sono più risposte, vorrei provare il manutentore [manutentore ("mvtnorm")] –

risposta

7

Zero correlazione non implica l'indipendenza, per congiuntamente non gaussiano distribuito variabili casuali!

Lasciatemi elaborare: non vi è alcun bug qui. Il difetto sta nel presupposto che quando le variabili casuali multivariate Student-t sono non correlate , esse sono anche indipendenti, il che non è assolutamente il caso: l'unica classe di distribuzioni multivariate dove nessuna correlazione implica indipendenza, è la MV Gaussiana distribuzione.

di vedere che due variabili casuali non correlate che seguono congiuntamente una distribuzione MV Student-T non sono indipendenti, si consideri il caso di n=2:

require(mvtnorm) 
x <- rmvt(100000, sigma = diag(2), df=4, delta = rep(0,2)) 

Ora ogni colonna di x rappresenta realizzazioni delle due variabili casuali.Prima controlliamo che la loro correlazione è piuttosto piccola:

> cor(x[,1], x[,2]) 
[1] -0.003378811 

Tuttavia la correlazione dei piazze di x[,1] e x[,2] è alto come 30,4%, vale a dire, sicuramente non nullo, dimostrando che x[,1] e x[,2] sono non statisticamente indipendente:

> cor(x[,1]^2, x[,2]^2) 
[1] 0.3042684 
+0

Grazie. Dopo aver letto la tua risposta mi ci è voluto un po 'per convincermi che hai ragione. La mia intuizione per le distribuzioni sferiche e i bei diagrammi di dispersione a forma di palla possono essere piuttosto sbagliati. – user333700

+0

E dopo che ho smesso di preoccuparmi della distribuzione t, ho trovato il bug nel mio programma e ora posso abbinare i risultati di mvtnorm. – user333700

+0

Ho letto la risposta di pchalasni e l'ho svalutato. Ti suggerisco inoltre di aggiungere modifiche alla tua domanda dimostrando cosa hai fatto in seguito per risolvere la tua confusione. Io, per esempio, non mi sarei mai aspettato che i due metodi fossero d'accordo, ma forse hai scoperto qualcosa di istruttivo. –

Problemi correlati