在optim()中:par [1]中的错误:类型'closure'的对象不是子集 - 对于带有约束的线性回归,optim()

时间:2018-05-21 12:12:06

标签: r optimization linear-regression

我正在尝试编写一个函数,它将第1列中的因变量数据帧和第2列中的n个独立变量转换为n + 1,以适合y~x1 + .. xn + 1之间的线性模型,受制于x1到xn的所有系数均为0或以上的约束。

为此,我开始使用optim和一些函数来生成通用文本公式以最小化RSS,并将其评估为优化器中的代码。但是,我的方法返回以下错误:

Error in par[1] : object of type 'closure' is not subsettable

基本上,我使用optim来使用约束来执行OLS的想法基于以下示例:https://magesblog.com/post/2013-03-12-how-to-use-optim-in-r/

以下是功能(包括样本数据)

set.seed(1000)
#Function to produce n vectors + one y vector with 5000 observation (approx 20 business years):    
sampler <- function(n){
   df <- data.frame(y=sample(-100:100,5000, replace=TRUE))
   for (i in (1:n+1)){
    df[,i] <- sample(-100:100,5000,replace=TRUE)
   }
   df
}

#Function to produce formula for constrained optimization
formfun <- function(n) {
  part <- ""
  parts <- c("sum((")
  for (i in (1:n)){
    part[i]<- paste0("par[",i,"] * df[",i+1,"] + ",sep="")
    parts <- append(parts,part[i])
   }
   parts <- paste0(append(parts,"-df[1])^2)"),sep="")
   parts
}

#Function to evaluate formula
min.RSS <- function(par,data,form) {
  eval(parse(text=paste0(form)))
}

插入n:

 n=5
 df <- sampler(n)
 formula <- formfun(n)
 min.RSS(par,data=df,form=formula)

最后,将所有参数的公式赋予优化器:

result <- optim(par = c(rep(1,n)),min.RSS(par, data=df, form=formula),  method = c("L-BFGS-B"), lower = 0.00, upper = 10000)

不幸的是,这给了:

Error in par[1] : object of type 'closure' is not subsettable 

非常感谢任何帮助,为什么会发生这种情况!

0 个答案:

没有答案