デルタ法を使用した双曲線分布推定の標準誤差?


8

近似された双曲線分布の標準誤差を計算したい。

私の表記では、密度はH l ; α β μ δ )で与えられ ます。 私は、次のコマンドを介してパラメータを推定R. IでHyperbolicDistrパッケージを使用しています。

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

これは私に間違ったパラメータ化を与えます。hyperbChangePars(from=1,to=2,c(mu,delta,pi,zeta))コマンドを使用して、目的のパラメーター化に変更します。次に、見積もりの​​標準誤差を取得したいのですが、summaryコマンドを使用して誤ったパラメーター化を行うと、誤差が発生します。しかし、これにより、他のパラメーター化の標準エラーが発生します。このスレッドによると、私はデルタ方式を使用する必要があります(私はしませんを使用する必要があります(ブートストラップや交差検証などを使用したく)。

hyperbFitコードがあるここに。そしてhyperbChangeParsこちらです。したがって、私は知っています、そのδμδは同じままです。したがって、標準誤差も同じですよね?

ζαβに変換するには、両者の関係が必要です。コードによると、これは次のように行われます。πζαβ

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

では、目的の標準エラーを取得するために、デルタ方式をどのようにコーディングする必要がありますか?

編集:私はこれらのデータを使用しています。まず、このスレッドに従ってデルタ方式を実行します。

# fit the distribution

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

summary(hyperbfitdb) 次の出力が得られます。

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 

そしてhyperbChangePars(from=1,to=2,hyperbfitdb$Theta)次のような出力が得られます。

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

今、私は次の方法で変数を定義します:

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

コードを実行し(2番目の編集)、次の結果を取得します。

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

これは正しいです?私は以下について疑問に思っています:次の方法でブートストラップアルゴリズムを使用する場合:

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)

私はの119.6ためにsd(alpha)との35.85ために得sd(beta)ます。結果は大きく異なりますか?間違いはありますか、またはここの問題は何ですか?

回答:


10

hyperbPiπsummaryhyperbFitVar(X)=SE(X)2gα(ζ,π,δ)gβ(ζ,π,δ)αβ

gα(ζ,π,δ)=ζ1+π2δgβ(ζ,π,δ)=ζπδ
α
ζgα(ζ,π,δ)=1+π2δπgα(ζ,π,δ)=πζ1+π2δδgα(ζ,π,δ)=1+π2ζδ2
β
ζgβ(ζ,π,δ)=πδπgβ(ζ,π,δ)=ζδδgβ(ζ,π,δ)=πζδ2

α

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(π,δ)]

コーディング R

Dαβζ,π,δΣ3×3ζ,π,δvcov(my.hyperbFit)my.hyperbFitα

Var(α)DαΣDα
β

ではR、これは次のように簡単にコーディングできます。

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

log(ζ)log(δ)

ζ=log(ζ)δ=log(δ)ζδ

gα(ζ,π,δ)=exp(ζ)1+π2exp(ζ)gβ(ζ,π,δ)=exp(ζ)πexp(δ)
α
ζgα(ζ,π,δ)=1+π2exp(δ+ζ)πgα(ζ,π,δ)=πexp(δ+ζ)1+π2δgα(ζ,π,δ)=1+π2exp(δ+ζ)
β
ζgβ(ζ,π,δ)=πexp(δ+ζ)πgβ(ζ,π,δ)=exp(δ+ζ)δgβ(ζ,π,δ)=πexp(δ+ζ)
α
Var(α)(1+π2)exp(2δ+2ζ)Var(ζ)+π2exp(2δ+2ζ)1+π2Var(π)+(1+π2)exp(2δ+2ζ)Var(δ)+2×[πexp(2δ+2ζ)Cov(π,ζ)(1+π2)exp(2δ+2ζ)Cov(δ,ζ)πexp(2δ+2ζ)Cov(δ,π)]
β
Var(β)π2exp(2δ+2ζ)Var(ζ)+exp(2δ+2ζ)Var(π)+π2exp(2δ+2ζ)Var(δ)+2×[πexp(2δ+2ζ)Cov(π,ζ)π2exp(2δ+2ζ)Cov(δ,ζ)πexp(2δ+2ζ)Cov(δ,π)]

R2でのコーディング

sigmaζ=log(ζ)δ=log(δ)ζδ

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

1
Cov(π,ζ)πζβζ/δ×π/δ=(ζπ)/δ2

1
varcov <- solve(hyperbfitalv$hessian)π,ζ,δ

3
あなたの答えに感謝しますが、これはまさに問題です。このヘッセ行列のパラメータ化はlog(delta)とlog(zeta)のためであり、deltaとzetaではありません!私のフォローアップの記事を参照してください:stats.stackexchange.com/questions/67595/...こことCT朱の特に答えはstats.stackexchange.com/questions/67602/...
ジェンBohold

2
pi、log(zeta)、log(delta)、muのヘッシアンをpi、zeta、delta、muのヘッシアンに入れる必要があります。これがどうやってできるか知っていますか?
Jen Bohold 2013

2
また、「間違った」ヘシアンを使用してそれを実行しようとしたため、log(delta)とlog(zeta)を使用して、サブマトリックスを選択し、計算を行いました。値が60 000程度と大きすぎるため、結果は正しくありませんでした。
Jen Bohold 2013

-2

重複の可能性:hyperbFitの標準エラー?

同じ人に属しているアカウントがいくつかあるに違いない...


そのスレッドはすでに投稿にリンクされています!そして、あなたが本当に私の質問を読んだら、あなたはあなたが見るでしょう、私はブートストラップアルゴリズムを使いたくないのですが、私はデルタ方式について尋ねています。
Jen Bohold 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.