R代码从非线性函数估计参数

时间:2014-04-07 08:41:23

标签: r parameters mathematical-optimization

假设我有一个数据集。有一些分类变量和一些数值变量。我想估算每个类别和其他类别的模型e^{X'b}的参数。我想用R代码做。我需要通过为age==2age==3这样的分类变量创建设计矩阵,将age==1作为参考类别。但是这个程序没有运行并且出错。有什么问题?

sex <- c("F","M","F","M","F","M")
age <- c(1,3,2,3,1,2) # categorical variable with three age categories 
age <- as.factor(age)
dat <- data.frame(sex,age)
myfun <- function(par, data){
  xx <- data
  func <- exp(par[1]*(xx$age==2)+par[2]*(xx$age==3)+par[3]*factor(xx$sex))
  return(-func)
}
optim(myfun, par=c(0.1,0.4,0.7), data=dat)

1 个答案:

答案 0 :(得分:2)

您的函数myfun返回长度为6的向量(因为您乘以xx$sex)。它必须是长度为1.此外,optim函数首先使用par,将函数作为第二个参数。

编辑:您需要重写函数以返回单个值。 -exp(X'b)是观察长度的向量。也许这会朝你的方向发展:

myfun1 <- function(par, data) {
   xx <- matrix(c(as.numeric(dat$sex), age, rep(1, nrow(dat))), ncol=3)
   sum(-exp(xx %*% par))
}
optim(c(0.1,0.4,0.7), myfun1, data=dat)

请注意,将xx传递给optim会更高效,因为xx的计算与迭代无关。