Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 36 additions & 32 deletions mgwr/summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,32 @@
from .diagnostics import get_AICc


def summaryModel(self):
summary = '=' * 75 + '\n'
summary += "%-54s %20s\n" % ('Model type', self.family.__class__.__name__)
summary += "%-60s %14d\n" % ('Number of observations:', self.n)
summary += "%-60s %14d\n\n" % ('Number of covariates:', self.k)
def summaryModel(self) -> str:
"""Summary of model

Returns:
str: print out the model summary information
"""
summary = f"{'=' * 75} \n"
summary += f"{'Model type':<54s} {self.family.__class__.__name__:20s}\n"
summary += f"{'Number of observations:':<60s} {self.n:14d}\n"
summary += f"{'Number of covariates:':<60s} {self.k:14d}\n\n"
return summary


def summaryGLM(self):
def summaryGLM(self) -> str:
"""Summary of GLM

if self.name_x is not None:
XNames = list(self.name_x)
if len(XNames) < self.k:
XNames = ["Intercept"] + XNames
else:
XNames = ["X" + str(i) for i in range(self.k)]
Returns:
str: print out the GLM summary information
"""

XNames = [f"X{i}" for i in range(self.k)]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not equivalent of the original code. You are removing functionality here.

glm_rslt = GLM(self.model.y, self.model.X, constant=False,
family=self.family).fit()

summary = "%s\n" % ('Global Regression Results')
summary += '-' * 75 + '\n'
summary = "Global Regression Results\n"
summary += f"{'-' * 75} \n"

if isinstance(self.family, Gaussian):
summary += "%-62s %12.3f\n" % ('Residual sum of squares:',
Expand Down Expand Up @@ -52,20 +57,20 @@ def summaryGLM(self):
'-' * 10, '-' * 10)
for i in range(self.k):
summary += "%-31s %10.3f %10.3f %10.3f %10.3f\n" % (
XNames[i][:30], glm_rslt.params[i], glm_rslt.bse[i],
XNames[i], glm_rslt.params[i], glm_rslt.bse[i],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you removing [:30]? That is not a stylistic change and there is a reason it is in the original code.

glm_rslt.tvalues[i], glm_rslt.pvalues[i])
summary += "\n"
return summary


def summaryGWR(self):
if self.name_x is not None:
XNames = list(self.name_x)
if len(XNames) < self.k:
XNames = ["Intercept"] + XNames
def summaryGWR(self) -> str:
"""Summary of GWR

else:
XNames = ["X" + str(i) for i in range(self.k)]
Returns:
str: print out the GWR summary information
"""

XNames = ["X" + str(i) for i in range(self.k)]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again, this is not equivalent!


summary = "%s\n" % ('Geographically Weighted Regression (GWR) Results')
summary += '-' * 75 + '\n'
Expand Down Expand Up @@ -122,7 +127,7 @@ def summaryGWR(self):
'-' * 20, '-' * 10, '-' * 10, '-' * 10, '-' * 10, '-' * 10)
for i in range(self.k):
summary += "%-20s %10.3f %10.3f %10.3f %10.3f %10.3f\n" % (
XNames[i][:20], np.mean(self.params[:, i]), np.std(self.params[:, i]),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above.

XNames[i], np.mean(self.params[:, i]), np.std(self.params[:, i]),
np.min(self.params[:, i]), np.median(self.params[:, i]),
np.max(self.params[:, i]))

Expand All @@ -131,15 +136,14 @@ def summaryGWR(self):
return summary


def summaryMGWR(self):
def summaryMGWR(self) -> str:
"""Summary of MGWR

if self.name_x is not None:
XNames = list(self.name_x)
if len(XNames) < self.k:
XNames = ["Intercept"] + XNames
Returns:
str: print out the MGWR summary information
"""

else:
XNames = ["X" + str(i) for i in range(self.k)]
XNames = ["X" + str(i) for i in range(self.k)]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above


summary = ''
summary += "%s\n" % (
Expand Down Expand Up @@ -199,9 +203,9 @@ def summaryMGWR(self):
'-' * 20, '-' * 10, '-' * 10, '-' * 10, '-' * 10, '-' * 10)
for i in range(self.k):
summary += "%-20s %10.3f %10.3f %10.3f %10.3f %10.3f\n" % (
XNames[i][:20], np.mean(self.params[:, i]), np.std(self.params[:, i]),
XNames[i], np.mean(self.params[:, i]), np.std(self.params[:, i]),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same as above

np.min(self.params[:, i]), np.median(self.params[:, i]),
np.max(self.params[:, i]))

summary += '=' * 75 + '\n'
return summary
return summary
106 changes: 53 additions & 53 deletions mgwr/tests/test_gwr.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ def test_BS_F(self):
BIC = get_BIC(rslt)
CV = get_CV(rslt)

