## Beyond Institutional Design: Explaining the Performance of International Organizations
## Ranjit Lall
## Replication code

## setwd()
library(stargazer)
library(foreign)
library(psy)
library(systemfit)
library(effects)
library(arm)
library(Amelia)
library(sandwich)
library(car)
library(Zelig)

## Load dataset
data <- read.csv("lall_dataset.csv", header=T)
data <- as.data.frame(data)
head(data)

## Table 2

## Model 1: UK
ols.uk1 <- lm(uk_index ~ dfpa + staff + field + age, data = data)
summary(ols.uk1)
cov.uk1 <- vcovHC(ols.uk1, type = "HC")
sqrt(diag(cov.uk1))

## Model 2: AUS
ols.aus1 <- lm(aus_index ~ dfpa + staff + field + age, data = data)
summary(ols.aus1)
cov.aus1 <- vcovHC(ols.aus1, type = "HC")
sqrt(diag(cov.aus1))

## Model 3: NET
ols.net1 <- lm(net_index ~ dfpa + staff + field + age, data = data)
summary(ols.net1)
cov.net1 <- vcovHC(ols.net1, type = "HC")
sqrt(diag(cov.net1))

## Model 4: SWE
ols.swe1 <- lm(swe_index ~ dfpa + staff + field + age, data = data)
summary(ols.swe1)
cov.swe1 <- vcovHC(ols.swe1, type = "HC")
sqrt(diag(cov.swe1))

## Model 5: DEN
ols.den1 <- lm(perf_den ~ dfpa + staff + field + age, data = data)
summary(ols.den1)
cov.den1 <- vcovHC(ols.den1, type = "HC")
sqrt(diag(cov.den1))

## Model 6: AVG
ols.avg1 <- lm(avg_measure ~ dfpa + staff + field + age, data = data)
summary(ols.avg1)
cov.avg1 <- vcovHC(ols.avg1, type = "HC")
sqrt(diag(cov.avg1))

## Table 3

## Model 1: UK
ols.uk2 <- lm(uk_index ~ djpa + staff + field + age, data = data)
summary(ols.uk2)
cov.uk2 <- vcovHC(ols.uk1, type = "HC")
sqrt(diag(cov.uk2))

## Model 2: AUS
ols.aus2 <- lm(aus_index ~ djpa + staff + field + age, data = data)
summary(ols.aus2)
cov.aus2 <- vcovHC(ols.aus2, type = "HC")
sqrt(diag(cov.aus2))

## Model 3: NET
ols.net2 <- lm(net_index ~ djpa + staff + field + age, data = data)
summary(ols.net2)
cov.net <- vcovHC(ols.net2, type = "HC")
sqrt(diag(cov.net))

## Model 4: SWE
ols.swe2 <- lm(swe_index ~ djpa + staff + field + age, data = data)
summary(ols.swe2)
cov.swe2 <- vcovHC(ols.swe2, type = "HC")
sqrt(diag(cov.swe2))

## Model 5: DEN
ols.den2 <- lm(perf_den ~ djpa + staff + field + age, data = data)
summary(ols.den2)
cov.den2 <- vcovHC(ols.den2, type = "HC")
sqrt(diag(cov.den2))

## Model 6: AVG
ols.avg2 <- lm(avg_measure ~ djpa + staff + field + age, data = data)
summary(ols.avg2)
cov.avg2 <- vcovHC(ols.avg2, type = "HC")
sqrt(diag(cov.avg2))

## Tables A3-A10 (summarized in Table 4)

## Table A3

## UK
ols.uk.res <- lm(results_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.res)
cov.uk.res <- vcovHC(ols.uk.res, type = "HC")
sqrt(diag(cov.uk.res))

ols.uk.crit <- lm(critint_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.crit)
cov.uk.crit <- vcovHC(ols.uk.crit, type = "HC")
sqrt(diag(cov.uk.crit))

ols.uk.cost <- lm(cost_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.cost)
cov.uk.cost <- vcovHC(ols.uk.cost, type = "HC")
sqrt(diag(cov.uk.cost))

ols.uk.fin <- lm(financial_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.fin)
cov.uk.fin <- vcovHC(ols.uk.fin, type = "HC")
sqrt(diag(cov.uk.fin))

ols.uk.trans <- lm(trans_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.trans)
cov.uk.trans <- vcovHC(ols.uk.trans, type = "HC")
sqrt(diag(cov.uk.trans))

