@@ -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