classmethod IV3SLS.from_formula(formula, data, *, sigma=None, weights=None)[source]

Specify a 3SLS using the formula interface

formula{str, dict-like}

Either a string or a dictionary of strings where each value in the dictionary represents a single equation. See Notes for a description of the accepted syntax


Frame containing named variables


Prespecified residual covariance to use in GLS estimation. If not provided, FGLS is implemented based on an estimate of sigma.


Dictionary like object (e.g. a DataFrame) containing variable weights. Each entry must have the same number of observations as data. If an equation label is not a key weights, the weights will be set to unity


Model instance


Models can be specified in one of two ways. The first uses curly braces to encapsulate equations. The second uses a dictionary where each key is an equation name.


The simplest format uses standard formulas for each equation in a dictionary. Best practice is to use an Ordered Dictionary

>>> import pandas as pd
>>> import numpy as np
>>> cols = ["y1", "x1_1", "x1_2", "z1", "y2", "x2_1", "x2_2", "z2"]
>>> data = pd.DataFrame(np.random.randn(500, 8), columns=cols)
>>> from linearmodels.system import IV3SLS
>>> formula = {"eq1": "y1 ~ 1 + x1_1 + [x1_2 ~ z1]",
...            "eq2": "y2 ~ 1 + x2_1 + [x2_2 ~ z2]"}
>>> mod = IV3SLS.from_formula(formula, data)

The second format uses curly braces {} to surround distinct equations

>>> formula = "{y1 ~ 1 + x1_1 + [x1_2 ~ z1]} {y2 ~ 1 + x2_1 + [x2_2 ~ z2]}"
>>> mod = IV3SLS.from_formula(formula, data)

It is also possible to include equation labels when using curly braces

>>> formula = "{eq1: y1 ~ 1 + x1_1 + [x1_2 ~ z1]} {eq2: y2 ~ 1 + x2_1 + [x2_2 ~ z2]}"
>>> mod = IV3SLS.from_formula(formula, data)