Kesalahan standar estimasi distribusi hiperbolik menggunakan metode delta?

8

Saya ingin menghitung kesalahan standar dari distribusi hiperbolik yang dipasang.

Dalam notasi saya, kepadatan diberikan oleh Saya menggunakan paket HyperbolicDistr di R. Saya memperkirakan parameter melalui perintah berikut:

H(l;α,β,μ,δ)=α2β22αδK1(δα2β2)exp(αδ2+(lμ)2+β(lμ))
hyperbFit(mydata,hessian=TRUE)

Ini memberi saya parameterisasi yang salah. Saya mengubahnya menjadi parameterisasi yang saya inginkan dengan hyperbChangePars(from=1,to=2,c(mu,delta,pi,zeta))perintah. Lalu saya ingin memiliki kesalahan standar estimasi saya, saya bisa mendapatkannya untuk parameterisasi yang salah dengan summaryperintah. Tapi ini memberi saya kesalahan standar untuk parameterisasi lainnya. Menurut utas ini saya harus menggunakan metode delta (saya tidak ingin menggunakan bootstrap atau cross-validation atau lebih).

The hyperbFitkode sini . Dan hyperbChangeParsadalah di sini . Karena itu saya tahu, bahwa dan tetap sama. Karena itu juga kesalahan standarnya sama, kan?μδ

Untuk mengubah dan menjadi dan saya perlu hubungan di antara mereka. Menurut kode ini dilakukan sebagai berikut:πζαβ

alpha <- zeta * sqrt(1 + hyperbPi^2) / delta
beta <- zeta * hyperbPi / delta

Jadi bagaimana saya harus mengkode metode delta untuk mendapatkan kesalahan standar yang diinginkan?

EDIT: Saya menggunakan data ini . Saya pertama kali melakukan delta-metode menurut utas ini.

# fit the distribution

hyperbfitdb<-hyperbFit(mydata,hessian=TRUE)
hyperbChangePars(from=1,to=2,hyperbfitdb$Theta)
summary(hyperbfitdb)

summary(hyperbfitdb) memberikan hasil sebagai berikut:

Data:      mydata 
Parameter estimates:
        pi           zeta         delta           mu    
    0.0007014     1.3779503     0.0186331    -0.0001352 
  ( 0.0938886)  ( 0.9795029)  ( 0.0101284)  ( 0.0035774)
Likelihood:         615.992 
Method:             Nelder-Mead 
Convergence code:   0 
Iterations:         315 

dan hyperbChangePars(from=1,to=2,hyperbfitdb$Theta)memberikan output sebagai berikut:

   alpha.zeta     beta.zeta   delta.delta         mu.mu 
73.9516898823  0.0518715378  0.0186331187 -0.0001352342 

sekarang saya mendefinisikan variabel dengan cara berikut:

pi<-0.0007014 
lzeta<-log(1.3779503)
ldelta<-log(0.0186331)

Saya sekarang menjalankan kode (edit kedua) dan mendapatkan hasil berikut:

> se.alpha
         [,1]
[1,] 13.18457
> se.beta
        [,1]
[1,] 6.94268

Apakah ini benar? Saya bertanya-tanya tentang hal berikut: Jika saya menggunakan algoritma bootstrap dengan cara berikut:

B = 1000 # number of bootstraps

alpha<-NA
beta<-NA
delta<-NA
mu<-NA


# Bootstrap
for(i in 1:B){
  print(i)
  subsample = sample(mydata,rep=T)
  hyperboot <- hyperbFit(subsample,hessian=FALSE)
  hyperboottransfparam<- hyperbChangePars(from=1,to=2,hyperboot$Theta)
  alpha[i]    = hyperboottransfparam[1]
  beta[i]    = hyperboottransfparam[2]
  delta[i] = hyperboottransfparam[3]
  mu[i] = hyperboottransfparam[4]

}
# hist(beta,breaks=100,xlim=c(-200,200))
sd(alpha)
sd(beta)
sd(delta)
sd(mu)

Saya mendapatkan 119.6untuk sd(alpha)dan 35.85untuk sd(beta). Hasilnya sangat berbeda? Apakah ada kesalahan atau apa masalahnya di sini?

Jen Bohold
sumber

Jawaban:

10

Dalam solusi berikut, saya berasumsi hyperbPiuntuk menjadi . Juga, varian yang digunakan dalam perkiraan di bawah ini hanyalah kesalahan standar kuadrat yang dihitung setelahnya , jadi . Untuk menghitung perkiraan menggunakan metode delta , kita memerlukan turunan parsial dari fungsi transformasi s dan . Fungsi transformasi untuk dan diberikan oleh: πsummaryhyperbFitVar(X)=SE(X)2gα(ζ,π,δ)gβ(ζ,π,δ)αβ

