classmethod LinearFactorModel.from_formula(formula: str, data: DataFrame, *, portfolios: DataFrame | None = None, risk_free: bool = False, sigma: ndarray | DataArray | DataFrame | Series | None = None) LinearFactorModel[source]
formula: str

Formula modified for the syntax described in the notes

data: DataFrame

DataFrame containing the variables used in the formula

portfolios: DataFrame | None = None

Portfolios to be used in the model. If provided, must use formula syntax containing only factors.

risk_free: bool = False

Flag indicating whether the risk-free rate should be estimated from returns along other risk premia. If False, the returns are assumed to be excess returns using the correct risk-free rate.

sigma: ndarray | DataArray | DataFrame | Series | None = None

Positive definite residual covariance (nportfolio by nportfolio)


Model instance

Return type:



The formula can be used in one of two ways. The first specified only the factors and uses the data provided in portfolios as the test portfolios. The second specified the portfolio using + to separate the test portfolios and ~ to separate the test portfolios from the factors.


>>> from linearmodels.datasets import french
>>> from linearmodels.asset_pricing import LinearFactorModel
>>> data = french.load()
>>> formula = "S1M1 + S1M5 + S3M3 + S5M1 + S5M5 ~ MktRF + SMB + HML"
>>> mod = LinearFactorModel.from_formula(formula, data)

Using only factors

>>> portfolios = data[["S1M1", "S1M5", "S3M1", "S3M5", "S5M1", "S5M5"]]
>>> formula = "MktRF + SMB + HML"
>>> mod = LinearFactorModel.from_formula(formula, data, portfolios=portfolios)