Quero calcular os erros padrão de uma distribuição hiperbólica ajustada.
Na minha notação, a densidade é dada por
hyperbFit(mydata,hessian=TRUE)
Isso me dá uma parametrização errada. Eu mudo para a minha parametrização desejada com o hyperbChangePars(from=1,to=2,c(mu,delta,pi,zeta))
comando Então eu quero ter os erros padrão de minhas estimativas, posso obtê-lo para a parametrização errada com o summary
comando Mas isso me dá os erros padrão para a outra parametrização. De acordo com este tópico , tenho que usar o método delta ( não quero usar autoinicialização ou validação cruzada).
O hyperbFit
código está aqui . E o hyperbChangePars
está aqui . Portanto, eu sei que e permanecem os mesmos. Portanto, também os erros padrão são os mesmos, certo?
Para transformar e ζ em α e β , preciso da relação entre eles. De acordo com o código, isso é feito da seguinte maneira:
alpha <- zeta * sqrt(1 + hyperbPi^2) / delta
beta <- zeta * hyperbPi / delta
Então, como preciso codificar o método delta para obter os erros padrão desejados?
EDIT: eu estou usando esses dados . Primeiro, realizo o método delta de acordo com este segmento.
# fit the distribution
hyperbfitdb<-hyperbFit(mydata,hessian=TRUE)
hyperbChangePars(from=1,to=2,hyperbfitdb$Theta)
summary(hyperbfitdb)
summary(hyperbfitdb)
fornece a seguinte saída:
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
e hyperbChangePars(from=1,to=2,hyperbfitdb$Theta)
fornece a seguinte saída:
alpha.zeta beta.zeta delta.delta mu.mu
73.9516898823 0.0518715378 0.0186331187 -0.0001352342
agora eu defino as variáveis da seguinte maneira:
pi<-0.0007014
lzeta<-log(1.3779503)
ldelta<-log(0.0186331)
Agora corro o código (segunda edição) e obtenho o seguinte resultado:
> se.alpha
[,1]
[1,] 13.18457
> se.beta
[,1]
[1,] 6.94268
Isso está correto? Gostaria de saber o seguinte: Se eu usar um algoritmo de autoinicialização da seguinte maneira:
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)
Eu recebo 119.6
por sd(alpha)
e 35.85
para sd(beta)
. Os resultados são muito diferentes? Há algum erro ou qual é o problema aqui?