Dans la solution suivante, je suppose hyperbPi
être . De plus, les variances utilisées dans les approximations ci-dessous sont simplement les erreurs standard au carré calculées par après , donc . Pour calculer l'approximation à l'aide de la méthode delta , nous avons besoin des dérivées partielles de la fonction de transformation s et . Les fonctions de transformation pour et sont données par:
πsummary
hyperbFit
V a r (X) = S E ( X)2gα( ζ, π, δ)gβ( ζ, π, δ)αβ
gα( ζ, π, δ)gβ( ζ, π, δ)=ζ1 +π2-----√δ=ζπδ
Les dérivées partielles de la fonction de transformation pour sont alors:
Les dérivées partielles de la fonction de transformation pour sont:
α∂∂ζgα( ζ, π, δ)∂∂πgα( ζ, π,δ)∂∂δgα(ζ,π,δ)=1 +π2-----√δ=πζ1 +π2-----√δ= -1 +π2-----√ζδ2
β∂∂ζgβ(ζ,π,δ)∂∂πgβ(ζ,π,δ)∂∂δgβ(ζ,π,δ)=πδ=ζδ= -πζδ2
En appliquant la méthode delta aux transformations, nous obtenons l'approximation suivante pour la variance de (prendre des racines carrées pour obtenir les erreurs standard):
La variance approximative de est:α
V a r (α)≈1 +π2δ2⋅ V a r ( ζ) +π2ζ2( 1 +π2)δ2⋅ V a r ( π) +( 1 +π2)ζ2δ4⋅ V a r ( δ) +2 × [πζδ2⋅ C o v ( π, ζ) -( 1 +π2) ζδ3⋅ C o v ( δ, ζ) -πζ2δ3⋅ C o v ( δ, π) ]
β
V a r (β) ≈π2δ2⋅ V a r ( ζ) +ζ2δ2⋅ V a r ( π) +π2ζ2δ4⋅ V a r ( δ) +2 × [πζδ2⋅ C o v ( π, ζ) -π2ζδ3⋅ C o v ( δ, ζ) -πζ2δ3⋅ C o v ( π, δ) ]
Codage dans R
Le moyen le plus rapide pour calculer les approximations ci-dessus est d'utiliser des matrices. Notons le vecteur ligne contenant les dérivées partielles de la fonction de transformation pour ou par rapport à . De plus, notons la matrice variance-covariance de . La matrice de covariance peut être récupérée en tapant où est la fonction ajustée. L'approximation ci-dessus de la variance de est alors
Il en va de même pour l'approximation de la variance deréαβζ, π, δΣ3 × 3ζ, π, δvcov(my.hyperbFit)
my.hyperbFit
α
V a r (α)≈réαΣré⊤α
β.
Dans R
, cela peut être facilement codé comme ceci:
#-----------------------------------------------------------------------------
# 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)
Utilisation de etJournal( ζ)Journal( δ)
Si les erreurs / écarts standard ne sont disponibles que pour et au lieu de et , les fonctions de transformation passent à :
Les dérivées partielles de la fonction de transformation pour sont alors:
ζ∗= journal( ζ)δ∗= journal( δ)ζδ
gα(ζ∗, π,δ∗)gβ(ζ∗, π,δ∗)=exp(ζ∗)1 +π2-----√exp(ζ∗)=exp(ζ∗) πexp(δ∗)
α∂∂ζ∗gα(ζ∗, π,δ∗)∂∂πgα(ζ∗, π,δ∗)∂∂δ∗gα(ζ∗, π,δ∗)=1 +π2-----√exp( -δ∗+ζ∗)=πexp( -δ∗+ζ∗)1 +π2-----√= -1 +π2-----√exp( -δ∗+ζ∗)
Les dérivées partielles de la fonction de transformation pour sont:
β∂∂ζ∗gβ(ζ∗, π,δ∗)∂∂πgβ(ζ∗, π,δ∗)∂∂δ∗gβ(ζ∗, π,δ∗)= πexp( -δ∗+ζ∗)= exp( -δ∗+ζ∗)= - πexp( -δ∗+ζ∗)
Application de la
méthode delta à les transformations, on obtient l'approximation suivante pour la variance de :
αV a r (α)≈(1+π2) exp( - 2δ∗+ 2ζ∗) ⋅ V a r (ζ∗) +π2exp( - 2δ∗+ 2ζ∗)1 +π2⋅ V a r ( π)+ ( 1 +π2) exp( - 2δ∗+ 2ζ∗) ⋅ V a r (δ∗) +2 × [ πexp( - 2δ∗+ 2ζ∗) ⋅ C o v ( π,ζ∗) - ( 1 +π2) exp( - 2δ∗+ 2ζ∗) ⋅ C o v (δ∗,ζ∗)- πexp( - 2δ∗+ 2ζ∗) ⋅ C o v (δ∗, π) ]
La variance approximative de est:
βV a r (β) ≈π2exp( - 2δ∗+ 2ζ∗) ⋅ V a r (ζ∗) + exp( - 2δ∗+ 2ζ∗) ⋅ V a r ( π) +π2exp( - 2δ∗+ 2ζ∗) ⋅ V a r (δ∗) +2 × [ πexp( - 2δ∗+ 2ζ∗) ⋅ C o v ( π,ζ∗) -π2exp( - 2δ∗+ 2ζ∗) ⋅ C o v (δ∗,ζ∗) - πexp( - 2δ∗+ 2ζ∗) ⋅ C o v (δ∗, π) ]
Codage en R
2
Cette fois, sigma
dénote la matrice de covariance mais incluant les variances et covariances pour et au lieu de et .ζ∗= journal( ζ)δ∗= journal( δ)ζδ
#-----------------------------------------------------------------------------
# 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)