self.assertAlmostEquals(np.floor(AICc), 894.0)
self.assertAlmostEquals(np.floor(AIC), 890.0)
self.assertAlmostEquals(np.floor(BIC), 944.0)
self.assertAlmostEquals(np.round(CV, 2), 18.25)
self.assertAlmostEqual(np.floor(AICc), 894.0)
self.assertAlmostEqual(np.floor(AIC), 890.0)
self.assertAlmostEqual(np.floor(BIC), 944.0)
self.assertAlmostEqual(np.round(CV, 2), 18.25)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-04)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-04)
Expand Down Expand Up @@ -135,12 +135,12 @@ def test_BS_NN(self):
np.testing.assert_allclose(
adj_alpha, np.array([0.02034978, 0.01017489, 0.0002035]),
rtol=1e-04)
self.assertAlmostEquals(critical_t, 2.6011011542649394)
self.assertAlmostEquals(np.around(R2, 4), 0.5924)
self.assertAlmostEquals(np.floor(AICc), 896.0)
self.assertAlmostEquals(np.floor(AIC), 892.0)
self.assertAlmostEquals(np.floor(BIC), 941.0)
self.assertAlmostEquals(np.around(CV, 2), 19.19)
self.assertAlmostEqual(critical_t, 2.6011011542649394)
self.assertAlmostEqual(np.around(R2, 4), 0.5924)
self.assertAlmostEqual(np.floor(AICc), 896.0)
self.assertAlmostEqual(np.floor(AIC), 892.0)
self.assertAlmostEqual(np.floor(BIC), 941.0)
self.assertAlmostEqual(np.around(CV, 2), 19.19)
np.testing.assert_allclose(corr1, corr2, rtol=1e-04)
np.testing.assert_allclose(vif1, vif2, rtol=1e-04)
np.testing.assert_allclose(cn1, cn2, rtol=1e-04)
Expand Down Expand Up @@ -202,10 +202,10 @@ def test_GS_F(self):
BIC = get_BIC(rslt)
CV = get_CV(rslt)

self.assertAlmostEquals(np.floor(AICc), 895.0)
self.assertAlmostEquals(np.floor(AIC), 890.0)
self.assertAlmostEquals(np.floor(BIC), 943.0)
self.assertAlmostEquals(np.around(CV, 2), 18.21)
self.assertAlmostEqual(np.floor(AICc), 895.0)
self.assertAlmostEqual(np.floor(AIC), 890.0)
self.assertAlmostEqual(np.floor(BIC), 943.0)
self.assertAlmostEqual(np.around(CV, 2), 18.21)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-04)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-04)
Expand Down Expand Up @@ -254,10 +254,10 @@ def test_GS_NN(self):
BIC = get_BIC(rslt)
CV = get_CV(rslt)

self.assertAlmostEquals(np.floor(AICc), 896.0)
self.assertAlmostEquals(np.floor(AIC), 894.0)
self.assertAlmostEquals(np.floor(BIC), 922.0)
self.assertAlmostEquals(np.around(CV, 2), 17.91)
self.assertAlmostEqual(np.floor(AICc), 896.0)
self.assertAlmostEqual(np.floor(AIC), 894.0)
self.assertAlmostEqual(np.floor(BIC), 922.0)
self.assertAlmostEqual(np.around(CV, 2), 17.91)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-04)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-04)
Expand Down Expand Up @@ -473,11 +473,11 @@ def test_BS_NN_longlat(self):
CV = get_CV(rslt)
R2 = rslt.R2

self.assertAlmostEquals(np.around(R2, 4), 0.5921)
self.assertAlmostEquals(np.floor(AICc), 896.0)
self.assertAlmostEquals(np.floor(AIC), 892.0)
self.assertAlmostEquals(np.floor(BIC), 941.0)
self.assertAlmostEquals(np.around(CV, 2), 19.11)
self.assertAlmostEqual(np.around(R2, 4), 0.5921)
self.assertAlmostEqual(np.floor(AICc), 896.0)
self.assertAlmostEqual(np.floor(AIC), 892.0)
self.assertAlmostEqual(np.floor(BIC), 941.0)
self.assertAlmostEqual(np.around(CV, 2), 19.11)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-04)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-04)
Expand Down Expand Up @@ -557,9 +557,9 @@ def test_BS_F(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 13294.0)
self.assertAlmostEquals(np.floor(AIC), 13247.0)
self.assertAlmostEquals(np.floor(BIC), 13485.0)
self.assertAlmostEqual(np.floor(AICc), 13294.0)
self.assertAlmostEqual(np.floor(AIC), 13247.0)
self.assertAlmostEqual(np.floor(BIC), 13485.0)

np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-05)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-03)
Expand Down Expand Up @@ -607,10 +607,10 @@ def test_BS_NN(self):
BIC = get_BIC(rslt)
D2 = rslt.D2

