【问题标题】:Why does MLE for mixture model not equal to flexmix?为什么混合模型的 MLE 不等于 flexmix?
【发布时间】:2019-07-11 11:03:19
【问题描述】:

我想在 R 中为有限混合模型编写一个 mle,但模型估计的系数与包 flexmix 估计的系数不同。我想知道你是否能指出我的错误。 我的代码如下:

#prepare data
slope1 <- -.3;slope2 <- .3;slope3 <- 1.8; slope4 <- 0.5;intercept1 <- 1.5    
age <- sample(seq(18,60,len=401), 200) 
grade <- sample(seq(0,100,len=401), 200) 
not_smsa <- sample(seq(-2,2,len=401), 200) 
unemployment <- rnorm(200,mean=0,sd=1)
wage <- intercept1 + slope1*age +slope2*grade + slope3*not_smsa + rnorm(length(age),0,.15) 
y <- wage 
X  <- cbind(1, age , grade , not_smsa)
mydata <- cbind.data.frame(X,y)
anso <- lm(wage ~ age + grade + not_smsa, 
           data = mydata)
vi <- c(coef(anso),0.01,0.02,0.03,0.04,0.1)
#function
fmm <- function(beta) {

  mu1 <- c(X %*% beta[1:4])
  mu2 <- c(X %*% beta[5:8])

  p1 <- 1 / (1 + exp(-beta[9]))
  p2 <- 1-p1

  llk <- p1*dnorm(y,mu1)+p2*dnorm(y,mu2)
  -sum(log(llk),na.rm=T)
}

fit <- optim(vi,fmm , method = "BFGS", control = list(maxit=50000), hessian = TRUE)
fit$par

library(flexmix)
flexfit <- flexmix(wage ~ age + grade + not_smsa, data = mydata, k = 2)
flexfit$par
c1 <- parameters(flexfit,component=1)
c2 <- parameters(flexfit, component=2)

我的代码中是否存在任何错误?

【问题讨论】:

    标签: r statistics mle


    【解决方案1】:

    我已经解决了我的代码中存在的错误,main函数的参数应该添加一些约束。

    fmm <- function(pars) {
      beta1 = pars[1:4]
      sigma1 = log(1 + exp(pars[4]))   
      beta2 = pars[6:10]
      sigma2 = log(1 + exp(pars[11]))  
      p1 = 1 / (1 + exp(-pars[12]))
      mu1 <- c(X %*% beta1)
      mu2 <- c(X %*% beta2)
    
      p2 <- 1-p1
    
      llk <- p1*dnorm(y,mu1,sigma1)+p2*dnorm(y,mu2,sigma2)
      -sum(log(llk),na.rm=T)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-30
      • 2016-12-28
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      相关资源
      最近更新 更多