# Overview

causalELM enables Estimation of causal quantities of interest in research designs where a counterfactual must be predicted and compared to the observed outcomes. More specifically, CausalELM provides a simple API to execute interupted time series analysis, G-Computation, and double machine learning as well as estimation of the CATE via S-Learning, T-Learning, X-Learning, and R-learning. Once a causal model has beeen estimated, causalELM's summarize method provides basic information about the model as well as a p-value and standard error estimated with approximate randomization inference. One can then validate causal modeling assumptions for any model with a single call to the validate method. In all of these implementations, causalELM predicts the counterfactuals using an Extreme Learning Machine that includes an L2 penalty by default. In this context, ELMs strike a good balance between prediction accuracy, generalization, ease of implementation, speed, and interpretability.

### Features

- Simple interface enables estimating causal effects in only a few lines of code
- Analytically derived L2 penalty reduces cross validation time and multicollinearity
- Fast automatic cross validation works with longitudinal, panel, and time series data
- Includes 13 activation functions and allows user-defined activation functions
- Single interface for continous, binary, and categorical outcome variables
- Estimation of p-values and standard errors via asymptotic randomization inference
- No dependencies outside of the Julia standard library
- Validate causal modeling assumptions with one line of code
- Non-parametric randomization (permutation) inference-based p-values for all models

### What's New?

- Added support for dataframes
- Estimators can handle any array whose values are <:Real
- Estimator constructors are now called with model(X, T, Y) instead of model(X, Y, T)
- Improved documentation
- causalELM has a new logo

### Comparison with Other Packages

Other packages, mainly EconML, DoWhy, and CausalML, have similar funcitonality. Beides being written in Julia rather than Python, the main differences between CausalELM and these libraries are:

- causalELM uses extreme learning machines instead of tree-based, linear, or deep learners
- causalELM performs cross validation during training
- causalELM performs inference via asymptotic randomization inference rather than bootstrapping
- causalELM does not require you to instantiate a model and pass it into a separate class or struct for training
- causalELM creates train/test splits automatically
- causalELM does not have external dependencies: all the functions it uses are in the Julia standard library
- causalELM is simpler to use but has less flexibility than the other libraries

### Installation

causalELM requires Julia version 1.7 or greater and can be installed from the REPL as shown below.

```
using Pkg
Pkg.add("CausalELM")
```