Reading in the data

### read the saipe state-level data for the year of interest

rm(list = ls(all = TRUE))

saipedat <- read.csv('data93.csv',header=TRUE)
ve<-saipedat$fnlse^2

### extract the variables of interest

alldat <- saipedat[,c('cps','irspr','irsnf','fs','fnlse','smpsize','cenres')]
alldat$ve=ve
###

Creat plots

par(mfrow=c(2,2))
plot(alldat$cps~alldat$irspr,ylab='1993 CPS poverty rates', xlab='IRS pseudo poverty rates', main='(a)',cex.main=0.8,cex.lab=0.8)

plot(alldat$cps~alldat$irsnf,ylab='1993 CPS poverty rates', xlab='IRS non-filer rates', main='(b)',cex.main=0.8,cex.lab=0.8)

plot(alldat$cps~alldat$fs,ylab='1993 CPS poverty rates', xlab='Food stamp participation rates', main='(c)',cex.main=0.8,cex.lab=0.8)

plot(alldat$cps~alldat$cenres,ylab='1993 CPS poverty rates', xlab='Census residuals', main='(d)',cex.main=0.8,cex.lab=0.8)

model

### Fay-Herriot models

library('sae')
## Warning: package 'sae' was built under R version 3.6.3
## Loading required package: MASS
## Loading required package: lme4
## Warning: package 'lme4' was built under R version 3.6.3
## Loading required package: Matrix
## one variable

m1 <- mseFH(alldat$cps ~ alldat$irspr, (alldat$ve),'REML')

m2 <- mseFH(alldat$cps ~ alldat$irsnf, alldat$ve,'REML')

m3 <- mseFH(alldat$cps ~ alldat$fs, (alldat$ve),'REML')

m4 <- mseFH(alldat$cps ~ alldat$cenres, (alldat$ve),'REML')

## two variables

m12 <-mseFH(alldat$cps ~ alldat$irsnf+ alldat$irspr, (alldat$ve),'REML')
m13 <-mseFH(alldat$cps ~ alldat$irspr + alldat$fs, (alldat$ve),'REML')
m14 <-mseFH(alldat$cps ~ alldat$irspr + alldat$cenres, (alldat$ve),'REML')
m23 <-mseFH(alldat$cps ~ alldat$irsnf + alldat$fs, (alldat$ve),'REML')
m24 <-mseFH(alldat$cps ~ alldat$irsnf + alldat$cenres, (alldat$ve),'REML')
m34 <-mseFH(alldat$cps ~ alldat$fs +alldat$cenres, (alldat$ve),'REML')

## three variables

m123 <-mseFH(alldat$cps ~ alldat$irsnf+ alldat$fs+alldat$irspr, (alldat$ve),'REML')
m124 <-mseFH(alldat$cps ~ alldat$irsnf+alldat$irspr +alldat$cenres, (alldat$ve),'REML')
m134 <-mseFH(alldat$cps ~ alldat$cenres+ alldat$fs+alldat$irspr, (alldat$ve),'REML')
m234 <-mseFH(alldat$cps ~ alldat$irsnf+ alldat$fs+alldat$cenres, (alldat$ve),'REML')


## four variables

m1234 <-mseFH(alldat$cps ~ alldat$irspr +alldat$irsnf+ alldat$fs+alldat$cenres, (alldat$ve),'REML')

#m1234$est$fit

Output

### output

d1 <- round(m1234$est$fit$estcoef,3)

out <- data.frame(modelvar=c(m1$est$fit$refvar , m2$est$fit$refvar ,m3$est$fit$refvar ,m4$est$fit$refvar ,
                             m12$est$fit$refvar ,m13$est$fit$refvar ,m14$est$fit$refvar ,m23$est$fit$refvar,m24$est$fit$refvar ,m34$est$fit$refvar ,
                             m123$est$fit$refvar,m124$est$fit$refvar,m134$est$fit$refvar,m234$est$fit$refvar,m1234$est$fit$refvar ),
                  AICs = c( m1$est$fit$goodness['AIC'], m2$est$fit$goodness['AIC'], m3$est$fit$goodness['AIC'],m4$est$fit$goodness['AIC'],
                            m12$est$fit$goodness['AIC'], m13$est$fit$goodness['AIC'], m14$est$fit$goodness['AIC'],m23$est$fit$goodness['AIC'],m24$est$fit$goodness['AIC'],m34$est$fit$goodness['AIC'],
                            m123$est$fit$goodness['AIC'],m124$est$fit$goodness['AIC'],m134$est$fit$goodness['AIC'],m234$est$fit$goodness['AIC'],m1234$est$fit$goodness['AIC']))

# library('xtable')
# xtable(d1)
# xtable(out)

Results

#### results

### model estimates versus direct estimates

par(mfrow=c(1,1))

plot(alldat$cps~m1234$est$eblup,xlab='1993 CPS poverty rate model estimates', ylab='1993 CPS poverty rate direct estimates', main='',cex.main=0.8,cex.lab=0.8)
abline(0,1)

### standardized residuals for full model

par(mfrow=c(1,3))

r1234 <- (alldat$cps-m1234$est$fit$estcoef[1,1]-m1234$est$fit$estcoef[2,1]*alldat$irspr - m1234$est$fit$estcoef[3,1]*alldat$irsnf- m1234$est$fit$estcoef[4,1]*alldat$fs-m1234$est$fit$estcoef[5,1]*alldat$cenres)/sqrt(alldat[,'ve']+m1234$est$fit$refvar)

plot(r1234~m1234$est$eblup,xlab='1993 CPS poverty rate model estimates', ylab='Standardized residuals', main='(a)',cex.main=0.8,cex.lab=0.8)
abline(h=0)

# fittedvals <- m1234$est$fit$estcoef[1,1]+m1234$est$fit$estcoef[2,1]*alldat$irsprchld + m1234$est$fit$estcoef[3,1]*alldat$irsnf0.64+ m1234$est$fit$estcoef[4,1]*alldat$fsrate+m1234$est$fit$estcoef[5,1]*alldat$cenrsd
# plot(r1234~fittedvals,xlab='1993 CPS poverty rate model fitted values', ylab='Standardized residuals', main='(a)',cex.main=0.8,cex.lab=0.8)
# abline(h=0)

qqnorm(r1234,main='(b)',cex.main=0.8,cex.lab=0.8)
abline(0,1)

hist(r1234, main='(c)',xlab='',cex.main=0.8,cex.lab=0.8)

### estimated CVs

par(mfrow=c(1,2))

cvdir <- sqrt(alldat$ve)/alldat$cps
cveblup <- sqrt(m1234$mse)/m1234$est$eblup

plot((sqrt(m1234$mse)/sqrt(alldat$ve))~alldat$smpsize, xlab='CPS sample size (log scale)',ylab='SE model estimates over SE direct estimates',main='(a)',cex.main=0.8,cex.lab=0.8,log='x')
plot( (cveblup/cvdir) ~ alldat$smpsize, xlab='CPS sample size (log scale)',ylab='CV model estimates over CV direct estimates', main='(b)',cex.main=0.8,cex.lab=0.8  ,log='x')