Exemple #1
0
def gls_model(X, y, test_size=0.25):

    X_train, X_test, y_train, y_test = train_test_split(X,
                                                        y,
                                                        test_size=test_size)

    gls = GLS(y_train, X_train).fit(cov_type='HC1')

    coeffs = (gls.params.to_frame().rename(columns={
        0: "coeff"
    }).merge(
        gls.pvalues.to_frame().rename(columns={0: "p-value"}),
        left_index=True,
        right_index=True,
    ).assign(coeff=lambda df: df.apply(
        lambda r: r["coeff"] if r["p-value"] < 0.05 else np.nan, axis=1))[[
            "coeff"
        ]])

    mse = gls.predict(X_test).pipe(lambda s: (s - y_test)**2).mean()

    return {"model": gls, "coeffs": coeffs, "mse": mse}