高斯牛顿法R

时间:2019-09-10 14:56:19

标签: r mle

找到非线性分布的MLE(在R中,使用高斯-牛顿法):

y = sin(x*theta) + epsilon
where epsilon ~ N(0 , 0.01^2)

为此,我被要求生成一些数据,这些数据是从0 <= x <= 10均匀(随机)分布的,其中n = 200和theta = 2(仅用于生成)。

例如,接近sin函数最大值(1、4等)的值将收敛,而其他函数则不会收敛。

已编辑 我现在了解了theta.iter的含义,但我似乎无法理解为什么它有时甚至在那时会收敛,输入哪个值以获得有用的输出。有人可以解释吗?

theta <- 2

x <- runif(200, 0, 10)

x <- sort(x)  #this is just to sort the generated data so that plotting it
 #actually looks like a sine funciton

y <- sin(x*theta) + rnorm(200, mean = 0, sd = 0.1^2)

GN_sin <- function(theta.iter, x , y, epsilon){

 index <- TRUE

 while (index){

     y.iter <- matrix(y - sin(x*theta.iter), 200, 1)

     x.iter <- matrix(theta.iter*cos(x*theta.iter), 200, 1)

     theta.new <- theta.iter +

         solve(t(x.iter)%*%x.iter)%*%t(x.iter)%*%y.iter

         if (abs(theta.new-theta.iter) < epsilon) {index <- FALSE}

   theta.iter <- as.vector(theta.new)

 cat(theta.iter, '\n')

 }
}

0 个答案:

没有答案