R:R 中大数据的优化

问题描述 投票:0回答:2

我有一个面板数据,包含 5 年内 5908 个个人观察结果。 我想使用 optim() 包来估计最大似然估计器。 这是我的代码

library(pglm)
library(plm)
data("HealthIns")
dat<- pdata.frame(HealthIns,index = c("id","year"))
summary(dat)

dat$claims<-ifelse(dat$size>=4,1,0)
y<-data.matrix(dat$claims)
y[is.na(y)]=0
Y<-matrix(data=y,nrow=5908,ncol=5)

dat$ageclass<-ifelse(dat$age >=30,1,0)
x1<-data.matrix(dat$ageclass)
x1[is.na(x1)]=0
X1<-matrix(data=x1,nrow=5908,ncol=5)

dat$gender <-ifelse(dat$sex=="male",1,0)
x2<-data.matrix(dat$gender)
x2[is.na(x2)]=0
X2<-matrix(data=x2,nrow=5908,ncol=5)

dat$child<-ifelse(dat$child=="yes",1,0)
x3<-data.matrix(dat$child)
x3[is.na(x3)]=0
X3<-matrix(data=x3,nrow=5908,ncol=5)

我想使用的-log可能性是

po.gam=function(para){
  #Lambda(i,t)
  {for (i in (1:5908)){
    for(t in (1:5)){
    lambda<-as.matrix(exp(para[1] + para[2]*X1 + para[3]*X2 + para[4]*X3),nrow=5908,ncol=5)}}
  }
  
 
  num.claims.of.t <-numeric(nrow(Y))
  {for (i in seq(nrow(Y))){
    num.claims.of.t[i] <-sum(Y[i,])}
  }
  
  num.lambda.of.t<-numeric(nrow(Y))
  {for (i in seq(nrow(Y))){
    num.lambda.of.t[i]<-sum(lambda[i,])}
  }
  
  prod.exp<-numeric(nrow(Y))
  {for (i in seq(nrow(Y))){
    prod.exp[i]<-prod(lambda[i,]^Y[i,]/factorial(Y[i,]))}
  }
  
  
  joint.pdf.mvnb<-(prod.exp)*(gamma(num.claims.of.t + (1/para[5]))/gamma(1/para[5]))*(((1/para[5])/(num.lambda.of.t + (1/para[5])))^(1/para[5]))*((num.lambda.of.t + (1/para[5]))^(-num.claims.of.t))
  
  #PRODUC NUMBER OF CLAIMS SEMUA INDIVIDU
  prod.mvnb=1
  for (i in (length(joint.pdf.mvnb))){
    prod.mvnb<-prod(joint.pdf.mvnb[i])
  }
  return(-log(prod.mvnb))
}

然后使用 optim()

start.value <- c(beta0=0.01,beta1=0.01,beta2=0.01,beta3=0.01,alfa=0.01)
MLE_pogam<-optim(start.value,fn=po.gam,hessian=FALSE)
MLE_pogam

程序运行了2个多小时仍然没有任何输出。 您对优化大数据的对数似然函数有什么建议吗? 谢谢!!

r optimization mle
2个回答
0
投票

尝试使用

pso
包。它使用 pso::psoptim() 实现
粒子群优化
算法,作为
optim()
函数的直接替代。它是一个随机算法,所以应该相对更快。


0
投票

我在使用psotim()时也出现了这个问题,它打印出“Error in if (f.x[i] < f.p[i]) { : missing value where TRUE/FALSE need" . i think its because the control setting in psotim(), maybe need to adjust number of informants, exploitation constant......but i don't reaaly solve the problem ...., does anyone can help?

© www.soinside.com 2019 - 2024. All rights reserved.