我尝试获取 R 中最大似然估计量的蒙特卡罗均方误差。我可以为重复一次的 MLE 编写计算,但我需要多次重复蒙特卡罗计算。我应该如何在 R 中编写这个?
首先,我们有样本大小 n=20
和重复次数 N=30
。这个想法是,对于第一次重复,我们从位置 0 和尺度 1 的 Gumbel 分布中采样 n=20
数据(真实值 mu=0
和 sigma =1
)。
library(VGAM)
set.seed(101)
x <- rgumbel(20, loc = 0, scale = 1)
最佳答案
根据蒙特卡罗的哲学和您的尝试,我认为您可以尝试 replicate
+ rowMeans
(我认为这个组合适用于您使用 fevd 进行的更新
也是如此,但我在这里继续使用 optim
)
N <- 30
est <- replicate(N, {
x <- rgumbel(20, loc = 0, scale = 1)
m <- length(x)
fit <- optim(
par = c(1, 1),
fn = ll_fn, z = x, m = m,
hessian = TRUE, control = list(fnscale = -1)
)
fit$par
})
mse <- rowMeans((est - c(0, 1))^2)
你将获得
> est
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.03994695 0.0411953 0.04289633 0.4483689 -0.1757629 -0.002960991
[2,] 0.86737551 1.0367012 0.78748509 1.3409259 1.1527607 1.277664938
[,7] [,8] [,9] [,10] [,11] [,12]
[1,] -0.05394607 0.07246731 0.9500388 -0.2932722 -0.03107634 -0.01794733
[2,] 0.67182217 0.99549765 1.4256878 0.9107769 1.03009996 0.59352028
[,13] [,14] [,15] [,16] [,17] [,18] [,19]
[1,] -0.2268109 0.1411913 -0.1689498 -0.1452246 -0.3621658 0.02991549 0.1332464
[2,] 0.7631312 1.0881250 0.9639512 0.9912077 0.8454992 1.08480054 1.0938930
[,20] [,21] [,22] [,23] [,24] [,25] [,26]
[1,] 0.03264025 0.2279907 0.5108963 0.2505532 0.1572398 -0.4195196 -0.09234722
[2,] 0.89162837 1.0663945 1.0713617 0.8400802 0.6026962 0.8300022 0.61653388
[,27] [,28] [,29] [,30]
[1,] -0.1322638 0.0582058 -0.03012397 0.1494059
[2,] 1.0835487 0.8667572 1.05939105 0.8632393
> mse
[1] 0.07120414 0.04254979
在est
中,第一行代表mu
,第二行代表sigma
和mse
> 由 mu
(第一个值)和 sigma
(第二个值)组成
关于r - 我应该如何计算 R 中的蒙特卡洛均方误差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74369830/