R 利用数据帧计算信息优化公式参数
我试图使用从相当复杂的数据框计算出的信息来计算公式的参数。数据帧的格式(简化) 我一直在尝试使用dplyr来解决为每个Id估计Y的公式,然后将结果输入optim(),但没有成功。我收集optim()想要一个数字矩阵,它可以检查数据?以下是我迄今为止所尝试的:R 利用数据帧计算信息优化公式参数,r,R,我试图使用从相当复杂的数据框计算出的信息来计算公式的参数。数据帧的格式(简化) 我一直在尝试使用dplyr来解决为每个Id估计Y的公式,然后将结果输入optim(),但没有成功。我收集optim()想要一个数字矩阵,它可以检查数据?以下是我迄今为止所尝试的: library(dplyr) optFn <- function(dat, par) { sumFn <- function(r, p) { sum <- 0
library(dplyr)
optFn <- function(dat, par) {
sumFn <- function(r, p) {
sum <- 0
for(i in 1:length(r)) {
if(!is.na(r[i])) {
yf <- p[1] * exp(-p[2] * r[i])
sum <- sum + yf * 0.1
}
}
return(sum)
}
dat %>% group_by(Id) %>%
summarise(pred = sumFn(Ref, par), y = max(y)) %>%
select(pred,y) %>%
transmute(se = (pred - y)^2) -> SE
return(sum(SE$se))
}
# Create some test data
actualFn <- function(x) {
0.2 * exp( -0.3 * x) + 0.01 * rnorm(1)
}
hr <- seq(1, 60, by=6)
mp <- rep(hr, 100)
refVals <- seq(-17.5, 65.0, length.out=100)
ref <- as.vector(sapply(refVals, function (x) rep(x, 10)))
y <- actualFn(refVals)
y <- as.vector(sapply(y, function (x) rep(x, 10)))
IdVals <- seq(1, 100, by=1)
Id <- as.vector(sapply(IdVals, function (x) rep(x, 10)))
testDat <- data.frame(Id=Id, minutes_past=mp, Ref=ref, y=y)
# This doesn't work
#result <- optim(par = c(runif(1), runif(1)), fn=optFn, gr=NULL, data = testDat)
库(dplyr)
optFn-SE
申报表(金额(SE$SE))
}
#创建一些测试数据
实际值n如果您查看optim
的文档,它会准确地告诉您如何使其工作
fn
要最小化(或最大化)的函数,第一个参数为
要进行最小化的参数向量。信息技术
应该返回标量结果
在第一个参数之后,您需要向fn
提供的任何额外内容,都可以作为…
参数之一传递
在代码中,您为fn
提供了optFn
optFn
的第一个参数是dat
,它不是“参数向量”。之后,您将传递一个名为“data”的参数。但是您的函数optFn
没有任何名为“data”的参数。它只有“dat”
所以只需修正这两条线:
optFn <- function(par, dat) {
optFn我只是按照我在网上找到的代码进行设置。很高兴知道optim并没有试图对数据进行某种操作,以确定它正在探索什么样的表面。这有助于找出错误。
optFn <- function(par, dat) {
result <- optim(par = c(runif(1), runif(1)), fn=optFn, gr=NULL, dat = testDat)