当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R SSbiexp 自启动 NLS 双指数模型


R语言 SSbiexp 位于 stats 包(package)。

说明

selfStart 模型评估双指数模型函数及其梯度。它具有 initial 属性,用于创建参数 A1lrc1A2lrc2 的初始估计。

用法

SSbiexp(input, A1, lrc1, A2, lrc2)

参数

input

用于评估模型的数值向量。

A1

表示第一个指数的乘数的数字参数。

lrc1

表示第一个指数的速率常数的自然对数的数字参数。

A2

表示第二个指数的乘数的数字参数。

lrc2

表示第二指数的速率常数的自然对数的数字参数。

input 长度相同的数值向量。它是表达式 A1*exp(-exp(lrc1)*input)+A2*exp(-exp(lrc2)*input) 的值。如果所有参数 A1lrc1A2lrc2 都是对象的名称,则与这些名称相关的梯度矩阵将作为名为 gradient 的属性附加。

例子

Indo.1 <- Indometh[Indometh$Subject == 1, ]
SSbiexp( Indo.1$time, 3, 1, 0.6, -1.3 )  # response only
A1 <- 3; lrc1 <- 1; A2 <- 0.6; lrc2 <- -1.3
SSbiexp( Indo.1$time, A1, lrc1, A2, lrc2 ) # response and gradient
print(getInitial(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = Indo.1),
      digits = 5)
## Initial values are in fact the converged values
fm1 <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = Indo.1)
summary(fm1)

## Show the model components visually
  require(graphics)

  xx <- seq(0, 5, length.out = 101)
  y1 <- 3.5 * exp(-4*xx)
  y2 <- 1.5 * exp(-xx)
  plot(xx, y1 + y2, type = "l", lwd=2, ylim = c(-0.2,6), xlim = c(0, 5),
       main = "Components of the SSbiexp model")
  lines(xx, y1, lty = 2, col="tomato"); abline(v=0, h=0, col="gray40")
  lines(xx, y2, lty = 3, col="blue2" )
  legend("topright", c("y1+y2", "y1 = 3.5 * exp(-4*x)", "y2 = 1.5 * exp(-x)"),
         lty=1:3, col=c("black","tomato","blue2"), bty="n")
  axis(2, pos=0, at = c(3.5, 1.5), labels = c("A1","A2"), las=2)

## and how you could have got their sum via SSbiexp():
  ySS <- SSbiexp(xx, 3.5, log(4), 1.5, log(1))
  ##                      ---          ---
  stopifnot(all.equal(y1+y2, ySS, tolerance = 1e-15))

## Show a no-noise example
datN <- data.frame(time = (0:600)/64)
datN$conc <- predict(fm1, newdata=datN)
plot(conc ~ time, data=datN) # perfect, no noise
## IGNORE_RDIFF_BEGIN
## Fails by default (scaleOffset=0) on most platforms {also after increasing maxiter !}
## Not run: 
        nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN, trace=TRUE)
## End(Not run)

fmX1 <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN, control = list(scaleOffset=1))
fmX  <- nls(conc ~ SSbiexp(time, A1, lrc1, A2, lrc2), data = datN,
           control = list(scaleOffset=1, printEval=TRUE, tol=1e-11, nDcentral=TRUE), trace=TRUE)
all.equal(coef(fm1), coef(fmX1), tolerance=0) # ... rel.diff.: 1.57e-6
all.equal(coef(fm1), coef(fmX),  tolerance=0) # ... rel.diff.: 1.03e-12
## IGNORE_RDIFF_END
stopifnot(all.equal(coef(fm1), coef(fmX1), tolerance = 6e-6),
          all.equal(coef(fm1), coef(fmX ), tolerance = 1e-11))

作者

José Pinheiro and Douglas Bates

也可以看看

nls , selfStart

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Self-Starting Nls Biexponential model。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。