用R中的数据表求解方程
Posted
技术标签:
【中文标题】用R中的数据表求解方程【英文标题】:Solve equation with datatable in R 【发布时间】:2022-01-22 17:22:42 【问题描述】:我正在使用数据表在 R 中处理一个大型数据集。我需要解一个方程并在表达式中找到 x 的值:
data[,mean(pnorm(qnorm(var1)+x))]= 0.07
我尝试使用以下代码使用函数 optimx:
library(optimx)
fnToFindRoot = function(x)
data[,mean(pnorm(qnorm(var1)+x))]
rootSearch = optimx(0.07, fnToFindRoot)
str(rootSearch)
fnToFindRoot(rootSearch$par)
但是产生的结果不正确。有人可以帮我解决这个等式吗?
【问题讨论】:
你能分享一些示例数据吗? 如果您的数据远离预期的均值=0、sd=1 分布,qnorm
会给出 NaN 值,例如qnorm(5)
.
啊,别理我,清晨的大脑冻结时刻。 qnorm
期望值介于 0 和 1 之间
【参考方案1】:
由于它只对一个变量进行优化,optimize
应该可以正常工作,例如
fnToFindRoot = function(x, a=0.07)
y <- data[,(mean(pnorm(qnorm(var1)+x)) - a)^2]
print(sprintf("x: %s, y:%s", x, y))
y
rootSearch = optimize(fnToFindRoot, interval=c(-5, 5), a=0.07)
fnToFindRoot(rootSearch$minimum)
设置方式的问题在于 optim 函数总是试图最小化目标。按照您的编写方式,它试图以0.07
作为x
的起始值来最小化mean(pnorm(qnorm(var1)+x))
。相反,您希望目标尽可能接近 0.07,因此请最小化 (mean(pnorm(qnorm(var1)+x)) - a)^2
。
interval
控制优化可以使用的x的范围
编辑:我使用的是虚构的数据,因此请检查 rootSearch$minimum
是否适合您。我编造的数据:
set.seed(1)
data <- data.table()
data[, var1 := runif(100, 0.04, 0.45)]
> fnToFindRoot(rootSearch$minimum)
[1] "x: -0.857685927870974, y:4.1043516952502e-13"
[1] 4.104352e-13
【讨论】:
以上是关于用R中的数据表求解方程的主要内容,如果未能解决你的问题,请参考以下文章
AX=0 在matlab中是用null函数求解吗?null怎么用
如何用matlab求解常微分方程?matlab解常微分方程之符号解法介绍