利用非线性函数估计参数的R码

利用非线性函数估计参数的R码,r,parameters,mathematical-optimization,R,Parameters,Mathematical Optimization,假设我有一个数据集。有一些分类变量和一些数值变量。我想估计每个类别和其他类别的模型的参数。我试着用R代码来做。我需要为分类变量创建设计矩阵,比如age==2和age==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 <- a

假设我有一个数据集。有一些分类变量和一些数值变量。我想估计每个类别和其他类别的模型的参数。我试着用R代码来做。我需要为分类变量创建设计矩阵,比如
age==2
age==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)

sex您的函数
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)

myfun1请编辑您的问题,并澄清您的
myfun
应该返回的内容。也许写一个没有代码的公式。这将帮助我更好地理解您。我的函数是myfun=exp(X'b)。式中,X为协变量,b为参数。是否有观察值适合模型和解释变量?这看起来像是一个普通的模型,也许有一个包,谢谢。是的,这些是解释变量。我有一个很大的数据集。你知道什么样的R包名可以做到这一点吗?首先看一下base R中的glm(带日志链接函数)和nls函数。