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.)
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")] –