r - 如何将密度对象转换为函数

标签 r statistics

我想将 density() 对象的输出用作一个函数(作为导数做很多事情,在特定区间积分,在特定点求值,...)

为了清楚起见,让我们举个例子:

a=c(1,3,10,-5,0,0,2, 1, 3, 8,2, -2)
b=density(a)

我想对 b 进行一些转换

f=some_transformation(b) # transformation I don't know
is.function(f) # answer must be "TRUE"

这样我就可以评估任何一点的密度

f(1.2) # evaluate density at 1.2

计算其导数

Df=D(body(f), "x") # derivative of f
Df(1.2) # derivative at 1.2

并像 f 是一个函数一样做其他 R 的事情。

最佳答案

您可以使用approxfun

a <- c(1,3,10,-5,0,0,2, 1, 3, 8,2, -2)
b <- density(a)
f <- approxfun(b, rule=2)
is.function(f)
f(1.2)

由于它不是由公式定义的, 你不能使用 D (符号微分) 来计算它的导数。 不过,您可以用数字来估算它。

library(numDeriv)
df <- function(x) grad(f,x)
curve( f(x),  lwd=3, xlim=c(-10,10) )
curve( df(x), lwd=3, xlim=c(-10,10) )

关于r - 如何将密度对象转换为函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18635805/

相关文章:

r - 如何在 R 中将 ISO-4217-Code 转换为货币名称

r - 基于多列隔离数据区域

r - 按 ID 顺序对行进行编号

在R中读写csv.gz文件

r - 写csv时避免拆分字符串列

Excel公式: Calculate Survey Statistics

sql-server - 用于获取性能统计信息的 SQL 命令

r - 从循环逐步回归写入表的问题

r - glmnet 中的汇总统计数据

sql - 一组日期的标准差