gα(ζ,π,δ)=ζ1+π2δgβ(ζ,π,δ)=ζπδ
Turunan parsial dari fungsi transformasi untuk adalah: Turunan parsial dari fungsi transformasi untuk adalah: α
ζgα(ζ,π,δ)=1+π2δπgα(ζ,π,δ)=πζ1+π2δδgα(ζ,π,δ)=1+π2ζδ2
β
ζgβ(ζ,π,δ)=πδπgβ(ζ,π,δ)=ζδδgβ(ζ,π,δ)=πζδ2

Menerapkan metode delta pada transformasi, kami mendapatkan perkiraan berikut untuk varian (mengambil akar kuadrat untuk mendapatkan kesalahan standar): Varian yang diperkirakan dari adalah:α

Var(α)1+π2δ2Var(ζ)+π2ζ2(1+π2)δ2Var(π)+(1+π2)ζ2δ4Var(δ)+2×[πζδ2Cov(π,ζ)(1+π2)ζδ3Cov(δ,ζ)πζ2δ3Cov(δ,π)]
β

Var(β)π2δ2Var(ζ)+ζ2δ2Var(π)+π2ζ2δ4Var(δ)+2×[πζδ2Cov(π,ζ)π2ζδ3Cov(δ,ζ)πζ2δ3Cov(π,δ)]

Pengodean dalam R

Cara tercepat untuk menghitung perkiraan di atas adalah dengan menggunakan matriks. Nyatakan baris vektor yang mengandung turunan parsial dari fungsi transformasi untuk atau sehubungan dengan . Selanjutnya, masing menunjukkan yang varians-kovarians matriks . Matriks kovarians dapat diambil dengan mengetik di mana fungsi yang dipasang. Perkiraan varians adalah Hal yang sama berlaku untuk perkiraan varians dariDαβζ,π,δΣ3×3ζ,π,δvcov(my.hyperbFit)my.hyperbFitα

Var(α)DαΣDα
β.

Di R, ini dapat dengan mudah dikodekan seperti ini:

#-----------------------------------------------------------------------------
# The row vector D of the partial derivatives for alpha
#-----------------------------------------------------------------------------

D.alpha <- matrix(
  c(
    sqrt(1+pi^2)/delta,                 # differentiate wrt zeta
    ((pi*zeta)/(sqrt(1+pi^2)*delta)),   # differentiate wrt pi
    -(sqrt(1+pi^2)*zeta)/(delta^2)      # differentiate wrt delta
  ),
  ncol=3)

#-----------------------------------------------------------------------------
# The row vector D of the partial derivatives for beta
#-----------------------------------------------------------------------------

D.beta <- matrix(
  c(
    (pi/delta),            # differentiate wrt zeta
    (zeta/delta),          # differentiate wrt pi
    -((pi*zeta)/delta^2)   # differentiate wrt delta
  ),
  ncol=3)

#-----------------------------------------------------------------------------
# Calculate the approximations of the variances for alpha and beta
# "sigma" denotes the 3x3 covariance matrix
#-----------------------------------------------------------------------------

var.alpha <- D.alpha %*% sigma %*% t(D.alpha) 
var.beta <- D.beta %*% sigma %*% t(D.beta)

#-----------------------------------------------------------------------------
# The standard errors are the square roots of the variances
#-----------------------------------------------------------------------------

se.alpha <- sqrt(var.alpha)
se.beta <- sqrt(var.beta)

Menggunakan danlog(ζ)log(δ)

Jika kesalahan / varian standar hanya tersedia untuk dan alih-alih dan , fungsi transformasi berubah menjadi : Turunan parsial dari fungsi transformasi untuk adalah: ζ=log(ζ)δ=log(δ)ζδ

gα(ζ,π,δ)=exp(ζ)1+π2exp(ζ)gβ(ζ,π,δ)=exp(ζ)πexp(δ)
α
ζgα(ζ,π,δ)=1+π2exp(δ+ζ)πgα(ζ,π,δ)=πexp(δ+ζ)1+π2δgα(ζ,π,δ)=1+π2exp(δ+ζ)
Turunan parsial dari fungsi transformasi untuk adalah: β
ζgβ(ζ,π,δ)=πexp(δ+ζ)πgβ(ζ,π,δ)=exp(δ+ζ)δgβ(ζ,π,δ)=πexp(δ+ζ)
Menerapkan metode delta ke transformasi, kami mendapatkan perkiraan berikut untuk varian : α
VSebuahr(α)(1+π2)exp(-2δ+2ζ)VSebuahr(ζ)+π2exp(-2δ+2ζ)1+π2VSebuahr(π)+(1+π2)exp(-2δ+2ζ)VSebuahr(δ)+2×[πexp(-2δ+2ζ)CHaiv(π,ζ)-(1+π2)exp(-2δ+2ζ)CHaiv(δ,ζ)-πexp(-2δ+2ζ)CHaiv(δ,π)]
Varian yang diperkirakan dari adalah: β
VSebuahr(β)π2exp(-2δ+2ζ)VSebuahr(ζ)+exp(-2δ+2ζ)VSebuahr(π)+π2exp(-2δ+2ζ)VSebuahr(δ)+2×[πexp(-2δ+2ζ)CHaiv(π,ζ)-π2exp(-2δ+2ζ)CHaiv(δ,ζ)-πexp(-2δ+2ζ)CHaiv(δ,π)]

