Pas t-distribusi di R: parameter penskalaan

17

Bagaimana saya menyesuaikan parameter distribusi-t, yaitu parameter yang sesuai dengan 'rata-rata' dan 'standar deviasi' dari distribusi normal. Saya menganggap mereka disebut 'berarti' dan 'scaling / derajat kebebasan' untuk distribusi-t?

Kode berikut sering menghasilkan kesalahan 'optimasi gagal'.

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

Apakah saya harus mengukur x terlebih dahulu atau mengubahnya menjadi probabilitas? Bagaimana cara terbaik untuk melakukannya?

pengguna12719
sumber
2
Gagal bukan karena Anda harus mengukur parameter, tetapi karena pengoptimal gagal. Lihat jawaban saya di bawah ini.
Sergey Bushmanov

Jawaban:

16

fitdistrmenggunakan kemungkinan-maksimum dan teknik optimasi untuk menemukan parameter dari distribusi yang diberikan. Terkadang, terutama untuk distribusi-t, seperti yang diperhatikan oleh @ user12719, optimasi dalam bentuk:

fitdistr(x, "t")

gagal dengan kesalahan.

Dalam hal ini Anda harus memberikan pengoptimal tangan dengan memberikan titik awal dan batas bawah untuk mulai mencari parameter yang optimal:

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

Catatan, df=3 adalah tebakan terbaik Anda untuk apa yang "optimal" dfbisa. Setelah memberikan info tambahan ini kesalahan Anda akan hilang.

Beberapa kutipan untuk membantu Anda lebih memahami mekanisme dalam fitdistr :

Untuk distribusi Normal, log-Normal, geometris, eksponensial, dan Poisson, MLEs bentuk-tertutup (dan kesalahan standar yang tepat) digunakan, dan start tidak boleh disediakan.

...

Untuk distribusi bernama berikut, nilai awal yang masuk akal akan dihitung jika startdihilangkan atau hanya ditentukan sebagian: "cauchy", "gamma", "logistic", "binomial negatif" (ditentukan oleh ukuran dan ukuran), "t" dan "weibull ". Perhatikan bahwa nilai awal ini mungkin tidak cukup baik jika kecocokannya buruk: khususnya mereka tidak tahan terhadap pencilan kecuali distribusi yang dipasang berekor panjang.

Sergey Bushmanov
sumber
1
Kedua jawaban (Flom dan Bushmanov) sangat membantu. Saya memilih yang ini, karena itu membuatnya lebih eksplisit bahwa dengan nilai awal yang tepat dan kendala optimasi 'fitdistr' menyatu.
user12719
10

νt , 1 ).

ν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")

masukkan deskripsi gambar di sini

n besar. Tetapi apakah estimator kemungkinan maksimum itu ada gunanya?

Mari kita coba beberapa simulasi:

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

Menunjukkan estimasi sangat tidak stabil (melihat histogram, sebagian besar nilai estimasi berada di batas atas yang diberikan untuk mengoptimalkan 200).

Mengulangi dengan ukuran sampel yang lebih besar:

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

yang jauh lebih baik, tetapi rata-rata masih jauh di atas nilai sebenarnya 2,5.

Kemudian ingat bahwa ini adalah versi sederhana dari masalah sebenarnya di mana parameter lokasi dan skala juga harus diperkirakan.

tν

kjetil b halvorsen
sumber
5
Kesimpulan Anda bahwa masalah estimasi df mungkin benar-benar bekerja melawan alasan untuk memilih distribusi-t di tempat pertama (yaitu ketahanan) dianggap memprovokasi.
user12719
1
(+1) "Tidak terikat di atas" bukan jawaban yang salah & mungkin berguna untuk beberapa tujuan ketika digabungkan dengan perkiraan interval. Yang penting adalah untuk tidak secara buta menggunakan informasi Fisher yang diamati untuk membentuk interval kepercayaan Wald.
Scortchi
8

Dalam bantuan untuk fitdistr adalah contoh ini:

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

menunjukkan bahwa Anda hanya perlu nilai untuk df. Tapi itu mengasumsikan standardisasi.

Untuk kontrol yang lebih besar, mereka juga tampil

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))

di mana parameternya adalah m = rata-rata, s = standar deviasi, df = derajat kebebasan

Peter Flom - Pasang kembali Monica
sumber
1
Saya kira saya bingung tentang parameter distribusi-t. Apakah ia memiliki 2 (rata-rata, df) atau 3 (rata-rata, standar deviasi, df) parameter? Saya bertanya-tanya apakah ada yang bisa cocok dengan parameter 'df'.
user12719
1
@ user12719 Distribusi Student --t memiliki tiga parameter: lokasi, skala dan derajat kebebasan. Mereka tidak disebut sebagai mean, standar deviasi dan df karena mean dan varian dari distribusi ini tergantung pada tiga parameter. Juga, mereka tidak ada dalam beberapa kasus. Peter Flom memperbaiki df tetapi ini dapat dianggap sebagai parameter yang tidak diketahui juga.
1
@ PeterFlom Dalam kasus distribusi Cauchy secara eksplisit bahwa m dan s adalah lokasi dan skala. Saya setuju notasi m dan s menunjukkan bahwa masing-masing mewakili mean dan standar deviasi. Tapi ini mungkin hanya penyederhanaan \mudan \sigmajuga. +1 dulu, omong-omong.
1
@ PeterFlom Apakah kutipan dari file bantuan R ini menyiratkan bahwa df selalu 9 untuk distribusi siswa? Tidakkah menurutmu sebaiknya estimasi juga? Sebenarnya, ketiadaan dfadalah penyebab kesalahan, dan jawaban yang tepat harus memberikan beberapa resep untuk menemukannya.
Sergey Bushmanov
1
@PeterFlom BTW, jika Anda membaca file bantuan beberapa baris di atas kutipan Anda, Anda akan menemukan mengapa df=9baik dalam contoh mereka dan tidak relevan di sini.
Sergey Bushmanov