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


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δ2⋅Var(ζ)+π2ζ2(1+π2)δ2⋅Var(π)+(1+π2)ζ2δ4⋅Var(δ)+2×[πζδ2⋅Cov(π,ζ)−(1+π2)ζδ3⋅Cov(δ,ζ)−πζ2δ3⋅Cov(δ,π)]
β

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

コーディング 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+π2⋅Var(π)+(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.