ols.uk.strat <- lm(strategic_uk ~ dfpa + staff + field + age, data = data)
summary(ols.uk.strat)
cov.uk.strat <- vcovHC(ols.uk.strat, type = "HC")
sqrt(diag(cov.uk.strat))

## Table A4

## AUS
ols.aus.res <- lm(results_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.res)
cov.aus.res <- vcovHC(ols.aus.res, type = "HC")
sqrt(diag(cov.aus.res))

ols.aus.crit <- lm(critint_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.crit)
cov.aus.crit <- vcovHC(ols.aus.crit, type = "HC")
sqrt(diag(cov.aus.crit))

ols.aus.cost <- lm(cost_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.cost)
cov.aus.cost <- vcovHC(ols.aus.cost, type = "HC")
sqrt(diag(cov.aus.cost))

ols.aus.fin <- lm(financial_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.fin)
cov.aus.fin <- vcovHC(ols.aus.fin, type = "HC")
sqrt(diag(cov.aus.fin))

ols.aus.trans <- lm(trans_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.trans)
cov.aus.trans <- vcovHC(ols.aus.trans, type = "HC")
sqrt(diag(cov.aus.trans))

ols.aus.strat <- lm(strategic_aus ~ dfpa + staff + field + age, data = data)
summary(ols.aus.strat)
cov.aus.strat <- vcovHC(ols.aus.strat, type = "HC")
sqrt(diag(cov.aus.strat))

## Table A5

## NET
ols.net.res <- lm(results_net ~ dfpa + staff + field + age, data = data)
summary(ols.net.res)
cov.net.res <- vcovHC(ols.net.res, type = "HC")
sqrt(diag(cov.net.res))

ols.net.foc <- lm(focus_net ~ dfpa + staff + field + age, data = data)
summary(ols.net.foc)
cov.net.foc <- vcovHC(ols.net.foc,  type = "HC")
sqrt(diag(cov.net.foc))

ols.net.fin <- lm(financial_net ~ dfpa + staff + field + age, data = data)
summary(ols.net.fin)
cov.net.fin <- vcovHC(ols.net.fin,  type = "HC")
sqrt(diag(cov.net.fin))

ols.net.admin <- lm(admin_net ~ dfpa + staff + field + age, data = data)
summary(ols.net.admin)
cov.net.admin <- vcovHC(ols.net.admin,  type = "HC")
sqrt(diag(cov.net.admin))

## Table A6

## SWE
ols.swe.int <- lm(internal ~ dfpa + staff + field + age, data = data)
summary(ols.swe.int)
cov.swe.int<- vcovHC(ols.swe.int,  type = "HC")
sqrt(diag(cov.swe.int))

ols.swe.ext <- lm(external ~ dfpa + staff + field + age, data = data)
summary(ols.swe.ext)
cov.swe.ext<- vcovHC(ols.swe.ext,  type = "HC")
sqrt(diag(cov.swe.ext))

## Table A7

## UK
ols.uk.res <- lm(results_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.res)
cov.uk.res <- vcovHC(ols.uk.res, type = "HC")
sqrt(diag(cov.uk.res))

ols.uk.crit <- lm(critint_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.crit)
cov.uk.crit <- vcovHC(ols.uk.crit, type = "HC")
sqrt(diag(cov.uk.crit))

ols.uk.cost <- lm(cost_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.cost)
cov.uk.cost <- vcovHC(ols.uk.cost, type = "HC")
sqrt(diag(cov.uk.cost))

ols.uk.fin <- lm(financial_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.fin)
cov.uk.fin <- vcovHC(ols.uk.fin, type = "HC")
sqrt(diag(cov.uk.fin))

ols.uk.trans <- lm(trans_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.trans)
cov.uk.trans <- vcovHC(ols.uk.trans, type = "HC")
sqrt(diag(cov.uk.trans))

ols.uk.strat <- lm(strategic_uk ~ djpa + staff + field + age, data = data)
summary(ols.uk.strat)
cov.uk.strat <- vcovHC(ols.uk.strat, type = "HC")
sqrt(diag(cov.uk.strat))

## Table A8

## AUS
ols.aus.res <- lm(results_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.res)
cov.aus.res <- vcovHC(ols.aus.res, type = "HC")
sqrt(diag(cov.aus.res))

ols.aus.crit <- lm(critint_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.crit)
cov.aus.crit <- vcovHC(ols.aus.crit, type = "HC")
sqrt(diag(cov.aus.crit))

