使用 delta 方法的雙曲線分佈估計的標準誤差?
我想計算擬合雙曲線分佈的標準誤差。
在我的符號中,密度由下式給出
我在 R 中使用 HyperbolicDistr 包。我通過以下命令估計參數:
hyperbFit(mydata,hessian=TRUE)
這給了我錯誤的參數化。我使用命令將其更改為我想要的參數化
hyperbChangePars(from=1,to=2,c(mu,delta,pi,zeta))
。然後我想得到我估計的標準誤差,我可以用summary
命令得到錯誤的參數化。但這給了我其他參數化的標準錯誤。根據這個線程,我必須使用 delta 方法(我不想使用引導程序或交叉驗證等)。
hyperbFit
代碼在這裡。就hyperbChangePars
在這裡。因此我知道,和保持原樣。因此標準誤也是一樣的,對吧?用於改造和進入和我需要他們之間的關係。根據代碼,這樣做如下:
alpha <- zeta * sqrt(1 + hyperbPi^2) / delta beta <- zeta * hyperbPi / delta
那麼我如何編寫 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)
我現在運行代碼(第二次編輯)並得到以下結果:
> 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)
在以下解決方案中,我假設
hyperbPi
是. 此外,以下近似值中使用的方差只是由summary
after計算的平方標準誤差hyperbFit
,所以. 為了使用delta 方法計算近似值,我們需要變換函數 s 的偏導數和. 變換函數為和由以下給出:變換函數的偏導數然後是:
變換函數的偏導數是:
將delta 方法應用於變換,我們得到以下方差的近似值(取平方根得到標準誤差):
的近似方差是:
編碼
R
計算上述近似值的最快方法是使用矩陣。表示包含變換函數的偏導數的行向量要么關於. 此外,表示這方差-協方差矩陣. 可以通過鍵入擬合函數
vcov(my.hyperbFit)
來檢索協方差矩陣。my.hyperbFit
上述方差的近似值那麼是對於方差的近似也是如此. 在
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)
使用和
如果標準誤差/方差僅適用於和代替和,變換函數變為:
變換函數的偏導數然後是:
變換函數的偏導數是:
將delta 方法應用於變換,我們得到以下方差的近似值:
的近似方差是:
編碼
R
2這一次,
sigma
表示協方差矩陣,但包括方差和協方差和代替和.#----------------------------------------------------------------------------- # 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)