R 允许MLE中的估计参数在每个国家/地区/年发生变化

R 允许MLE中的估计参数在每个国家/地区/年发生变化,r,syntax,mle,R,Syntax,Mle,我试图从论文中复制一个公式: Layard,R.,Nickell,S.,和Mayraz,G.2008。收入的边际效用。公共经济学杂志,928-91846-1857 我想估算的部分如下所示: 我的出发点如下: ################################################################################################# # Data #######################################

我试图从论文中复制一个公式:

Layard,R.,Nickell,S.,和Mayraz,G.2008。收入的边际效用。公共经济学杂志,928-91846-1857

我想估算的部分如下所示:

我的出发点如下:

#################################################################################################
# Data
#################################################################################################

library(data.table)
library(bbmle)
library(dummies)
set.seed(1)
TDT <- data.table(panelID = sample(50,50),                                                    # Creates a panel ID
                  yct = c(rep("Albania",30),rep("Belarus",50), rep("Chilipepper",20)),       
                  some_NA = sample(0:5, 6),                                             
                  some_NA_factor = sample(0:5, 6),         
                  Group = c(rep(1,20),rep(2,20),rep(3,20),rep(4,20),rep(5,20)),
                  Time = rep(seq(as.Date("2010-01-03"), length=20, by="1 month") - 1,5),
                  norm = round(runif(100)/10,2),
                  Income = round(rnorm(10,-5,5),2),
                  Happiness = sample(10,10),
                  Sex = round(rnorm(10,0.75,0.3),2),
                  Age = sample(100,100),
                  Educ = round(rnorm(10,0.75,0.3),2))           
TDT[, yi:= .I]                                                                        #     
TDT[TDT == 0] <- NA                                                                            # https://stackoverflow.com/questions/11036989/replace-all-0-values-to-na
TDT $some_NA_factor <- factor(TDT$some_NA_factor)
TDT$yct <- as.factor(TDT$yct)
TDT <- cbind(TDT, dummy(TDT$yct, sep = "_"))

#################################################################################################
# MLE
#################################################################################################
start_rho <- c(1,1.2,1.4,1.6,1.8,2)
mu_Happiness <- mean(TDT$Happiness, na.rm=TRUE)
sd_Happiness <- sd(TDT$Happiness, na.rm=TRUE)

LL4 <- function(p, a, mu, sigma) {
  -sum(dnorm(TDT$Happiness - a*((TDT$Income^(1-p)-1)/(1-p)) + TDT$Educ + TDT$TDT_Albania  + TDT$TDT_Belarus+ TDT$TDT_Chillipepper, mu, sigma, log=TRUE))
}

mle = list()
mle_sum = list()
for (i in 1:length(start_rho)) {
  tryCatch({
    mle[[i]] <- mle2(LL4, start = list(p = start_rho[[i]], sigma=sd_Happiness, mu=mu_Happiness, a=1) , fixed = NULL, method = "BFGS") # fixed = list(mu = 6.6)
    mle_sum[[i]] <- summary(mle[[i]])
    print(i)
    print(start_rho[[i]])
    print (mle_sum[[i]])
    if (i==1000) stop("N is to large")
    }, error=function(e){})
}
然而,根据这篇论文,我应该考虑到估计参数alpha在每个国家每年都有所不同


我应该如何将其应用到等式中?

我无法重现代码,所以我不能给你一个工作示例,但是,无论如何,你将不得不估计大量其他参数,无论是α之外的参数还是代替α的参数。国家需要被模拟出来,除基本类别外的每个虚拟都需要作为一个术语包含,每个术语都需要自己的系数,如果省略了α,则表示该国的α,或者表示该国的α偏离基本α的量,无论是作为相加差还是作为基本α本身的系数。自然地,对于任何给定的观察,所有这些国家术语(1除外)或所有这些术语(如果它们是基准国)都将乘以虚拟值0,从而退出

更不用说今年了。事实上,这一理论还不够明确。因此,措辞是:[α]可以在不同的国家或不同的时间点有所不同。请注意,它不是和/或。这意味着国家和年份的差异不会相互影响,在这种情况下,我们不需要按年份或某一年的某个转换来增加国家模型。但即便如此,我们应该测试α和年份之间的关系,或者至少考虑它们之间的关系?线性加法?还是我们必须每年都虚度光阴?如果我们做后者,国家和时间的影响确实相互作用,那么,现在我们必须将每个国家每年的影响作为单独的估计参数包括在内。那将是很多傻瓜。因此,根据我的解释,这里有非常广泛的可估算模型,而理论的冗长不足以将其与其中一个结合起来。它的方程式6肯定与下面的措辞不符

不过,如果你真的开始编写更完整模型的某些版本,我建议你使用nls包,也许还有一些方法可以帮助你完成所有的蠢蠢欲动和互动。显然,手工编码每个术语是不切实际的


最后一个想法是:如果而且只有当你能够确定一个给定国家应该如何解释国家层面的差异的理论时,你才能避免所有国家的愚弄。如果α因国家的不同而不同,比如说,日照度不同,那么测量日照度并将其参数化,如果你能将其视为连续的,这将容易得多。但是,当然,在社会理论中有一种流行现象,即社会间的差异是被承认的,但没有得到解释,因此我们坚持使用的模型基本上是说法国的狂热导致了对幸福感影响的x点差异。

TDT没有定义。我建议使用reprex包,以确保代码的剪切和粘贴是可复制的。函数虚拟从何而来?hablar中有一个,但它没有sep参数,那就是dummies包。DT和TDT是一样的,对不起,不用担心!但是,我在尝试复制时遇到了以下错误:TDT$Happiness-a*TDT$Income^1-p-1/1-p+TDT$Educ+:二进制运算符的非数字参数。tryCatch正在抑制此错误。感谢您的详细回答,并对可怕的代码表示抱歉。我以为它能在我的电脑上工作,但它只是报告了先前存储的估计值。然而,由于某种原因,它现在只能在所有国家变量都被剔除的情况下起作用。关于你的评论;我试着把每个国家都画出来,给每个国家一个单独的系数。然而,我想,由于未知参数众多,它不会收敛。如果我理解正确,这实际上是我最简单的选择。。看看其他的包裹!