Pengodean dalam R2

Kali ini, sigmamenunjukkan matriks kovarians tetapi termasuk varians dan kovariansi untuk dan bukan dan .ζ=catatan(ζ)δ=catatan(δ)ζδ

#-----------------------------------------------------------------------------
# The row vector D of the partial derivatives for alpha
#-----------------------------------------------------------------------------

D.alpha <- matrix(
  c(
    sqrt(1+pi^2)*exp(-ldelta + lzeta),            # differentiate wrt lzeta
    ((pi*exp(-ldelta + lzeta))/(sqrt(1+pi^2))),   # differentiate wrt pi
    (-sqrt(1+pi^2)*exp(-ldelta + lzeta))          # differentiate wrt ldelta
  ),
  ncol=3)

#-----------------------------------------------------------------------------
# The row vector D of the partial derivatives for beta
#-----------------------------------------------------------------------------

D.beta <- matrix(
  c(
    (pi*exp(-ldelta + lzeta)),    # differentiate wrt lzeta
    exp(-ldelta + lzeta),         # differentiate wrt pi
    (-pi*exp(-ldelta + lzeta))    # differentiate wrt ldelta
  ),
  ncol=3)

#-----------------------------------------------------------------------------
# Calculate the approximations of the variances for alpha and beta
# "sigma" denotes the 3x3 covariance matrix with log(delta) and log(zeta)
#-----------------------------------------------------------------------------

var.alpha <- D.alpha %*% sigma %*% t(D.alpha) 
var.beta <- D.beta %*% sigma %*% t(D.beta)

#-----------------------------------------------------------------------------
# The standard errors are the square roots of the variances
#-----------------------------------------------------------------------------

se.alpha <- sqrt(var.alpha)
se.beta <- sqrt(var.beta)
COOLSerdash
sumber
1
@BenBohold Istilah di dalam tanda kurung sebelum persyaratan kovarians adalah produk turunan parsial masing-masing dari fungsi transformasi. Sebagai contoh: Istilah sebelum adalah produk dari turunan parsial wrt dikalikan dengan turunan parsial wrt . Dalam kasus ini adalah: . CHaiv(π,ζ)πζβζ/δ×π/δ=(ζπ)/δ2
COOLSerdash
1
@ BenBohold Aneh, tapi tidak ada masalah. Cobalah untuk menghitung matriks kovarian dengan cara ini: varcov <- solve(hyperbfitalv$hessian). Apakah ini berhasil? Setelah itu, Anda harus memilih sub-matriks yang hanya berisi . Cara termudah yang saya dapat membantu Anda adalah jika Anda memberikan contoh yang berfungsi penuh dengan data (Anda tidak harus memberikan semua data Anda). π,ζ,δ
COOLSerdash
3
Terima kasih banyak atas jawaban Anda, tetapi ini PERSIS masalahnya, karena parameterisasi hessian ini adalah untuk log (delta) dan log (zeta) dan bukan untuk delta dan zeta! Lihat posting tindak lanjut saya: stats.stackexchange.com/questions/67595/… dan terutama jawaban CT Zhu di sini stats.stackexchange.com/questions/67602/…
Jen Bohold
2
kita harus mendapatkan goni pi, log (zeta), log (delta), dan mu ke goni pi, zeta, delta, dan mu. Apakah Anda tahu bagaimana ini bisa dilakukan?
Jen Bohold
2
Saya juga mencoba melakukannya dengan goni "salah", jadi dengan log (delta) dan log (zeta), setelah ini saya memilih sub-matriks dan melakukan perhitungan. Hasilnya tidak benar, karena nilainya terlalu besar, jadi sekitar 60.000 atau lebih.
Jen Bohold
-2

Kemungkinan duplikat: Kesalahan standar hyperbFit?

Saya berani bertaruh beberapa akun milik orang yang sama ...

YouMustWatchTheWire
sumber
Saya sudah menautkan utas itu di pos saya! Dan jika Anda benar-benar membaca pertanyaan saya, Anda akan melihat, bahwa saya TIDAK INGIN menggunakan algoritma bootstrap, tetapi saya bertanya tentang metode delta.
Jen Bohold