analysis.py v 1.2.0.003

This commit is contained in:
ltcptgeneral 2020-04-28 04:00:19 +00:00
parent 8d387b6bee
commit d76eb5acbb
10 changed files with 21 additions and 11 deletions

View File

@ -7,10 +7,14 @@
# current benchmark of optimization: 1.33 times faster # current benchmark of optimization: 1.33 times faster
# setup: # setup:
__version__ = "1.2.0.002" __version__ = "1.2.0.003"
# changelog should be viewed using print(analysis.__changelog__) # changelog should be viewed using print(analysis.__changelog__)
__changelog__ = """changelog: __changelog__ = """changelog:
1.2.0.003:
- bug fixes with CorrelationTests and StatisticalTests
- moved glicko2 and trueskill to the metrics subpackage
- moved elo to a new metrics subpackage
1.2.0.002: 1.2.0.002:
- fixed docs - fixed docs
1.2.0.001: 1.2.0.001:
@ -295,7 +299,8 @@ __all__ = [
# imports (now in alphabetical order! v 1.0.3.006): # imports (now in alphabetical order! v 1.0.3.006):
import csv import csv
from analysis import glicko2 as Glicko2 from analysis.metrics import elo as Elo
from analysis.metrics import glicko2 as Glicko2
import numba import numba
from numba import jit from numba import jit
import numpy as np import numpy as np
@ -303,7 +308,7 @@ import scipy
from scipy import optimize, stats from scipy import optimize, stats
import sklearn import sklearn
from sklearn import preprocessing, pipeline, linear_model, metrics, cluster, decomposition, tree, neighbors, naive_bayes, svm, model_selection, ensemble from sklearn import preprocessing, pipeline, linear_model, metrics, cluster, decomposition, tree, neighbors, naive_bayes, svm, model_selection, ensemble
from analysis import trueskill as Trueskill from analysis.metrics import trueskill as Trueskill
class error(ValueError): class error(ValueError):
pass pass
@ -464,9 +469,7 @@ class Metrics:
def elo(starting_score, opposing_score, observed, N, K): def elo(starting_score, opposing_score, observed, N, K):
expected = 1/(1+10**((np.array(opposing_score) - starting_score)/N)) return Elo.calculate(starting_score, opposing_score, observed, N, K)
return starting_score + K*(np.sum(observed) - np.sum(expected))
def glicko2(starting_score, starting_rd, starting_vol, opposing_score, opposing_rd, observations): def glicko2(starting_score, starting_rd, starting_vol, opposing_score, opposing_rd, observations):
@ -830,7 +833,7 @@ class StatisticalTests:
results = scipy.stats.friedmanchisquare(*args) results = scipy.stats.friedmanchisquare(*args)
return {"chisquared-value": results[0], "p-value": results[1]} return {"chisquared-value": results[0], "p-value": results[1]}
def bm-wtest(x, y, alternative = 'two-sided', distribution = 't', nan_policy = 'propagate'): def bm_wtest(x, y, alternative = 'two-sided', distribution = 't', nan_policy = 'propagate'):
results = scipy.stats.brunnermunzel(x, y, alternative = alternative, distribution = distribution, nan_policy = nan_policy) results = scipy.stats.brunnermunzel(x, y, alternative = alternative, distribution = distribution, nan_policy = nan_policy)
return {"w-value": results[0], "p-value": results[1]} return {"w-value": results[0], "p-value": results[1]}
@ -857,7 +860,7 @@ class StatisticalTests:
def levene_variance(*args, center = 'median', proportiontocut = 0.05): def levene_variance(*args, center = 'median', proportiontocut = 0.05):
results = scipy.stats.levene(*args center = center, proportiontocut = proportiontocut) results = scipy.stats.levene(*args, center = center, proportiontocut = proportiontocut)
return {"w-value": results[0], "p-value": results[1]} return {"w-value": results[0], "p-value": results[1]}
def sw_normality(x): def sw_normality(x):
@ -871,7 +874,7 @@ class StatisticalTests:
def ad_onesample(x, dist = 'norm'): def ad_onesample(x, dist = 'norm'):
results = scipy.stats.anderson(x, dist = dist): results = scipy.stats.anderson(x, dist = dist)
return {"d-value": results[0], "critical-values": results[1], "significance-value": results[2]} return {"d-value": results[0], "critical-values": results[1], "significance-value": results[2]}
def ad_ksample(samples, midrank = True): def ad_ksample(samples, midrank = True):
@ -886,12 +889,12 @@ class StatisticalTests:
def fk_variance(*args, center = 'median', proportiontocut = 0.05): def fk_variance(*args, center = 'median', proportiontocut = 0.05):
results = scipy.stats.fligner(*args center = center, proportiontocut = proportiontocut) results = scipy.stats.fligner(*args, center = center, proportiontocut = proportiontocut)
return {"h-value": results[0], "p-value": results[1]} # unknown if the statistic is an h value return {"h-value": results[0], "p-value": results[1]} # unknown if the statistic is an h value
def mood_mediantest(*args, ties = 'below', correction = True, lambda_ = 1, nan_policy = 'propagate'): def mood_mediantest(*args, ties = 'below', correction = True, lambda_ = 1, nan_policy = 'propagate'):
results = scipy.stats.median_test(*args, ties = ties, correction = correction, lambda_ = lambda_, nan_policy = nan_policy)* results = scipy.stats.median_test(*args, ties = ties, correction = correction, lambda_ = lambda_, nan_policy = nan_policy)
return {"chisquared-value": results[0], "p-value": results[1], "m-value": results[2], "table": results[3]} return {"chisquared-value": results[0], "p-value": results[1], "m-value": results[2], "table": results[3]}
def mood_equalscale(x, y, axis = 0): def mood_equalscale(x, y, axis = 0):

View File

@ -0,0 +1,7 @@
import numpy as np
def calculate(starting_score, opposing_score, observed, N, K):
expected = 1/(1+10**((np.array(opposing_score) - starting_score)/N))
return starting_score + K*(np.sum(observed) - np.sum(expected))