tests/weights.R

library(lfe)
options(lfe.threads=1,digits=4)
set.seed(42)
N <- 1000
K <- 40
id <- factor(sample(K,N, replace=TRUE))
firm <- factor(sample(K,N, replace=TRUE))
ideff <- rnorm(nlevels(id))
firmeff <- rnorm(nlevels(firm))
x <- ideff[id] + rnorm(N)
y <- x  + ideff[id] - firmeff[firm] + rnorm(N,sd=2)
w <- abs(2*x + ideff[id] + firmeff[firm]) + runif(N,0.2,0.4)

# lm says:
summary(lm(y ~ x + id + firm, wei=w))
# felm w/o projection says
summary(felm(y ~ x + id + firm, wei=w))
# felm with projection says
est <- felm(y ~x | id + firm, wei=w, keepX=TRUE)
summary(est)
head(sandwich::estfun(est))

# test getfe:
Kid <- nlevels(id)
sid <- 1:Kid
Kfirm <- nlevels(firm)
sfirm <- 1:Kfirm + Kid
ef <- function(x, addnames=FALSE) {
  icpt <- x[1] + x[Kid+1]
  x[sid[-1]] <- x[sid[-1]] - x[1]
  x[1] <- icpt
  x[sfirm] <- x[sfirm] - x[Kid+1]
  if(addnames) names(x) <- c('(Intercept)',paste('id',sid[-1],sep=''),paste('firm',1:Kid,sep=''))
  x[c(sid,sfirm[-1])]
}
head(getfe(est,ef=ef,se=TRUE))
# test fevcov
print(fv <- fevcov(est))
message('correlation:', round(cov2cor(fv)[1,2],4))
v1 <- lfe:::wvar(ideff[id],w)
v2 <- lfe:::wvar(firmeff[firm],w)
cv <- lfe:::wcov(ideff[id], -firmeff[firm], w)
message(
    'idvar ',round(v1,4),
    ' firmvar ',round(v2,4),
    ' cov ',round(cv,4),
    ' cor ',round(cv/sqrt(v1*v2),4)
    )
bccorr(est)

varvars(est)
varvars(est,biascorrect=TRUE)
sgaure/lfe documentation built on Dec. 27, 2019, 8:06 a.m.