ols.aus.cost <- lm(cost_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.cost)
cov.aus.cost <- vcovHC(ols.aus.cost, type = "HC")
sqrt(diag(cov.aus.cost))

ols.aus.fin <- lm(financial_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.fin)
cov.aus.fin <- vcovHC(ols.aus.fin, type = "HC")
sqrt(diag(cov.aus.fin))

ols.aus.strat <- lm(strategic_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.strat)
cov.aus.strat <- vcovHC(ols.aus.strat, type = "HC")
sqrt(diag(cov.aus.strat))

ols.aus.trans <- lm(trans_aus ~ djpa + staff + field + age, data = data)
summary(ols.aus.trans)
cov.aus.trans <- vcovHC(ols.aus.trans, type = "HC")
sqrt(diag(cov.aus.trans))

## Table A9

## NET
ols.net.res <- lm(results_net ~ djpa + staff + field + age, data = data)
summary(ols.net.res)
cov.net.res <- vcovHC(ols.net.res, type = "HC")
sqrt(diag(cov.net.res))

ols.net.foc <- lm(focus_net ~ djpa + staff + field + age, data = data)
summary(ols.net.foc)
cov.net.foc <- vcovHC(ols.net.foc,  type = "HC")
sqrt(diag(cov.net.foc))

ols.net.fin <- lm(financial_net ~ djpa + staff + field + age, data = data)
summary(ols.net.fin)
cov.net.fin <- vcovHC(ols.net.fin,  type = "HC")
sqrt(diag(cov.net.fin))

ols.net.admin <- lm(admin_net ~ djpa + staff + field + age, data = data)
summary(ols.net.admin)
cov.net.admin <- vcovHC(ols.net.admin,  type = "HC")
sqrt(diag(cov.net.admin))

## Table A10

## SWE
head(data)
ols.swe.int <- lm(internal ~ djpa + staff + field + age, data = data)
summary(ols.swe.int)
cov.swe.int<- vcovHC(ols.swe.int,  type = "HC")
sqrt(diag(cov.swe.int))

ols.swe.ext <- lm(external ~ djpa + staff + field + age, data = data)
summary(ols.swe.ext)
cov.swe.ext<- vcovHC(ols.swe.ext,  type = "HC")
sqrt(diag(cov.swe.ext))

## Table 5
## TCS
ols.dfpa1 <- lm(dfpa ~ ia + tcs + djpa + staff + field + age, data = data)
summary(ols.dfpa1)
cov.dfpa1 <- vcovHC(ols.dfpa1, type = "HC")
sqrt(diag(cov.dfpa1))

## TCQ
ols.dfpa2 <- lm(dfpa ~ ia + tcq + djpa + staff + field + age, data = data)
summary(ols.dfpa2)
cov.dfpa2 <- vcovHC(ols.dfpa2, type = "HC")
sqrt(diag(cov.dfpa2))

## Robustness checks

## Additional controls

## Table A11

ols.uk.iss <- lm(uk_index ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.uk.iss)
cov.uk.iss <- vcovHC(ols.uk.iss, type = "HC")
sqrt(diag(cov.uk.iss))

## Model 2: AUS
ols.aus.iss <- lm(aus_index ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.aus.iss)
cov.aus.iss <- vcovHC(ols.aus.iss, type = "HC")
sqrt(diag(cov.aus.iss))

## Model 3: NET
ols.net.iss <- lm(net_index ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.net.iss)
cov.net.iss <- vcovHC(ols.net.iss, type = "HC")
sqrt(diag(cov.net.iss))

## Model 4: SWE
ols.swe.iss <- lm(swe_index ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.swe.iss)
cov.swe.iss <- vcovHC(ols.swe.iss, type = "HC")
sqrt(diag(cov.swe.iss))

## Model 5: DEN
ols.den.iss <- lm(perf_den ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.den.iss)
cov.den.iss <- vcovHC(ols.den.iss, type = "HC")
sqrt(diag(cov.den.iss))

## Model 6: AVG
ols.avg.iss <- lm(avg_measure ~ dfpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.avg.iss)
cov.avg.iss <- vcovHC(ols.avg.iss, type = "HC")
sqrt(diag(cov.avg.iss))

## Table A12

ols.uk.iss <- lm(uk_index ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.uk.iss)
cov.uk.iss <- vcovHC(ols.uk.iss, type = "HC")
sqrt(diag(cov.uk.iss))

