我试图在使用(从包中)stargazer估计模型并使用错误后使用包,也许有人可以提供帮助.下面我提供一个简单的例子.felmlfe
library(lfe)
library(stargazer)
oldopts <- options(lfe.threads=1)
x <- rnorm(1000)
x2 <- rnorm(length(x))
id <- factor(sample(10,length(x),replace=TRUE))
firm <- factor(sample(3,length(x),replace=TRUE,prob=c(2,1.5,1)))
year <- factor(sample(10,length(x),replace=TRUE,prob=c(2,1.5,rep(1,8))))
id.eff <- rnorm(nlevels(id))
firm.eff <- rnorm(nlevels(firm))
year.eff <- rnorm(nlevels(year))
y <- x + 0.25*x2 + id.eff[id] + firm.eff[firm] +year.eff[year] + rnorm(length(x))
est <- felm(y ~ x+x2 | id + firm + year)
stargazer(est)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
if(.global.coefficient.variables [i]%in%.global.intercept.strings){:参数的长度为零时出错
我正在尝试将我的一些 R 代码移植到 Julia;基本上我已经在 Julia 中重写了以下 R 代码:
library(parallel)
eps_1<-rnorm(1000000)
eps_2<-rnorm(1000000)
large_matrix<-ifelse(cbind(eps_1,eps_2)>0,1,0)
matrix_to_compare = expand.grid(c(0,1),c(0,1))
indices<-seq(1,1000000,4)
large_matrix<-lapply(indices,function(i)(large_matrix[i:(i+3),]))
function_compare<-function(x){
which((rowSums(x==matrix_to_compare)==2) %in% TRUE)
}
> system.time(lapply(large_matrix,function_compare))
user system elapsed
38.812 0.024 38.828
> system.time(mclapply(large_matrix,function_compare,mc.cores=11))
user system elapsed
63.128 1.648 6.108
Run Code Online (Sandbox Code Playgroud)
正如人们所注意到的,当从 1 个内核变为 11 个内核时,我获得了显着的加速。现在我正尝试在 Julia 中做同样的事情:
#Define cluster:
addprocs(11);
using Distributions;
@everywhere using Iterators;
d = Normal();
eps_1 = rand(d,1000000);
eps_2 = rand(d,1000000);
#Create a large matrix:
large_matrix = hcat(eps_1,eps_2).>=0;
indices = collect(1:4:1000000)
#Split large matrix:
large_matrix = [large_matrix[i:(i+3),:] for i …Run Code Online (Sandbox Code Playgroud) 我正在尝试估计以下模型:
y_{it} = \alpha + \beta x_{it}+\eta_i+\gamma_t+group_i\times \eta_t+\epsilon_{it}
#Clear everything and load the needed libraries:
rm(list=ls())
library(data.table)
#Define nr of individuals:
nr_ind<-1000
#Define time periods
nr_time<-5
#Define groups:
nr_groups<-2
#Create individual indicators:
pers_id<-rep(1:nr_ind,each = nr_time)
time_id<-rep(1:nr_time,nr_ind)
data<-data.table(pers_id=pers_id,time_id=time_id)
#Create time varying regressor:
data<-data[,x:=rnorm(1,0.01),by=c("pers_id","time_id")]
#Create time effect:
data<-data[,mean_x_time:=3*mean(x),by=c("time_id")]
#Create fixed effect:
data<-data[,mean_x_person:=1.5*mean(x),by=c("pers_id")]
#Create group varying time effect:
data_group<-data.table(pers_id=1:nr_ind,group=sample(c("M","F"),nr_ind,replace=TRUE))
data<-merge(data,data_group,by="pers_id",all.x=TRUE)
data<-data[,group_effect:=ifelse(group=="M",mean_x_time+mean_x_time^2+0.03,0)]
#Define the model:
data$y<-0.1+0.3*data$x+data$mean_x_person+data$mean_x_time+data$group_effect+rnorm(dim(data)[1])
data<-data[,time_id:=as.factor(time_id)]
data<-data[,group:=as.factor(group)]
model<-felm(y~x|pers_id+time_id*group,data=data)
Run Code Online (Sandbox Code Playgroud)
当我输入:
getfe(model)
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,这是一个预期的结果,因为 pers_id 和 group 是共线的。据我所知,felm 创造了什么: pers_id+time_id+group_id+time_id:group_id
目前我可以做这样的事情:
interaction_term<-interaction(data$time_id,data$group)
data$interaction_term<-as.character(interaction_term)
data$dummy_1<-ifelse(as.character(data$interaction_term)=="1.M",1,0)
data$dummy_2<-ifelse(as.character(data$interaction_term)=="2.M",1,0)
data$dummy_3<-ifelse(as.character(data$interaction_term)=="3.M",1,0) …Run Code Online (Sandbox Code Playgroud) 当我尝试做这样的事情时:
data <- read_csv("blah.csv",
+ n_max = 100,
+ col_types = cols_only(list(files = "c"))
+ )
Error: Some `col_types` are not S3 collector objects: 1
Run Code Online (Sandbox Code Playgroud)
所以问题是是否可以将命名列表传递给 cols_only()