Skip to content

droodman/WildBootTests.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Documenter.jl
Jun 8, 2024
23a1e59 · Jun 8, 2024
Apr 17, 2024
Jun 8, 2024
Apr 18, 2024
Aug 23, 2022
Apr 17, 2024
Dec 23, 2023
May 26, 2023
Nov 28, 2021
Dec 29, 2023
Dec 29, 2023
Feb 25, 2023
Apr 17, 2024
Apr 17, 2024

Repository files navigation

WildBootTests.jl

WildBootTests.jl performs wild bootstrap-based hypothesis tests at extreme speed. It is intended mainly for linear models: ordinary least squares (OLS) and instrumental variables/two-stage least squares (IV/2SLS). For an introduction to the wild bootstrap and the algorithms deployed here, see Roodman et al. (2019). It is a Julia program, but can be accessed from other environments as demonstrated below.

Documentation

Examples

In all cases, to install, start Julia and type using Pkg; Pkg.add("WildBootTests").

From Julia

using WildBootTests, CSV, DataFrames, StatsModels, Plots
d = download("https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv");
df = CSV.read(d, DataFrame);
f = @formula(y ~ 1 + x);                            # state OLS model
f = apply_schema(f, schema(f, df));                 # link model to data
resp, predexog = modelcols(f, df);                  # extract response & (exogenous) predictor variables
clustid = df.firm;                                  # extract clustering variable
R = [0 1]; r = [1];                                 # put null in Rβ = r form, where β is parameter vector

test = wildboottest(R, r; resp, predexog, clustid)  # run test & display results
plot(plotpoints(test)...)                           # plot confidence curve

From R via fwildclusterboot

library(fwildclusterboot)
df <- read.csv("https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv")
lm_fit <- lm(y ~ x, data = df)
boot_lm <- boottest(lm_fit, clustid = "firm", param = "x", r = 1, B = 999,  boot_algo = "WildBootTests.jl")
summary(boot_lm)
plot(boot_lm)

From via JuliaConnectoR

library(JuliaConnectoR)
startJuliaServer()
WildBootTests <- juliaImport("WildBootTests")
df <- read.csv(file = 'https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv')
R <- matrix(c(0,1), nrow=1); r <- c(1)
test <- WildBootTests$wildboottest(R, r, resp=df$y, predexog=cbind(1, df$x), clustid=df$firm)
test
WildBootTests$teststat(test)
WildBootTests$p(test)
WildBootTests$ci(test)
plotpoints <- WildBootTests$plotpoints(test)
plot(plotpoints$X[[1]], plotpoints$p, type="l")

From Python via PyJulia

from julia import WildBootTests as wbt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv(r'https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv')
R = np.array([[0, 1]]); r = np.array([1])
resp = df.y.values
predexog = np.c_[np.ones(df.firm.size), df.x]
clustid = df.firm.values
test = wbt.wildboottest(R, r, resp=resp, predexog=predexog, clustid=clustid)
wbt.teststat(test)
wbt.p(test)
wbt.ci(test)
plotpoints = wbt.plotpoints(test)
plt.plot(plotpoints.X[0], plotpoints.p)

From Stata via boottest

import delimited https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv
regress y x, cluster(firm)
boottest x, reps(999) julia

From Stata via Python and PyJulia

import delimited https://raw.github.com/vincentarelbundock/Rdatasets/master/csv/sandwich/PetersenCL.csv
python
from julia import WildBootTests as wbt
import numpy as np
from sfi import Data

R = np.array([[0, 1]]); r = np.array([1])
resp = np.asarray(Data.get('y'))
predexog = np.c_[np.ones(resp.size), np.asarray(Data.get('x'))]
clustid = np.asarray(Data.get('firm'))
test = wbt.wildboottest(R, r, resp=resp, predexog=predexog, clustid=clustid)
wbt.p(test)
wbt.teststat(test)
wbt.ci(test)
end