## Model 2: AUS
ols.aus.iss <- lm(aus_index ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.aus.iss)
cov.aus.iss <- vcovHC(ols.aus.iss, type = "HC")
sqrt(diag(cov.aus.iss))

## Model 3: NET
ols.net.iss <- lm(net_index ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.net.iss)
cov.net.iss <- vcovHC(ols.net.iss, type = "HC")
sqrt(diag(cov.net.iss))

## Model 4: SWE
ols.swe.iss <- lm(swe_index ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.swe.iss)
cov.swe.iss <- vcovHC(ols.swe.iss, type = "HC")
sqrt(diag(cov.swe.iss))

## Model 5: DEN
ols.den.iss <- lm(perf_den ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.den.iss)
cov.den.iss <- vcovHC(ols.den.iss, type = "HC")
sqrt(diag(cov.den.iss))

## Model 6: AVG
ols.avg.iss <- lm(avg_measure ~ djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.avg.iss)
cov.avg.iss <- vcovHC(ols.avg.iss, type = "HC")
sqrt(diag(cov.avg.iss))

## Table A13

## TCS
ols.dfpa1.iss <- lm(dfpa ~ ia + tcs + djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.dfpa1.iss)
cov.dfpa1.iss <- vcovHC(ols.dfpa1.iss, type = "HC")
sqrt(diag(cov.dfpa1.iss))

## TCQ
ols.dfpa2.iss <- lm(dfpa ~ ia + tcq + djpa + staff + field + age + development + education + environment + humanitarian + health + asymmetry + voting + geographical, data = data)
summary(ols.dfpa2.iss)
cov.dfpa2.iss <- vcovHC(ols.dfpa2.iss, type = "HC")
sqrt(diag(cov.dfpa2.iss))

## Excluding sets of observations

## Table A14

igos <- data[-c(6, 13:15, 17, 20, 23),]
head(igos)

## Model 1: UK
igo.uk <- lm(uk_index ~ dfpa + staff + field + age, data = igos)
summary(igo.uk)
cov.igo.uk <- vcovHC(igo.uk, type = "HC")
sqrt(diag(cov.igo.uk))

## Model 2: AUS
igo.aus <- lm(aus_index ~ dfpa + staff + field + age, data = igos)
summary(igo.aus)
cov.igo.aus <- vcovHC(igo.aus, type = "HC")
sqrt(diag(cov.igo.aus))

## Model 3: NET
igo.net <- lm(net_index ~ dfpa + staff + field + age, data = igos)
summary(igo.net)
cov.igo.net <- vcovHC(igo.net, type = "HC")
sqrt(diag(cov.igo.net))

## Model 4: SWE
igo.swe <- lm(swe_index ~ dfpa + staff + field + age, data = igos)
summary(igo.swe)
cov.igo.swe <- vcovHC(igo.swe, type = "HC")
sqrt(diag(cov.igo.swe))

## Model 5: DEN
igo.den <- lm(perf_den ~ dfpa + staff + field + age, data = igos)
summary(igo.den)
cov.igo.den <- vcovHC(igo.den, type = "HC")
sqrt(diag(cov.igo.den))

## Model 6: AVG
igo.avg <- lm(avg_measure ~ dfpa + staff + field + age, data = igos)
summary(igo.avg)
cov.igo.avg <- vcovHC(igo.avg, type = "HC")
sqrt(diag(cov.igo.avg))

## Table A15

## Model 1: UK
igo.uk <- lm(uk_index ~ dfpa + staff + field + age, data = igos)
summary(igo.uk)
cov.igo.uk <- vcovHC(igo.uk, type = "HC")
sqrt(diag(cov.igo.uk))

## Model 2: AUS
igo.aus <- lm(aus_index ~ dfpa + staff + field + age, data = igos)
summary(igo.aus)
cov.igo.aus <- vcovHC(igo.aus, type = "HC")
sqrt(diag(cov.igo.aus))

## Model 3: NET
igo.net <- lm(net_index ~ dfpa + staff + field + age, data = igos)
summary(igo.net)
cov.igo.net <- vcovHC(igo.net, type = "HC")
sqrt(diag(cov.igo.net))

## Model 4: SWE
igo.swe <- lm(swe_index ~ dfpa + staff + field + age, data = igos)
summary(igo.swe)
cov.igo.swe <- vcovHC(igo.swe, type = "HC")
sqrt(diag(cov.igo.swe))

