- 已编辑
各位好,我用R手写了一个finite mixture model的极大似然估计,但是算出来结果跟stata里面手写的极大似然估计的结果不对,原因出在在R里面,我不知道如何去写每个class的概率的限制条件,烦请指教。
R里面的代码如下:
library(haven)
library(summarytools)
library(matrixStats)
setwd("C:\\Users\\ThinkPad\\Desktop\\MSL for R")
xtprobit_data <- read_dta("xtprobit_data.dta")
y <- unlist(xtprobit_data["ln_wage"])
X <- cbind(1, as.matrix(xtprobit_data[c("age", "grade", "not_smsa", "south")]))
#initial values
anso <- lm(ln_wage ~ age + grade + not_smsa + south,
data = xtprobit_data)
vi <- c(coef(anso),0.22,0.1,0.1,0.4,0.3,0.4)
#function
fmm <- function(beta) {
mu1 <- c(X %*% beta[1:5])
mu2 <- c(X %*% beta[6:10])
p1 <- beta[11]
p2 <- 1-p1
llk <- p1*dnorm(y,mu1)+p2*dnorm(y,mu2)
-sum(log(llk),na.rm=T)
}
fit <- optim(vi,fmm , method = "BFGS", hessian = TRUE)
fit$par
在stata里面,对p1、p2只要加这样一个限制条件即可
`p1'=exp(`lp')/(1+exp(`lp'))
`p2'=1-`p1'
stata里面的正确结果和数据在下面的链接里面:链接:https://pan.baidu.com/s/1PwfO4roaiW1CCUuvLB7xBg
提取码:k2h1
复制这段内容后打开百度网盘手机App,操作更方便哦
请问stata这里的限制条件如何在R当中写出来,谢谢!
有没有大佬来救救孩子啊