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}