deriv
位于 stats
包(package)。 说明
通过符号和算法计算简单表达式的导数。
用法
D (expr, name)
deriv(expr, ...)
deriv3(expr, ...)
## Default S3 method:
deriv(expr, namevec, function.arg = NULL, tag = ".expr",
hessian = FALSE, ...)
## S3 method for class 'formula'
deriv(expr, namevec, function.arg = NULL, tag = ".expr",
hessian = FALSE, ...)
## Default S3 method:
deriv3(expr, namevec, function.arg = NULL, tag = ".expr",
hessian = TRUE, ...)
## S3 method for class 'formula'
deriv3(expr, namevec, function.arg = NULL, tag = ".expr",
hessian = TRUE, ...)
参数
expr |
|
name,namevec |
字符向量,给出将计算导数的变量名称(仅适用于 |
function.arg |
如果指定且非 |
tag |
特点;用于结果中本地创建的变量的前缀。转换为本机编码时不得超过 60 字节。 |
hessian |
一个逻辑值,指示是否应计算二阶导数并将其合并到返回值中。 |
... |
传入或传出方法的参数。 |
细节
D
以其同名的 S 为模型,用于获取简单的符号导数。
deriv
是一个通用函数,具有默认值和 formula
方法。它返回 call
,用于同时计算 expr
及其(偏)导数。它使用所谓的算法导数。如果 function.arg
是一个函数,则其参数可以具有默认值,请参阅下面的 fx
示例。
目前, deriv.formula
只是在提取 ~
右侧的表达式后调用 deriv.default
。
deriv3
及其方法与 deriv
及其方法等效,只是 hessian
对于 deriv3
默认为 TRUE
。
内部代码知道算术运算符+
,-
,*
,/
和^
和 single-variable 函数exp
,log
,sin
,cos
,tan
,sinh
,cosh
,sqrt
,pnorm
,dnorm
,asin
,acos
,atan
,gamma
,lgamma
,digamma
和trigamma
, 也psigamma
对于一个或两个参数(但仅针对第一个参数进行派生)。 (请注意,仅考虑标准正态分布。)
自从R3.4.0、single-variable函数log1p
,expm1
,log2
,log10
,cospi
,sinpi
,tanpi
,factorial
, 和lfactorial
也受到支持。
值
D
返回一个调用,因此可以轻松迭代以获得更高的导数。
deriv
和 deriv3
通常返回一个 expression
对象,其求值返回带有包含梯度矩阵的 "gradient"
属性的函数值。如果 hessian
是 TRUE
,则计算还会返回包含 Hessian 数组的 "hessian"
属性。
如果 function.arg
不是 NULL
,则 deriv
和 deriv3
返回带有这些参数的函数而不是表达式。
例子
## formula argument :
dx2x <- deriv(~ x^2, "x") ; dx2x
## Not run: expression({
.value <- x^2
.grad <- array(0, c(length(.value), 1), list(NULL, c("x")))
.grad[, "x"] <- 2 * x
attr(.value, "gradient") <- .grad
.value
})
## End(Not run)
mode(dx2x)
x <- -1:2
eval(dx2x)
## Something 'tougher':
trig.exp <- expression(sin(cos(x + y^2)))
( D.sc <- D(trig.exp, "x") )
all.equal(D(trig.exp[[1]], "x"), D.sc)
( dxy <- deriv(trig.exp, c("x", "y")) )
y <- 1
eval(dxy)
eval(D.sc)
## function returned:
deriv((y ~ sin(cos(x) * y)), c("x","y"), function.arg = TRUE)
## function with defaulted arguments:
(fx <- deriv(y ~ b0 + b1 * 2^(-x/th), c("b0", "b1", "th"),
function(b0, b1, th, x = 1:7){} ) )
fx(2, 3, 4)
## First derivative
D(expression(x^2), "x")
stopifnot(D(as.name("x"), "x") == 1)
## Higher derivatives
deriv3(y ~ b0 + b1 * 2^(-x/th), c("b0", "b1", "th"),
c("b0", "b1", "th", "x") )
## Higher derivatives:
DD <- function(expr, name, order = 1) {
if(order < 1) stop("'order' must be >= 1")
if(order == 1) D(expr, name)
else DD(D(expr, name), name, order - 1)
}
DD(expression(sin(x^2)), "x", 3)
## showing the limits of the internal "simplify()" :
## Not run:
-sin(x^2) * (2 * x) * 2 + ((cos(x^2) * (2 * x) * (2 * x) + sin(x^2) *
2) * (2 * x) + sin(x^2) * (2 * x) * 2)
## End(Not run)
## New (R 3.4.0, 2017):
D(quote(log1p(x^2)), "x") ## log1p(x) = log(1 + x)
stopifnot(identical(
D(quote(log1p(x^2)), "x"),
D(quote(log(1+x^2)), "x")))
D(quote(expm1(x^2)), "x") ## expm1(x) = exp(x) - 1
stopifnot(identical(
D(quote(expm1(x^2)), "x") -> Dex1,
D(quote(exp(x^2)-1), "x")),
identical(Dex1, quote(exp(x^2) * (2 * x))))
D(quote(sinpi(x^2)), "x") ## sinpi(x) = sin(pi*x)
D(quote(cospi(x^2)), "x") ## cospi(x) = cos(pi*x)
D(quote(tanpi(x^2)), "x") ## tanpi(x) = tan(pi*x)
stopifnot(identical(D(quote(log2 (x^2)), "x"),
quote(2 * x/(x^2 * log(2)))),
identical(D(quote(log10(x^2)), "x"),
quote(2 * x/(x^2 * log(10)))))
参考
Griewank, A. and Corliss, G. F. (1991) Automatic Differentiation of Algorithms: Theory, Implementation, and Application. SIAM proceedings, Philadelphia.
Bates, D. M. and Chambers, J. M. (1992) Nonlinear models. Chapter 10 of Statistical Models in S eds J. M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.
也可以看看
相关用法
- R decompose 移动平均线的经典季节性分解
- R dendrapply 将函数应用于树状图的所有节点
- R dendrogram 一般树结构
- R deviance 模型偏差
- R density 核密度估计
- R delete.response 修改术语对象
- R df.residual 剩余自由度
- R dummy.coef 提取原始编码中的系数
- R dist 距离矩阵计算
- R diffinv 离散积分:差分的逆
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
- R kruskal.test Kruskal-Wallis 秩和检验
- R quade.test 四方测试
- R plot.stepfun 绘制阶跃函数
- R alias 查找模型中的别名(依赖项)
- R qqnorm 分位数-分位数图
- R eff.aovlist 多层方差分析的计算效率
- R pairwise.t.test 成对 t 检验
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Symbolic and Algorithmic Derivatives of Simple Expressions。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。