Skip to content

Commit a8f9dcc

Browse files
committed
[DOC] Added some notes for stats.get_dominance_stats
1 parent db7c8b3 commit a8f9dcc

File tree

1 file changed

+43
-12
lines changed

1 file changed

+43
-12
lines changed

netneurotools/stats.py

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -791,8 +791,8 @@ def get_dominance_stats(X, y, use_adjusted_r_sq=True, verbose=False):
791791
"""
792792
Returns the dominance analysis statistics for multilinear regression.
793793
794-
This is a rewritten & simplified version of [DA1]_. It is briefly tested against
795-
the original package, but still in early stages.
794+
This is a rewritten & simplified version of [DA1]_. It is briefly
795+
tested against the original package, but still in early stages.
796796
Please feel free to report any bugs.
797797
798798
Warning: Still work-in-progress. Parameters might change!
@@ -816,6 +816,29 @@ def get_dominance_stats(X, y, use_adjusted_r_sq=True, verbose=False):
816816
model_r_sq : dict
817817
Contains all model r squares
818818
819+
Notes
820+
-----
821+
Example usage
822+
823+
.. code:: python
824+
825+
from netneurotools.stats import get_dominance_stats
826+
from sklearn.datasets import load_boston
827+
X, y = load_boston(return_X_y=True)
828+
model_metrics, model_r_sq = get_dominance_stats(X, y)
829+
830+
To compare with [DA1]_, use `use_adjusted_r_sq=False`
831+
832+
.. code:: python
833+
834+
from dominance_analysis import Dominance_Datasets
835+
from dominance_analysis import Dominance
836+
boston_dataset=Dominance_Datasets.get_boston()
837+
dominance_regression=Dominance(data=boston_dataset,
838+
target='House_Price',objective=1)
839+
incr_variable_rsquare=dominance_regression.incremental_rsquare()
840+
dominance_regression.dominance_stats()
841+
819842
References
820843
----------
821844
.. [DA1] https://github.com/dominance-analysis/dominance-analysis
@@ -833,7 +856,8 @@ def get_reg_r_sq(X, y):
833856
SS_Residual = sum((y - yhat) ** 2)
834857
SS_Total = sum((y - np.mean(y)) ** 2)
835858
r_squared = 1 - (float(SS_Residual)) / SS_Total
836-
adjusted_r_squared = 1 - (1 - r_squared) * (len(y) - 1) / (len(y) - X.shape[1] - 1)
859+
adjusted_r_squared = 1 - (1 - r_squared) * \
860+
(len(y) - 1) / (len(y) - X.shape[1] - 1)
837861
if use_adjusted_r_sq:
838862
return adjusted_r_squared
839863
else:
@@ -844,15 +868,19 @@ def complete_model_rsquare(X, y):
844868

845869
# generate all predictor combinations in list (num of predictors) of lists
846870
n_predictor = X.shape[-1]
847-
n_comb_len_group = n_predictor - 1
848-
predictor_combs = [list(combinations(range(n_predictor), i)) for i in range(1, n_predictor + 1)]
871+
# n_comb_len_group = n_predictor - 1
872+
predictor_combs = [list(combinations(range(n_predictor), i))
873+
for i in range(1, n_predictor + 1)]
849874
if verbose:
850-
print(f"[Dominance analysis] Generated {len([_ for i in predictor_combs for _ in i])} combinations")
875+
print(f"[Dominance analysis] Generated \
876+
{len([_ for i in predictor_combs for _ in i])} combinations")
851877

852878
# get all r_sq's
853879
model_r_sq = dict([])
854-
for len_group in tqdm(predictor_combs, desc='num-of-predictor loop', disable=~verbose):
855-
for idx_tuple in tqdm(len_group, desc='insider loop', disable=~verbose):
880+
for len_group in tqdm(predictor_combs, desc='num-of-predictor loop',
881+
disable=~verbose):
882+
for idx_tuple in tqdm(len_group, desc='insider loop',
883+
disable=~verbose):
856884
r_sq = get_reg_r_sq(X[:, idx_tuple], y)
857885
model_r_sq[idx_tuple] = r_sq
858886
if verbose:
@@ -882,18 +910,21 @@ def remove_ret(tpl, elem):
882910
j_node_sel = [_ for _ in i_len_combs if j_node in _]
883911
reduced_list = [remove_ret(comb, j_node) for comb in j_node_sel]
884912
# print(j_node, j_node_sel, reduced_list)
885-
diff_values = [model_r_sq[j_node_sel[_]] - model_r_sq[reduced_list[_]]
886-
for _ in range(len(reduced_list))]
913+
diff_values = [
914+
model_r_sq[j_node_sel[_]] - model_r_sq[reduced_list[_]]
915+
for _ in range(len(reduced_list))]
887916
# print(diff_values)
888917
partial_dominance[i_len].append(np.mean(diff_values))
889918

890919
# save partial dominance
891920
partial_dominance = np.array(partial_dominance)
892921
model_metrics["partial_dominance"] = partial_dominance
893922
# get total dominance
894-
total_dominance = np.mean(np.r_[individual_dominance, partial_dominance], axis=0)
923+
total_dominance = np.mean(
924+
np.r_[individual_dominance, partial_dominance], axis=0)
895925
# test and save total dominance
896-
assert np.allclose(total_dominance.sum(), model_r_sq[tuple(range(n_predictor))])
926+
assert np.allclose(total_dominance.sum(),
927+
model_r_sq[tuple(range(n_predictor))])
897928
model_metrics["total_dominance"] = total_dominance
898929
# save full r^2
899930
model_metrics["full_r_sq"] = model_r_sq[tuple(range(n_predictor))]

0 commit comments

Comments
 (0)