2

パラメータの分散共分散行列を計算したい。パラメータは、非線形最小二乗法によって取得されます。

library(minpack.lm)
library(numDeriv)

変数

t <- seq(0.1,20,0.3)
a <- 20
b <- 14
c <- 0.4
jitter <- rnorm(length(t),0,0.5)
Hobs <- a+b*exp(-c*t)+jitter

関数定義

Hhat <- function(parList, t) {parList$a + parList$b*exp(-parL
Hhatde <- function(par, t) {par[1] + par[2]*exp(-par[3]*t)}st$c*t)}
residFun <- function(par, t, observed) observed - Hhat(par,t)

初期条件

parStart = list(a = 20, b = 10 ,c = 0.5)

nls.lm

library(minpack.lm)
out1 <- nls.lm(par = parStart, fn = residFun, observed = Hobs,
              t = t, control = nls.lm.control(nprint=0))

私は手動で何を返されたかを計算したいですvcov(out1)sigmavcov(out1)

J <- jacobian(Hhatde, c(19.9508523,14.6586555,0.4066367 ), method="Richardson", 
method.args=list(),t=t)
sigma <- solve((t(J)%*%J))
vcov(out1)

今、ヘシアンでそれをやろうとしていますが、以下のエラーメッセージ cf でうまくいきません

ヘシアン

H <- hessian(Hhatde, x = c(19.9508523,14.6586555,0.4066367 ), method="complex", method.args=list(),t=t)

Error in hessian.default(Hhatde, x = c(19.9508523, 14.6586555, 0.4066367),  : 
  Richardson method for hessian assumes a scalar valued function.

どうすれば仕事に就くことができますかhessian()

ここでの数学はあまり得意ではないので、試行錯誤のアプローチです。

4

1 に答える 1