AutoStatLib 0.2.1__py3-none-any.whl → 0.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of AutoStatLib might be problematic. Click here for more details.

@@ -10,6 +10,78 @@ class __StatisticalTests():
10
10
  Statistical tests mixin
11
11
  '''
12
12
 
13
+ def run_test_auto(self):
14
+
15
+ if self.n_groups == 1:
16
+ if self.parametric:
17
+ self.run_test_by_id('t_test_single_sample')
18
+ else:
19
+ self.run_test_by_id('wilcoxon_single_sample')
20
+
21
+ elif self.n_groups == 2:
22
+ if self.paired:
23
+ if self.parametric:
24
+ self.run_test_by_id('t_test_paired')
25
+ else:
26
+ self.run_test_by_id('wilcoxon')
27
+ else:
28
+ if self.parametric:
29
+ self.run_test_by_id('t_test_independent')
30
+ else:
31
+ self.run_test_by_id('mann_whitney')
32
+
33
+ elif self.n_groups >= 3:
34
+ if self.paired:
35
+ if self.parametric:
36
+ self.run_test_by_id('anova_1w_rm')
37
+ else:
38
+ self.run_test_by_id('friedman')
39
+ else:
40
+ if self.parametric:
41
+ self.run_test_by_id('anova_1w_ordinary')
42
+ else:
43
+ self.run_test_by_id('kruskal_wallis')
44
+
45
+ else:
46
+ pass
47
+
48
+ def run_test_by_id(self, test_id):
49
+
50
+ test_names_dict = {
51
+ 'anova_1w_ordinary': 'Ordinary One-Way ANOVA',
52
+ 'anova_1w_rm': 'Repeated Measures One-Way ANOVA',
53
+ 'friedman': 'Friedman test',
54
+ 'kruskal_wallis': 'Kruskal-Wallis test',
55
+ 'mann_whitney': 'Mann-Whitney U test',
56
+ 't_test_independent': 't-test for independent samples',
57
+ 't_test_paired': 't-test for paired samples',
58
+ 't_test_single_sample': 'Single-sample t-test',
59
+ 'wilcoxon': 'Wilcoxon signed-rank test',
60
+ 'wilcoxon_single_sample': 'Wilcoxon signed-rank test for single sample',
61
+ }
62
+
63
+ match test_id:
64
+ case 'anova_1w_ordinary': stat, p_value = self.anova_1w_ordinary()
65
+ case 'anova_1w_rm': stat, p_value = self.anova_1w_rm()
66
+ case 'friedman': stat, p_value = self.friedman()
67
+ case 'kruskal_wallis': stat, p_value = self.kruskal_wallis()
68
+ case 'mann_whitney': stat, p_value = self.mann_whitney()
69
+ case 't_test_independent': stat, p_value = self.t_test_independent()
70
+ case 't_test_paired': stat, p_value = self.t_test_paired()
71
+ case 't_test_single_sample': stat, p_value = self.t_test_single_sample()
72
+ case 'wilcoxon': stat, p_value = self.wilcoxon()
73
+ case 'wilcoxon_single_sample': stat, p_value = self.wilcoxon_single_sample()
74
+
75
+ if test_id in self.test_ids_dependent:
76
+ self.paired = True
77
+ else:
78
+ self.paired = False
79
+
80
+ self.test_name = test_names_dict[test_id]
81
+ self.test_id = test_id
82
+ self.test_stat = stat
83
+ self.p_value = p_value
84
+
13
85
  def anova_1w_ordinary(self):
14
86
  stat, p_value = f_oneway(*self.data)
15
87
  self.tails = 2
@@ -17,11 +89,7 @@ class __StatisticalTests():
17
89
  # p_value /= 2
18
90
  # if self.tails == 1:
19
91
  # p_value /= 2
20
- self.test_name = 'Ordinary One-Way ANOVA'
21
- self.test_id = 'anova_1w_ordinary'
22
- self.paired = False
23
- self.test_stat = stat
24
- self.p_value = p_value
92
+ return stat, p_value
25
93
 
26
94
  def anova_1w_rm(self):
27
95
  """
@@ -33,34 +101,22 @@ class __StatisticalTests():
33
101
 
34
102
  df = self.matrix_to_dataframe(self.data)
35
103
  res = AnovaRM(df, 'Value', 'Row', within=['Col']).fit()
36
- f_stat = res.anova_table['F Value'][0]
104
+ stat = res.anova_table['F Value'][0]
37
105
  p_value = res.anova_table['Pr > F'][0]
38
106
 
39
107
  self.tails = 2
40
- self.test_name = 'Repeated Measures One-Way ANOVA'
41
- self.test_id = 'anova_1w_rm'
42
- self.paired = True
43
- self.test_stat = f_stat
44
- self.p_value = p_value
108
+ return stat, p_value
45
109
 
46
- def friedman_test(self):
110
+ def friedman(self):
47
111
  stat, p_value = friedmanchisquare(*self.data)
48
112
  self.tails = 2
49
- self.test_name = 'Friedman test'
50
- self.test_id = 'friedman'
51
- self.paired = True
52
- self.test_stat = stat
53
- self.p_value = p_value
113
+ return stat, p_value
54
114
 
55
- def kruskal_wallis_test(self):
115
+ def kruskal_wallis(self):
56
116
  stat, p_value = kruskal(*self.data)
57
- self.test_name = 'Kruskal-Wallis test'
58
- self.test_id = 'kruskal_wallis'
59
- self.paired = False
60
- self.test_stat = stat
61
- self.p_value = p_value
117
+ return stat, p_value
62
118
 
63
- def mann_whitney_u_test(self):
119
+ def mann_whitney(self):
64
120
  stat, p_value = mannwhitneyu(
65
121
  self.data[0], self.data[1], alternative='two-sided')
66
122
  if self.tails == 1:
@@ -71,71 +127,46 @@ class __StatisticalTests():
71
127
  # self.data[0], self.data[1], alternative='two-sided' if self.tails == 2 else 'less')
72
128
  # if self.tails == 1 and p_value > 0.5:
73
129
  # p_value = 1-p_value
74
-
75
- self.test_name = 'Mann-Whitney U test'
76
- self.test_id = 'mann_whitney'
77
- self.paired = False
78
- self.test_stat = stat
79
- self.p_value = p_value
130
+ return stat, p_value
80
131
 
81
132
  def t_test_independent(self):
82
- t_stat, t_p_value = ttest_ind(
133
+ stat, p_value = ttest_ind(
83
134
  self.data[0], self.data[1])
84
135
  if self.tails == 1:
85
- t_p_value /= 2
86
- self.test_name = 't-test for independent samples'
87
- self.test_id = 't_test_independent'
88
- self.paired = False
89
- self.test_stat = t_stat
90
- self.p_value = t_p_value
136
+ p_value /= 2
137
+ return stat, p_value
91
138
 
92
139
  def t_test_paired(self):
93
- t_stat, t_p_value = ttest_rel(
140
+ stat, p_value = ttest_rel(
94
141
  self.data[0], self.data[1])
95
142
  if self.tails == 1:
96
- t_p_value /= 2
97
- self.test_name = 't-test for paired samples'
98
- self.test_id = 't_test_paired'
99
- self.paired = True
100
- self.test_stat = t_stat
101
- self.p_value = t_p_value
143
+ p_value /= 2
144
+ return stat, p_value
102
145
 
103
146
  def t_test_single_sample(self):
104
147
  if self.popmean == None:
105
148
  self.popmean = 0
106
149
  self.AddWarning('no_pop_mean_set')
107
- t_stat, t_p_value = ttest_1samp(self.data[0], self.popmean)
150
+ stat, p_value = ttest_1samp(self.data[0], self.popmean)
108
151
  if self.tails == 1:
109
- t_p_value /= 2
110
- self.test_name = 'Single-sample t-test'
111
- self.test_id = 't_test_single_sample'
112
- self.paired = False
113
- self.test_stat = t_stat
114
- self.p_value = t_p_value
152
+ p_value /= 2
153
+ return stat, p_value
115
154
 
155
+ def wilcoxon(self):
156
+ stat, p_value = wilcoxon(self.data[0], self.data[1])
157
+ if self.tails == 1:
158
+ p_value /= 2
159
+ return stat, p_value
160
+
116
161
  def wilcoxon_single_sample(self):
117
162
  if self.popmean == None:
118
163
  self.popmean = 0
119
164
  self.AddWarning('no_pop_mean_set')
120
165
  data = [i - self.popmean for i in self.data[0]]
121
- w_stat, p_value = wilcoxon(data)
122
- if self.tails == 1:
123
- p_value /= 2
124
- self.test_name = 'Wilcoxon signed-rank test for single sample'
125
- self.test_id = 'wilcoxon_single_sample'
126
- self.paired = False
127
- self.test_stat = w_stat
128
- self.p_value = p_value
129
-
130
- def wilcoxon(self):
131
- stat, p_value = wilcoxon(self.data[0], self.data[1])
166
+ stat, p_value = wilcoxon(data)
132
167
  if self.tails == 1:
133
168
  p_value /= 2
134
- self.test_name = 'Wilcoxon signed-rank test'
135
- self.test_id = 'wilcoxon'
136
- self.paired = True
137
- self.test_stat = stat
138
- self.p_value = p_value
169
+ return stat, p_value
139
170
 
140
171
 
141
172
  class __NormalityTests():
@@ -550,29 +581,13 @@ class StatisticalAnalysis(__StatisticalTests, __NormalityTests, __TextFormatting
550
581
  if not test == 'auto' and self.parametric and not test in self.test_ids_parametric:
551
582
  self.AddWarning('non-param_test_with_normal_data')
552
583
 
553
- if test == 'anova_1w_ordinary':
554
- self.anova_1w_ordinary()
555
- elif test == 'anova_1w_rm':
556
- self.anova_1w_rm()
557
- elif test == 'friedman':
558
- self.friedman_test()
559
- elif test == 'kruskal_wallis':
560
- self.kruskal_wallis_test()
561
- elif test == 'mann_whitney':
562
- self.mann_whitney_u_test()
563
- elif test == 't_test_independent':
564
- self.t_test_independent()
565
- elif test == 't_test_paired':
566
- self.t_test_paired()
567
- elif test == 't_test_single_sample':
568
- self.t_test_single_sample()
569
- elif test == 'wilcoxon':
570
- self.wilcoxon()
571
- elif test == 'wilcoxon_single_sample':
572
- self.wilcoxon_single_sample()
584
+ # run the test
585
+
586
+ if test in self.test_ids_all:
587
+ self.run_test_by_id(test)
573
588
  else:
574
- self.log('Automatic test selection preformed.')
575
- self.__auto()
589
+ self.run_test_auto()
590
+
576
591
 
577
592
  # print the results
578
593
  self.results = self.create_results_dict()
@@ -585,40 +600,7 @@ class StatisticalAnalysis(__StatisticalTests, __NormalityTests, __TextFormatting
585
600
  if self.verbose == True:
586
601
  print(self.summary)
587
602
 
588
- def __auto(self):
589
-
590
- if self.n_groups == 1:
591
- if self.parametric:
592
- return self.t_test_single_sample()
593
- else:
594
- return self.wilcoxon_single_sample()
595
-
596
- elif self.n_groups == 2:
597
- if self.paired:
598
- if self.parametric:
599
- return self.t_test_paired()
600
- else:
601
- return self.wilcoxon()
602
- else:
603
- if self.parametric:
604
- return self.t_test_independent()
605
- else:
606
- return self.mann_whitney_u_test()
607
-
608
- elif self.n_groups >= 3:
609
- if self.paired:
610
- if self.parametric:
611
- return self.anova_1w_rm()
612
- else:
613
- return self.friedman_test()
614
- else:
615
- if self.parametric:
616
- return self.anova_1w_ordinary()
617
- else:
618
- return self.kruskal_wallis_test()
619
603
 
620
- else:
621
- pass
622
604
 
623
605
  # public methods:
624
606
  def RunAuto(self):
AutoStatLib/_version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # AutoStatLib package version:
2
- __version__ = "0.2.1"
2
+ __version__ = "0.2.2"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: AutoStatLib
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: AutoStatLib - a simple statistical analysis tool
5
5
  Author: Stemonitis, SciWare LLC
6
6
  Author-email: konung-yaropolk <yaropolk1995@gmail.com>
@@ -595,10 +595,11 @@ analysis.RunTtestPaired()
595
595
  analysis.RunWilcoxon()
596
596
 
597
597
  # 3 and more independed groups comparison:
598
- analysis.RunAnova()
598
+ analysis.RunOnewayAnova()
599
599
  analysis.RunKruskalWallis()
600
600
 
601
601
  # 3 and more depended groups comparison:
602
+ analysis.RunOnewayAnovaRM()
602
603
  analysis.RunFriedman()
603
604
 
604
605
  # single group tests"
@@ -648,20 +649,40 @@ If errors occured, *GetResult()* returns an empty dictionary
648
649
 
649
650
 
650
651
  ---
651
- ## Pre-Alpha dev status.
652
-
653
- ### TODO:
654
-
655
- --Kruskal-Wallis test - add Dunn's multiple comparisons
656
- --Anova: add 2-way anova and 3-way(?)
657
-
658
- check:
659
- --Wilcoxon signed-rank test and Mann-whitney - check mechanism of one-tailed calc, looks like it works wrong
660
-
661
-
662
- checked tests:
663
- --Wilcoxon 2 tail - ok
664
- --Mann-whitney 2 tail - ok
652
+ ## Pre-Alpha dev status.
653
+
654
+ ### TODO:
655
+
656
+ -- Kruskal-Wallis test - add Dunn's multiple comparisons
657
+ -- Anova: add 2-way anova and 3-way anova
658
+ -- onevay Anova: add repeated measures (for normal dependent values) with and without Gaisser-Greenhouse correction
659
+ -- onevay Anova: add Brown-Forsithe and Welch (for normal independent values with unequal SDs between groups)
660
+ -- paired T-test: add ratio-paired t-test (ratios of paired values are consistent)
661
+ -- add Welch test (for norm data unequal variances)
662
+ -- add Kolmogorov-smirnov test (unpaired nonparametric 2 sample, compare cumulative distributions)
663
+ -- add independent t-test with Welch correction (do not assume equal SDs in groups)
664
+ -- add correlation test, correlation diagram
665
+ -- add linear regression, regression diagram
666
+ -- add QQ plot
667
+ -- n-sample tests: add onetail option
668
+
669
+ ✅ done -- detailed normality test results
670
+
671
+
672
+ checked tests:
673
+ 1-sample:
674
+ --Wilcoxon 2,1 tails - ok
675
+ --t-tests 2,1 tails -ok
676
+
677
+ 2-sample:
678
+ --Wilcoxon 2,1 tails - ok
679
+ --Mann-whitney 2,1 tails - ok
680
+ --t-tests 2,1 tails -ok
681
+
682
+ n-sample:
683
+ --Kruskal-Wallis 2 tail - ok
684
+ --Friedman 2 tail - ok
685
+ --one-way ANOWA 2 tail - ok
665
686
 
666
687
 
667
688
 
@@ -0,0 +1,9 @@
1
+ AutoStatLib/AutoStatLib.py,sha256=lUDNdzH2NdsyGm1jgLvQ1b-PXIyo8SfMApEK4uOQxSg,23479
2
+ AutoStatLib/__init__.py,sha256=0wHYnglzKRPqSHtZlfbMEA2Bj5rDR4LLaXbOrJi-sqM,101
3
+ AutoStatLib/__main__.py,sha256=ROKWensrxDh3Gl-yhexJ-BYFohDSh9y-CuMkaLpmnnQ,247
4
+ AutoStatLib/_version.py,sha256=WbLB15iApm4FvkoTxz3n4t20nHfs58LNdIBr1m1YbxU,53
5
+ AutoStatLib-0.2.2.dist-info/LICENSE,sha256=IMF9i4xIpgCADf0U-V1cuf9HBmqWQd3qtI3FSuyW4zE,26526
6
+ AutoStatLib-0.2.2.dist-info/METADATA,sha256=4Ro1Bo6FsklfwMo-G5N9C--n-7HJA4nMNns6qivu90k,36473
7
+ AutoStatLib-0.2.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
8
+ AutoStatLib-0.2.2.dist-info/top_level.txt,sha256=BuHzVyE2andc7RwD_UPmDjLl9CUAyBH6WHZGjaIReUI,12
9
+ AutoStatLib-0.2.2.dist-info/RECORD,,
@@ -1,9 +0,0 @@
1
- AutoStatLib/AutoStatLib.py,sha256=_Id6bJb1OmGpUyfB0ho6-2F9S_8YO8euMB-prLjfpPI,23976
2
- AutoStatLib/__init__.py,sha256=0wHYnglzKRPqSHtZlfbMEA2Bj5rDR4LLaXbOrJi-sqM,101
3
- AutoStatLib/__main__.py,sha256=ROKWensrxDh3Gl-yhexJ-BYFohDSh9y-CuMkaLpmnnQ,247
4
- AutoStatLib/_version.py,sha256=jkitUHmog4Z-O5_8BUMHBBb92A758Kea22juu9b2a2Q,53
5
- AutoStatLib-0.2.1.dist-info/LICENSE,sha256=IMF9i4xIpgCADf0U-V1cuf9HBmqWQd3qtI3FSuyW4zE,26526
6
- AutoStatLib-0.2.1.dist-info/METADATA,sha256=PFpKRRElBXYciMgOuMRI8wsoCKkX9iiwMVNJthvC_3A,35569
7
- AutoStatLib-0.2.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
8
- AutoStatLib-0.2.1.dist-info/top_level.txt,sha256=BuHzVyE2andc7RwD_UPmDjLl9CUAyBH6WHZGjaIReUI,12
9
- AutoStatLib-0.2.1.dist-info/RECORD,,