Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 利用数据帧计算信息优化公式参数_R - Fatal编程技术网

R 利用数据帧计算信息优化公式参数

R 利用数据帧计算信息优化公式参数,r,R,我试图使用从相当复杂的数据框计算出的信息来计算公式的参数。数据帧的格式(简化) 我一直在尝试使用dplyr来解决为每个Id估计Y的公式,然后将结果输入optim(),但没有成功。我收集optim()想要一个数字矩阵,它可以检查数据?以下是我迄今为止所尝试的: library(dplyr) optFn <- function(dat, par) { sumFn <- function(r, p) { sum <- 0

我试图使用从相当复杂的数据框计算出的信息来计算公式的参数。数据帧的格式(简化)

我一直在尝试使用dplyr来解决为每个Id估计Y的公式,然后将结果输入optim(),但没有成功。我收集optim()想要一个数字矩阵,它可以检查数据?以下是我迄今为止所尝试的:

    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)