## Model 5: DEN
igo.den <- lm(perf_den ~ dfpa + staff + field + age, data = igos)
summary(igo.den)
cov.igo.den <- vcovHC(igo.den, type = "HC")
sqrt(diag(cov.igo.den))

## Model 6: AVG
igo.avg <- lm(avg_measure ~ djpa + staff + field + age, data = igos)
summary(igo.avg)
cov.igo.avg <- vcovHC(igo.avg, type = "HC")
sqrt(diag(cov.igo.avg))

## Table A16

## TCS
igo.ols.dfpa1 <- lm(dfpa ~ ia + tcs + djpa + staff + field + age, data = igos)
summary(igo.ols.dfpa1)
cov.igo.dfpa1 <- vcovHC(igo.ols.dfpa1, type = "HC")
sqrt(diag(cov.igo.dfpa1))

## TCQ
igo.ols.dfpa2 <- lm(dfpa ~ ia + tcq + djpa + staff + field + age, data = igos)
summary(igo.ols.dfpa2)
cov.igo.dfpa2 <- vcovHC(igo.ols.dfpa2, type = "HC")
sqrt(diag(cov.igo.dfpa2))

## Table A17

## UK
cd.uk1 <- cookd(ols.uk1)
cd.uk1[cd.uk1>4/length(cd.uk1)]

## 4, 8, 20, 49

dffits.uk1 <- dffits(ols.uk1)
dffits.uk1[dffits.uk1>2*sqrt(length(ols.uk1$coefficients)/nobs(ols.uk1))]

## 20, 33, 49

dfbetas.uk1 <- dfbetas(ols.uk1)[,"dfpa"]
dfbetas.uk1[dfbetas.uk1>2/sqrt(nobs(ols.uk1))]

## 33

uk.inf1 <- data[-c(4, 8, 20, 33, 49),]

## CDB, COMSEC, ICRC, PIDG, UNHCR

uk.infobs1 <- lm(uk_index ~ dfpa + staff + field + age, data = uk.inf1)
summary(uk.infobs1)
cov.uk.infobs1 <- vcovHC(uk.infobs1, type = "HC")
sqrt(diag(cov.uk.infobs1))

## AUS
cd.aus1 <- cookd(ols.aus1)
cd.aus1[cd.aus1>4/length(cd.aus1)]
## 6, 8, 17

dffits.aus1 <- dffits(ols.aus1)
dffits.aus1[dffits.aus1>2*sqrt(length(ols.aus1$coefficients)/nobs(ols.aus1))]
## None

dfbetas.aus1 <- dfbetas(ols.aus1)[,"dfpa"]
dfbetas.aus1[dfbetas.aus1>2/sqrt(nobs(ols.aus1))]
## 40

aus.inf1 <- data[-c(6, 8, 17, 40),]

## CGIAR, COMSEC, GFATM, UNESCO

aus.infobs1 <- lm(aus_index ~ dfpa + staff + field + age, data = aus.inf1)
summary(aus.infobs1)
cov.aus.infobs1 <- vcovHC(aus.infobs1, type = "HC")
sqrt(diag(cov.aus.infobs1))

## NET
cd.net1 <- cookd(ols.net1)
cd.net1[cd.net1>4/length(cd.net1)]

## 16, 37, 40, 53

dffits.net1 <- dffits(ols.net1)
dffits.net1[dffits.net1>2*sqrt(length(ols.net1$coefficients)/nobs(ols.net1))]

## 16, 53

dfbetas.net1 <- dfbetas(ols.net1)[,"dfpa"]
dfbetas.net1[dfbetas.net1>2/sqrt(nobs(ols.net1))]

## 40

net.inf1 <- data[-c(16, 37, 40, 53),]

## GEF, UNCTAD, UNESCO, WTO

net.infobs1 <- lm(net_index ~ dfpa + staff + field + age, data = net.inf1)
summary(net.infobs1)
cov.net.infobs1 <- vcovHC(net.infobs1, type = "HC")
robust.net.infobs1 <- sqrt(diag(cov.net.infobs1))

## SWE
cd.swe1 <- cookd(ols.swe1)
cd.swe1[cd.swe1>4/length(cd.swe1)]

## 14, 16