self.assertAlmostEquals(np.floor(AICc), 13285)
self.assertAlmostEquals(np.floor(AIC), 13259.0)
self.assertAlmostEquals(np.floor(BIC), 13442.0)
self.assertAlmostEquals(np.round(D2, 3), 0.747)
self.assertAlmostEqual(np.floor(AICc), 13285)
self.assertAlmostEqual(np.floor(AIC), 13259.0)
self.assertAlmostEqual(np.floor(BIC), 13442.0)
self.assertAlmostEqual(np.round(D2, 3), 0.747)

np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-02)
Expand Down Expand Up @@ -659,10 +659,10 @@ def test_BS_NN_Offset(self):
BIC = get_BIC(rslt)
D2 = rslt.D2

self.assertAlmostEquals(np.floor(AICc), 367.0)
self.assertAlmostEquals(np.floor(AIC), 361.0)
self.assertAlmostEquals(np.floor(BIC), 451.0)
self.assertAlmostEquals(np.round(D2, 3), 0.676)
self.assertAlmostEqual(np.floor(AICc), 367.0)
self.assertAlmostEqual(np.floor(AIC), 361.0)
self.assertAlmostEqual(np.floor(BIC), 451.0)
self.assertAlmostEqual(np.round(D2, 3), 0.676)

np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-02,
atol=1e-02)
Expand Down Expand Up @@ -724,9 +724,9 @@ def test_GS_F(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 11283.0)
self.assertAlmostEquals(np.floor(AIC), 11211.0)
self.assertAlmostEquals(np.floor(BIC), 11497.0)
self.assertAlmostEqual(np.floor(AICc), 11283.0)
self.assertAlmostEqual(np.floor(AIC), 11211.0)
self.assertAlmostEqual(np.floor(BIC), 11497.0)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-03)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-02)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-02)
Expand Down Expand Up @@ -772,9 +772,9 @@ def test_GS_NN(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 21070.0)
self.assertAlmostEquals(np.floor(AIC), 21069.0)
self.assertAlmostEquals(np.floor(BIC), 21111.0)
self.assertAlmostEqual(np.floor(AICc), 21070.0)
self.assertAlmostEqual(np.floor(AIC), 21069.0)
self.assertAlmostEqual(np.floor(BIC), 21111.0)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-04)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-02)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-02)
Expand Down Expand Up @@ -859,9 +859,9 @@ def test_BS_F(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 275.0)
self.assertAlmostEquals(np.floor(AIC), 271.0)
self.assertAlmostEquals(np.floor(BIC), 349.0)
self.assertAlmostEqual(np.floor(AICc), 275.0)
self.assertAlmostEqual(np.floor(AIC), 271.0)
self.assertAlmostEqual(np.floor(BIC), 349.0)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-00)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-00)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-00)
Expand Down Expand Up @@ -923,10 +923,10 @@ def test_BS_NN(self):
BIC = get_BIC(rslt)
D2 = rslt.D2

self.assertAlmostEquals(np.floor(AICc), 277.0)
self.assertAlmostEquals(np.floor(AIC), 271.0)
self.assertAlmostEquals(np.floor(BIC), 358.0)
self.assertAlmostEquals(np.round(D2, 3), 0.319)
self.assertAlmostEqual(np.floor(AICc), 277.0)
self.assertAlmostEqual(np.floor(AIC), 271.0)
self.assertAlmostEqual(np.floor(BIC), 358.0)
self.assertAlmostEqual(np.round(D2, 3), 0.319)

np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-00)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-00)
Expand Down Expand Up @@ -989,9 +989,9 @@ def test_GS_F(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 276.0)
self.assertAlmostEquals(np.floor(AIC), 272.0)
self.assertAlmostEquals(np.floor(BIC), 341.0)
self.assertAlmostEqual(np.floor(AICc), 276.0)
self.assertAlmostEqual(np.floor(AIC), 272.0)
self.assertAlmostEqual(np.floor(BIC), 341.0)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-00)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-00)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-00)
Expand Down Expand Up @@ -1052,9 +1052,9 @@ def test_GS_NN(self):
AIC = get_AIC(rslt)
BIC = get_BIC(rslt)

self.assertAlmostEquals(np.floor(AICc), 276.0)
self.assertAlmostEquals(np.floor(AIC), 273.0)
self.assertAlmostEquals(np.floor(BIC), 331.0)
self.assertAlmostEqual(np.floor(AICc), 276.0)
self.assertAlmostEqual(np.floor(AIC), 273.0)
self.assertAlmostEqual(np.floor(BIC), 331.0)
np.testing.assert_allclose(est_Int, rslt.params[:, 0], rtol=1e-00)
np.testing.assert_allclose(se_Int, rslt.bse[:, 0], rtol=1e-00)
np.testing.assert_allclose(t_Int, rslt.tvalues[:, 0], rtol=1e-00)
Expand Down
Loading