R

时间:2016-09-21 10:39:31

标签: r machine-learning

我是R的新手,在bbmle包中使用mle2尝试做MLE。 R代码:

rm(list = ls())  
library(bbmle)  
N <- 100  
testmat=rmultinom(N, size=3, prob = c(0.1,0.2,0.8))  
LL<- function(s, p){-sum(dmultinom(x=testmat, size = s, prob=p, log = TRUE))}  
values.start <- list(3, c(0.1,0.2,0.7))   
names(values.start) <- parnames(LL) <- paste0("b",0:1)  
mle2(LL, start =values.start) 

我一直收到这个错误 “mle2中的错误(LL,start = values.start):   'start'中的一些命名参数不是指定的对数似然函数的参数“

我正在使用mle2,我认为这里不需要它。起初我正在使用“mle”

N <- 100
testmat=t(rmultinom(3, size=3, prob = c(0.1,0.2,0.8)))
LL<- function(s, p1,p2,p3){prob=unlist(as.list(environment()))[2:4]
  -sum(dmultinom(x=testmat, size = s, prob=prob, log = TRUE))}
values.start <- list(s=3,p1=0.1,p2=0.2,p3=7)
mle(LL, start =values.start)

哪个游戏出现此错误 “”dmultinom中的错误(x = testmat,size = s,prob = prob,log = TRUE):   x []和prob []必须是相等的长度向量。“

我甚至编辑如下

N <- 100
testmat=t(rmultinom(3, size=3, prob = c(0.1,0.2,0.8)))
LL<- function(s=3, p1=0.1,p2=0.2,p3=0.7){
  prob=unlist(as.list(environment()))[2:4]
  s=unlist(as.list(environment()))[1]
  -sum(dmultinom(x=testmat, size = s, prob=prob, log = TRUE))}
mle(LL)

错误仍然存​​在。最后,我能够解码错误,非常感谢。

library(bbmle)  
N <- 1000
X=rmultinom(N,size=3,prob = rep(1/3, 3))

    LL <- function( p_1 = 0.1,p_2=0.1,p_3=0.8) {
      p <- unlist(as.list(environment()))
    -sum(apply(X, MAR = 2, dmultinom, size = NULL, prob = c(p_1,p_2,p_3), log = TRUE))
    }
    mle(LL,method = "L-BFGS-B", lower = c(-Inf, 0), upper = c(Inf, Inf))

在我目前的问题中,我有5k功能,因此我需要写这样的东西。

function( p_1 = 0.1,p_2=0.1,p_3=0.8...., p_5000=..)

哪个不可能。有什么办法吗?

我能用mle2做到这一点。这样

rm(list = ls())
library(bbmle)  
N <- 1000
s<-100
X=rmultinom(N,size=s,prob = rep(1/s, s))
LL= function(params){
  p <- unlist(as.list(environment()))
  minusll  = -sum(apply(X, MAR = 2, dmultinom, size = NULL, prob = p, log = TRUE))
  return(minusll)
}
values.start<-vector(mode="list", length=s)
values.start <- c(0.02,0.01*rep(98/99,99))
names(values.start) <- parnames(LL)<-paste0("b",1:s)
mle2(LL, start =values.start,vecpar = TRUE, method = "L-BFGS-B", lower = c(rep(0,s)), upper = c(rep(1,s)))

上面我正在对100和1000个样本进行多项MLE参数估计。我能够解决矢量参数的问题。现在我有这个错误

Error in optim(par = c(0.02, 0.0098989898989899, 0.0098989898989899, 0.0098989898989899,  : 
  L-BFGS-B needs finite values of 'fn'

我发现这个错误是由于'fn = Inf',可能是由于其中一个可能性变为零,因此fn = -log(0)= Inf。有什么方法可以解决这个问题吗? 谢谢你的帮助。

0 个答案:

没有答案