dffits.swe1 <- dffits(ols.swe1)
dffits.swe1[dffits.swe1>2*sqrt(length(ols.swe1$coefficients)/nobs(ols.swe1))]

## 14, 50

dfbetas.swe1 <- dfbetas(ols.swe1)[,"dfpa"]
dfbetas.swe1[dfbetas.swe1>2/sqrt(nobs(ols.swe1))]

## 50

swe.inf1 <- data[-c(14, 16, 50),]

## GAVI, GEF, WB

swe.infobs1 <- lm(swe_index ~ dfpa + staff + field + age, data = swe.inf1)
summary(swe.infobs1)
cov.swe.infobs1 <- vcovHC(swe.infobs1, type = "HC")
sqrt(diag(cov.swe.infobs1))

## DEN
cd.den1 <- cookd(ols.den1)
cd.den1[cd.den1>4/length(cd.den1)]

## 3, 21, 48

dffits.den1 <- dffits(ols.den1)
dffits.den1[dffits.den1>2*sqrt(length(ols.den1$coefficients)/nobs(ols.den1))]

## 3, 21

dfbetas.den1 <- dfbetas(ols.den1)[,"dfpa"]
dfbetas.den1[dfbetas.den1>2/sqrt(nobs(ols.den1))]

## 3

den.inf1 <- data[-c(3, 21, 48),]

## ASDB, IFAD, UNRWA

den.infobs1 <- lm(perf_den ~ dfpa + staff + field + age, data = den.inf1)
summary(den.infobs1)
cov.den.infobs1 <- vcovHC(den.infobs1, type = "HC")
sqrt(diag(cov.den.infobs1))

## AVG
cd.avg1 <- cookd(ols.avg1)
cd.avg1[cd.avg1>4/length(cd.avg1)]

## 6, 8, 20, 53

dffits.avg1 <- dffits(ols.avg1)
dffits.avg1[dffits.avg1>2*sqrt(length(ols.avg1$coefficients)/nobs(ols.avg1))]

## 20, 53

dfbetas.avg1 <- dfbetas(ols.avg1)[,"dfpa"]
dfbetas.avg1[dfbetas.avg1>2/sqrt(nobs(ols.avg1))]

## 40

avg.inf1 <- data[-c(6, 8, 20, 40, 53),]

## CGIAR, COMSEC, ICRC, PIDG, WTO

avg.infobs1 <- lm(avg_measure ~ dfpa + staff + field + age, data = avg.inf1)
summary(avg.infobs1)
cov.avg.infobs1 <- vcovHC(avg.infobs1, type = "HC")
sqrt(diag(cov.avg.infobs1))

## Table A18

## UK
cd.uk2 <- cookd(ols.uk2)
cd.uk2[cd.uk2>4/length(cd.uk2)]

## 8, 10, 33

dffits.uk2 <- dffits(ols.uk2)
dffits.uk2[dffits.uk2>2*sqrt(length(ols.uk2$coefficients)/nobs(ols.uk2))]

## 10, 33

dfbetas.uk2 <- dfbetas(ols.uk2)[,"djpa"]
dfbetas.uk2[dfbetas.uk2>2/sqrt(nobs(ols.uk2))]

## 8, 9

uk.inf2 <- data[-c(8, 9, 10, 33),]
## COMSEC, EBRD, EDF, PIDG

uk.infobs2 <- lm(uk_index ~ djpa + staff + field + age, data = uk.inf2)
summary(uk.infobs2)
cov.uk.infobs2 <- vcovHC(uk.infobs2, type = "HC")
sqrt(diag(cov.uk.infobs2))

## AUS
cd.aus2 <- cookd(ols.aus2)
cd.aus2[cd.aus2>4/length(cd.aus2)]
## 8

dffits.aus2 <- dffits(ols.aus2)
dffits.aus2[dffits.aus2>2*sqrt(length(ols.aus2$coefficients)/nobs(ols.aus2))]
## None

dfbetas.aus2 <- dfbetas(ols.aus2)[,"djpa"]
dfbetas.aus2[dfbetas.aus2>2/sqrt(nobs(ols.aus2))]
## 51

aus.inf2 <- data[-c(8, 51),]
data$IO
## COMSEC, WFP

aus.infobs2 <- lm(aus_index ~ djpa + staff + field + age, data = aus.inf2)
summary(aus.infobs2)
cov.aus.infobs2 <- vcovHC(aus.infobs2, type = "HC")
sqrt(diag(cov.aus.infobs2))

