使用公式从statsmodels实现IV2SLS

2024-09-28 17:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

这里的代码将重现类似于我正在做的事情

import pandas as pd
import numpy as np
import scipy as sp
from statsmodels.sandbox.regression.gmm import IV2SLS
from numpy.linalg import LinAlgError
from sklearn.preprocessing import StandardScaler

def gen_data(Sigma, n=100):
    try:
        Chol = sp.linalg.cholesky(Sigma)
        X = np.random.randn(n,Sigma.shape[0])
        X = StandardScaler().fit_transform(X)
        D = X @ Chol
    except LinAlgError:
        print("Provide a valid covariance matrix")
        D = np.nan
    return D

Sigma = np.array(
    [[5,1,0],
     [1,4,2],
     [0,2,3]]
)
df = pd.DataFrame(gen_data(Sigma),columns=["z","x1","u"])
df['y'] = 2*df['x1'] + 2*(df['x1']+df['u']) + np.random.normal(0,1,size=len(df))
IV2SLS.from_formula('y ~ u + [x1 ~ z]', data=df)

据我所知,从一些文档——(1)(2)(3)——我应该能够从上面的代码运行回归。。。我不知道为什么它不喜欢[x1 ~ z]的语法


Tags: fromimportnumpydfdataasnpsigma