Optim函数何时不受起始值的影响?

时间:2017-08-23 11:53:44

标签: r optimization

首先,请注意我的以下代码会在几秒钟内给出结果。

我有一个模拟数据。然后,我拟合一个方法来获得最大似然的初始值。我选择这些初始值在某些情况下会高估真实值。也就是说,某些密度的初始值大于真值。然后,我使用optim函数调整MLE以使用这些初始值估计参数。让我感到惊讶的是,即使对于超过初始值,MLE也会返回一个很好的估计值。我的问题是,optim函数应该将这些初始值作为起始值,因此,如果它们大于真值,则optim函数不能返回真值。那是因为它从更大的数字开始!

以下是代码:

library(VineCopula) #very nice package for multivariate complex dependencies.
#matrix_structure
Matrix <- c(5, 2, 3, 1, 4,
0, 2, 3, 4, 1,
0, 0, 3, 4, 1,
0, 0, 0, 4, 1,
0, 0, 0, 0, 1)
Matrix <- matrix(Matrix, 5, 5)
# define R-vine pair-copula family matrix
family <- c(0, 3, 3, 4, 4,
            0, 0, 3, 4, 5,
            0, 0, 0, 4, 6,
            0, 0, 0, 0, 3,
            0, 0, 0, 0, 0)
family <- matrix(family, 5, 5)
# define R-vine pair-copula parameter matrix
par <- c(0, 0.2, 0.9, 1.5, 3.9,
         0, 0, 1.1, 1.6, 2.9,
         0, 0, 0, 1.9, 2.5,
         0, 0, 0, 0, 4.8,
         0, 0, 0, 0, 0)
par <- matrix(par, 5, 5)
# define second R-vine pair-copula parameter matrix
par2 <- matrix(0, 5, 5)
# define RVineMatrix object
RVM <- RVineMatrix(Matrix = Matrix, family = family,
                   par = par, par2 = par2,
                   names = c("V1", "V2", "V3", "V4", "V5"))
set.seed(123)
simdata <- RVineSim(300, RVM)

seq <- RVineSeqEst(data,RVM)
seq$RVM$par ##here will give a good initial estimates.

但是,我想测试初始值对MLE估计的影响。所以,我用标量乘以它。

 seq_new <- 2*seq$RVM$par

然后使用新的初始值(大于原始值和真值)将MLE拟合到数据。

mle <- RVineMLE(data,RVM,start=seq_new)$par
> mle$RVM$par

       [,1]     [,2]     [,3]     [,4] [,5]
[1,] 0.0000000 0.000000 0.000000 0.000000    0
[2,] 0.1612381 0.000000 0.000000 0.000000    0
[3,] 0.9260212 1.157538 0.000000 0.000000    0
[4,] 1.5380371 1.612497 1.866877 0.000000    0
[5,] 4.0816980 3.114378 2.574102 4.901621    0    

Where the true parameter is:

 RVM$par
     [,1] [,2] [,3] [,4] [,5]
[1,]  0.0  0.0  0.0  0.0    0
[2,]  0.2  0.0  0.0  0.0    0
[3,]  0.9  1.1  0.0  0.0    0
[4,]  1.5  1.6  1.9  0.0    0
[5,]  3.9  2.9  2.5  4.8    0

这是怎么发生的?为什么optim中使用的RVineMLE函数不会受到真值中较大的初始值值的影响?

0 个答案:

没有答案