## NET
cd.net2 <- cookd(ols.net2)
cd.net2[cd.net2>4/length(cd.net2)]

## 16, 37, 40

dffits.net2 <- dffits(ols.net2)
dffits.net2[dffits.net2>2*sqrt(length(ols.net2$coefficients)/nobs(ols.net2))]

## 16

dfbetas.net2 <- dfbetas(ols.net2)[,"djpa"]
dfbetas.net2[dfbetas.net2>2/sqrt(nobs(ols.net2))]

## 16, 37

net.inf2 <- data[-c(16, 37, 40),]
data$IO
## GEF, UNCTAD, UNESCO

net.infobs2 <- lm(net_index ~ djpa + staff + field + age, data = net.inf2)
summary(net.infobs2)
cov.net.infobs2 <- vcovHC(net.infobs2, type = "HC")
sqrt(diag(cov.net.infobs2))

## SWE
cd.swe2 <- cookd(ols.swe2)
cd.swe2[cd.swe2>4/length(cd.swe2)]

## 14, 16

dffits.swe2 <- dffits(ols.swe2)
dffits.swe2[dffits.swe2>2*sqrt(length(ols.swe2$coefficients)/nobs(ols.swe2))]

## 14

dfbetas.swe2 <- dfbetas(ols.swe2)[,"djpa"]
dfbetas.swe2[dfbetas.swe2>2/sqrt(nobs(ols.swe2))]

## None

swe.inf2 <- data[-c(14, 16),]

## GAVI, GEF

swe.infobs2 <- lm(swe_index ~ djpa + staff + field + age, data = swe.inf2)
summary(swe.infobs2)
cov.swe.infobs2 <- vcovHC(swe.infobs2, type = "HC")
sqrt(diag(cov.swe.infobs2))

## DEN
cd.den2 <- cookd(ols.den2)
cd.den2[cd.den2>4/length(cd.den2)]

## 21, 41, 48

dffits.den2 <- dffits(ols.den2)
dffits.den2[dffits.den2>2*sqrt(length(ols.den2$coefficients)/nobs(ols.den2))]

## 21, 41

dfbetas.den2 <- dfbetas(ols.den2)[,"djpa"]
dfbetas.den2[dfbetas.den2>2/sqrt(nobs(ols.den2))]

## 21

den.inf2 <- data[-c(21, 41, 48),]

## IFAD, UNFPA, UNRWA

den.infobs2 <- lm(perf_den ~ djpa + staff + field + age, data = den.inf2)
summary(den.infobs2)
cov.den.infobs2 <- vcovHC(den.infobs2, type = "HC")
sqrt(diag(cov.den.infobs2))

## AVG
cd.avg2 <- cookd(ols.avg2)
cd.avg2[cd.avg2>4/length(cd.avg2)]

## 8

dffits.avg2 <- dffits(ols.avg2)
dffits.avg2[dffits.avg2>2*sqrt(length(ols.avg2$coefficients)/nobs(ols.avg2))]

## None

dfbetas.avg2 <- dfbetas(ols.avg2)[,"djpa"]
dfbetas.avg2[dfbetas.avg2>2/sqrt(nobs(ols.avg2))]

## 37, 45

avg.inf2 <- data[-c(8, 37, 45),]

## COMSEC, UNCTAD, UNISDR

avg.infobs2 <- lm(avg_measure ~ djpa + staff + field + age, data = avg.inf2)
summary(avg.infobs2)
cov.avg.infobs2 <- vcovHC(avg.infobs2, type = "HC")
sqrt(diag(cov.avg.infobs2))

## Table A19

cd.dfpa1 <- cookd(ols.dfpa1)
cd.dfpa1[cd.dfpa1>4/length(cd.dfpa1)]

## 5, 10, 30, 37, 49

dffits.dfpa1 <- dffits(ols.dfpa1)
dffits.dfpa1[dffits.dfpa1>2*sqrt(length(ols.dfpa1$coefficients)/nobs(ols.dfpa1))]

## 10, 30

dfbetas.dfpa1 <- dfbetas(ols.dfpa1)[,"ia"]
dfbetas.dfpa1[dfbetas.dfpa1>2/sqrt(nobs(ols.dfpa1))]

## 5, 30, 49

dfbetas.dfpa1 <- dfbetas(ols.dfpa1)[,"tcs"]
dfbetas.dfpa1[dfbetas.dfpa1>2/sqrt(nobs(ols.dfpa1))]

