Distribuzione t di raccordo in R: parametro di ridimensionamento


17

Come posso adattare i parametri di una distribuzione t, cioè i parametri corrispondenti alla "media" e alla "deviazione standard" di una distribuzione normale. Presumo che siano chiamati "media" e "ridimensionamento / gradi di libertà" per una distribuzione t?

Il codice seguente spesso genera errori di "ottimizzazione non riuscita".

library(MASS)
fitdistr(x, "t")

Devo prima ridimensionare x o convertire in probabilità? Il modo migliore per farlo?


2
Non fallisce perché devi ridimensionare i parametri, ma perché l'ottimizzatore fallisce. Vedi la mia risposta qui sotto.
Sergey Bushmanov,

Risposte:


16

fitdistrutilizza tecniche di massima verosimiglianza e ottimizzazione per trovare i parametri di una determinata distribuzione. A volte, soprattutto per la distribuzione t, come notato da @ user12719, l'ottimizzazione nel modulo:

fitdistr(x, "t")

fallisce con un errore.

In questo caso dovresti dare una mano all'ottimizzatore fornendo il punto di partenza e il limite inferiore per iniziare la ricerca di parametri ottimali:

fitdistr(x, "t", start = list(m=mean(x),s=sd(x), df=3), lower=c(-1, 0.001,1))

Nota, df=3è la tua ipotesi migliore su quale dfpotrebbe essere un "ottimale" . Dopo aver fornito queste informazioni aggiuntive, l'errore verrà eliminato.

Coppia di estratti per aiutarti a comprendere meglio la meccanica interiore di fitdistr:

Per le distribuzioni Normale, Log-Normale, geometrica, esponenziale e di Poisson, vengono utilizzati gli MLE in forma chiusa (e gli errori standard esatti), che startnon devono essere forniti.

...

Per le seguenti distribuzioni nominate, verranno calcolati i valori iniziali ragionevoli se startviene omesso o solo parzialmente specificato: "cauchy", "gamma", "logistic", "binomial negativo" (parametrizzato da mu e size), "t" e "weibull ". Si noti che questi valori iniziali potrebbero non essere abbastanza buoni se l'adattamento è scadente: in particolare non sono resistenti agli outlier a meno che la distribuzione montata non sia a coda lunga.


1
Entrambe le risposte (Flom e Bushmanov) sono utili. Sto scegliendo questo, perché lo rende più esplicito che con i giusti valori iniziali e i vincoli di ottimizzazione 'fitdistr' converge.
user12719,

10

νt

νt

set.seed(1234)
n <- 10
x <- rt(n,  df=2.5)

make_loglik  <-  function(x)
    Vectorize( function(nu) sum(dt(x, df=nu,  log=TRUE)) )

loglik  <-  make_loglik(x)
plot(loglik,  from=1,  to=100,  main="loglikelihood function for df     parameter", xlab="degrees of freedom")
abline(v=2.5,  col="red2")

inserisci qui la descrizione dell'immagine

n

Proviamo alcune simulazioni:

t_nu_mle  <-  function(x) {
    loglik  <-  make_loglik(x)
    res  <-  optimize(loglik, interval=c(0.01, 200), maximum=TRUE)$maximum
    res   
}

nus  <-  replicate(1000, {x <- rt(10, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)

> mean(nus)
[1] 45.20767
> sd(nus)
[1] 78.77813

Mostrare la stima è molto instabile (guardando l'istogramma, una parte considerevole dei valori stimati è al limite superiore dato per ottimizzare di 200).

Ripetendo con una dimensione del campione maggiore:

nus  <-  replicate(1000, {x <- rt(50, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 4.342724
> sd(nus)
[1] 14.40137

che è molto meglio, ma la media è ancora molto al di sopra del valore reale di 2,5.

Quindi ricorda che questa è una versione semplificata del vero problema in cui devono essere stimati anche i parametri di posizione e scala.

tν


5
La tua conclusione che i problemi della stima di df potrebbero effettivamente funzionare contro la ragione per scegliere una distribuzione t in primo luogo (cioè la robustezza) è ritenuta stimolante.
user12719,

1
(+1) "Unbounded above" non è una risposta errata e potrebbe essere utile per alcuni scopi se associato a una stima dell'intervallo. L'importante è non usare ciecamente le informazioni Fisher osservate per formare intervalli di confidenza Wald.
Scortchi - Ripristina Monica

8

Nell'aiuto per fitdistr è questo esempio:

fitdistr(x2, "t", df = 9)

indicando che hai solo bisogno di un valore per df. Ma questo presuppone la standardizzazione.

Per un maggiore controllo, mostrano anche

mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
fitdistr(x2, mydt, list(m = 0, s = 1), df = 9, lower = c(-Inf, 0))

dove i parametri sarebbero m = media, s = deviazione standard, df = gradi di libertà


1
Immagino di essere confuso sui parametri di una distribuzione t. Ha 2 (media, df) o 3 (media, deviazione standard, df) parametri? Mi chiedevo se si potesse adattare il parametro 'df'.
user12719

1
@ user12719 La distribuzione di Student's-t ha tre parametri: posizione, scala e gradi di libertà. Non sono indicati come media, deviazione standard e df perché la media e la varianza di questa distribuzione dipendono dai tre parametri. Inoltre, in alcuni casi non esistono. Peter Flom sta riparando il df ma questo può essere considerato anche un parametro sconosciuto.

1
@PeterFlom Nel caso della distribuzione di Cauchy è esplicito che m e s sono la posizione e la scala. Concordo che la notazione m e s suggerisce che rappresentano rispettivamente la media e la deviazione standard. Ma questa potrebbe essere solo una semplificazione di \mue \sigmapure. +1 molto tempo fa, a proposito.

1
@PeterFlom Questa citazione dal file di aiuto della R implica che df è sempre 9 per la distribuzione degli studenti? Non pensi che anche df debba essere stimato? In realtà, l'assenza di dfè la causa dell'errore e la risposta giusta dovrebbe fornire qualche ricetta per trovarlo.
Sergey Bushmanov,

1
@PeterFlom A proposito, se leggi il file di aiuto un paio di righe sopra la tua citazione, scoprirai perché df=9è buono nel loro esempio e irrilevante qui.
Sergey Bushmanov,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.