## 40, 49

dfpa1.inf <- data[-c(5, 10, 30, 37, 40, 49),]
data$IO
## CERF, EDF, OCHA, UNCTAD, UNESCO, UNW

ols.dfpa1.inf <- lm(dfpa ~ ia + tcs + djpa + staff + field + age, data = dfpa1.inf)
summary(ols.dfpa1.inf)
cov.dfpa1.inf <- vcovHC(ols.dfpa1.inf, type = "HC")
sqrt(diag(cov.dfpa1.inf))

## DFPA2
cd.dfpa2 <- cookd(ols.dfpa2)
cd.dfpa2[cd.dfpa2>4/length(cd.dfpa2)]

## 10, 37, 49, 53

dffits.dfpa2 <- dffits(ols.dfpa2)
dffits.dfpa2[dffits.dfpa2>2*sqrt(length(ols.dfpa2$coefficients)/nobs(ols.dfpa2))]

## 10

dfbetas.dfpa2 <- dfbetas(ols.dfpa2)[,"ia"]
dfbetas.dfpa2[dfbetas.dfpa2>2/sqrt(nobs(ols.dfpa2))]

## 33, 49, 53

dfbetas.dfpa2 <- dfbetas(ols.dfpa2)[,"tcq"]
dfbetas.dfpa2[dfbetas.dfpa2>2/sqrt(nobs(ols.dfpa2))]

## 2, 19, 40

dfpa2.inf <- data[-c(2, 10, 19, 33, 37, 49, 53),]
data$IO
## AFDB, EDF, IADB, PIDG, UNCTAD, UNW, WTO

ols.dfpa2.inf <- lm(dfpa ~ ia + tcq + djpa + staff + field + age, data = dfpa2.inf)
summary(ols.dfpa2.inf)
cov.dfpa2.inf <- vcovHC(ols.dfpa2.inf, type = "HC")
sqrt(diag(cov.dfpa2.inf))

## 2SLS IV analysis

## Table A20

## Model 1: UK
fml.uk <- list("mu1" = uk_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.uk <- systemfit(fml.uk, "2SLS", inst=inst, data = data)
summary(tsls.uk)

## Model 2: AUS
fml.aus <- list("mu1" = aus_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.aus <- systemfit(fml.aus, "2SLS", inst=inst, data = data)
summary(tsls.aus)

## Model 3: NET
fml.net <- list("mu1" = net_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.net <- systemfit(fml.net, "2SLS", inst=inst, data = data)
summary(tsls.net)

## Model 4: SWE
fml.swe <- list("mu1" = swe_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.swe <- systemfit(fml.swe, "2SLS", inst=inst, data = data)
summary(tsls.swe)

## Model 5: DEN
fml.den <- list("mu1" = perf_den ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.den <- systemfit(fml.den, "2SLS", inst=inst, data = data)
summary(tsls.den)

## Model 6: AVG
fml.avg <- list("mu1" = avg_measure ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcs + staff + field + age)
inst <- ~ tcs + staff + field + age

tsls.avg <- systemfit(fml.avg, "2SLS", inst=inst, data = data)
summary(tsls.avg)

## Table A21

## Model 1: UK
fml.uk <- list("mu1" = uk_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.uk <- systemfit(fml.uk, "2SLS", inst=inst, data = data)
summary(tsls.uk)

## Model 2: AUS
fml.aus <- list("mu1" = aus_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.aus <- systemfit(fml.aus, "2SLS", inst=inst, data = data)
summary(tsls.aus)

## Model 3: NET
fml.net <- list("mu1" = net_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.net <- systemfit(fml.net, "2SLS", inst=inst, data = data)
summary(tsls.net)

## Model 4: SWE
fml.swe <- list("mu1" = swe_index ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.swe <- systemfit(fml.swe, "2SLS", inst=inst, data = data)
summary(tsls.swe)

## Model 5: DEN
fml.den <- list("mu1" = perf_den ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.den <- systemfit(fml.den, "2SLS", inst=inst, data = data)
summary(tsls.den)

## Model 6: AVG
fml.avg <- list("mu1" = avg_measure ~ dfpa + staff + field + age, "mu2" = dfpa ~ tcq + staff + field + age)
inst <- ~ tcq + staff + field + age

tsls.avg <- systemfit(fml.avg, "2SLS", inst=inst, data = data)
summary(tsls.avg)