obs = pd.read_csv("obs_matrix.csv")
obs = obs.drop(['map_Sky Temple', 'allied_char_Gall', 'opposing_char_Gall', 'opposing_char_Kerrigan', 'allied_char_Kerrigan'], axis=1)
def fit_estimate(obs, character):
obs_= obs.copy()
obs_ = obs_.rename(columns={character : 'EXPOSURE', 'outcome': 'OUTCOME'})
model = ' + '.join("Q('%s')" % c for c in obs_.columns if c not in ['OUTCOME', 'EXPOSURE'])
from zepid.causal.ipw import IPTW
ipt = IPTW(obs_, treatment='EXPOSURE', stabilized=True)
ipt.regression_models(model)
ipt.fit()
obs_['iptw'] = ipt.Weight
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.genmod.families import family,links
ind = sm.cov_struct.Independence()
f = sm.families.family.Binomial(sm.families.links.identity)
linrisk = smf.gee('OUTCOME ~ EXPOSURE', obs_.index, obs_, cov_struct=ind, family=f, weights=obs_['iptw']).fit()
print("ââ")
print(character)
print(linrisk.params)
obs.head()
allied_avg_hero_level | allied_avg_mrr | allied_char_Abathur | allied_char_Alarak | allied_char_Anubarak | allied_char_Artanis | allied_char_Arthas | allied_char_Auriel | allied_char_Azmodan | allied_char_Brightwing | ... | opposing_char_Uther | opposing_char_Valeera | opposing_char_Valla | opposing_char_Varian | opposing_char_Xul | opposing_char_Zagara | opposing_char_Zarya | opposing_char_Zeratul | opposing_char_Zuljin | outcome | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 12.6 | 2613.4 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0 |
1 | 9.4 | 2624.6 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1 |
2 | 8.6 | 1999.2 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 1.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0 |
3 | 6.0 | 1941.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1 |
4 | 5.6 | 1751.6 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | ... | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 1.0 | 0.0 | 0.0 | 0 |
5 rows Ă 137 columns
from statsmodels.discrete.discrete_model import Logit
from statsmodels.tools import add_constant
def demean(s):
return s - s.mean()
obs['allied_avg_mrr'] = demean(obs['allied_avg_mrr'])
obs['allied_avg_hero_level'] = demean(obs['allied_avg_hero_level'])
obs['opp_avg_hero_level'] = demean(obs['opp_avg_hero_level'])
obs['opp_avg_mrr'] = demean(obs['opp_avg_mrr'])
obs['allied_avg_mrr**2'] = obs['allied_avg_mrr']**2
obs['allied_avg_hero_level**2'] = obs['allied_avg_hero_level']**2
obs['opp_avg_hero_level**2'] = obs['opp_avg_hero_level']**2
obs['opp_avg_mrr**2'] = obs['opp_avg_mrr']**2
lg = Logit(obs['outcome'], add_constant(obs.drop('outcome', axis=1)))
results = lg.fit()
Optimization terminated successfully. Current function value: 0.655268 Iterations 5
results.summary()
Dep. Variable: | outcome | No. Observations: | 99998 |
---|---|---|---|
Model: | Logit | Df Residuals: | 99857 |
Method: | MLE | Df Model: | 140 |
Date: | Thu, 13 Sep 2018 | Pseudo R-squ.: | 0.05465 |
Time: | 22:03:11 | Log-Likelihood: | -65525. |
converged: | True | LL-Null: | -69313. |
LLR p-value: | 0.000 |
coef | std err | z | P>|z| | [0.025 | 0.975] | |
---|---|---|---|---|---|---|
const | 1.222e-12 | 0.226 | 5.4e-12 | 1.000 | -0.444 | 0.444 |
allied_avg_hero_level | 0.0208 | 0.003 | 7.669 | 0.000 | 0.015 | 0.026 |
allied_avg_mrr | 0.0023 | 4.23e-05 | 53.942 | 0.000 | 0.002 | 0.002 |
allied_char_Abathur | -0.0948 | 0.049 | -1.949 | 0.051 | -0.190 | 0.001 |
allied_char_Alarak | -0.1239 | 0.047 | -2.616 | 0.009 | -0.217 | -0.031 |
allied_char_Anubarak | 0.2178 | 0.037 | 5.890 | 0.000 | 0.145 | 0.290 |
allied_char_Artanis | 0.0317 | 0.037 | 0.868 | 0.386 | -0.040 | 0.103 |
allied_char_Arthas | -0.0681 | 0.037 | -1.838 | 0.066 | -0.141 | 0.005 |
allied_char_Auriel | 0.2367 | 0.044 | 5.336 | 0.000 | 0.150 | 0.324 |
allied_char_Azmodan | 0.0509 | 0.046 | 1.112 | 0.266 | -0.039 | 0.141 |
allied_char_Brightwing | 0.2199 | 0.046 | 4.769 | 0.000 | 0.130 | 0.310 |
allied_char_Cassia | -0.0740 | 0.044 | -1.671 | 0.095 | -0.161 | 0.013 |
allied_char_Chen | -0.0910 | 0.054 | -1.676 | 0.094 | -0.197 | 0.015 |
allied_char_Cho | -0.0296 | 0.098 | -0.302 | 0.763 | -0.222 | 0.163 |
allied_char_Chromie | -0.1479 | 0.042 | -3.561 | 0.000 | -0.229 | -0.067 |
allied_char_Dehaka | -0.0521 | 0.039 | -1.332 | 0.183 | -0.129 | 0.025 |
allied_char_Diablo | -0.1250 | 0.038 | -3.301 | 0.001 | -0.199 | -0.051 |
allied_char_E.T.C. | -0.3184 | 0.041 | -7.732 | 0.000 | -0.399 | -0.238 |
allied_char_Falstad | -0.0843 | 0.038 | -2.231 | 0.026 | -0.158 | -0.010 |
allied_char_Gazlowe | -0.0461 | 0.050 | -0.915 | 0.360 | -0.145 | 0.053 |
allied_char_Genji | -0.2310 | 0.036 | -6.365 | 0.000 | -0.302 | -0.160 |
allied_char_Greymane | 0.0133 | 0.038 | 0.348 | 0.728 | -0.062 | 0.089 |
allied_char_Guldan | -0.0751 | 0.037 | -2.045 | 0.041 | -0.147 | -0.003 |
allied_char_Illidan | -0.2319 | 0.046 | -5.006 | 0.000 | -0.323 | -0.141 |
allied_char_Jaina | 0.0057 | 0.038 | 0.150 | 0.881 | -0.069 | 0.080 |
allied_char_Johanna | -0.0566 | 0.039 | -1.435 | 0.151 | -0.134 | 0.021 |
allied_char_Kaelthas | 0.0620 | 0.036 | 1.737 | 0.082 | -0.008 | 0.132 |
allied_char_Kharazim | 0.0971 | 0.046 | 2.103 | 0.035 | 0.007 | 0.188 |
allied_char_Leoric | -0.0106 | 0.041 | -0.261 | 0.794 | -0.091 | 0.069 |
allied_char_Li Li | 0.2945 | 0.042 | 7.017 | 0.000 | 0.212 | 0.377 |
allied_char_Li-Ming | -0.1578 | 0.036 | -4.397 | 0.000 | -0.228 | -0.087 |
allied_char_Lt. Morales | 0.0748 | 0.050 | 1.497 | 0.134 | -0.023 | 0.173 |
allied_char_Lunara | -0.1653 | 0.042 | -3.893 | 0.000 | -0.249 | -0.082 |
allied_char_LĂșcio | 0.3063 | 0.044 | 7.032 | 0.000 | 0.221 | 0.392 |
allied_char_Malfurion | 0.1844 | 0.043 | 4.303 | 0.000 | 0.100 | 0.268 |
allied_char_Medivh | -0.4848 | 0.068 | -7.109 | 0.000 | -0.618 | -0.351 |
allied_char_Muradin | -0.2787 | 0.039 | -7.165 | 0.000 | -0.355 | -0.202 |
allied_char_Murky | 0.1373 | 0.060 | 2.279 | 0.023 | 0.019 | 0.255 |
allied_char_Nazeebo | 0.1191 | 0.036 | 3.271 | 0.001 | 0.048 | 0.190 |
allied_char_Nova | -0.1181 | 0.048 | -2.449 | 0.014 | -0.213 | -0.024 |
allied_char_Probius | 0.2418 | 0.050 | 4.857 | 0.000 | 0.144 | 0.339 |
allied_char_Ragnaros | 0.0260 | 0.039 | 0.667 | 0.504 | -0.050 | 0.102 |
allied_char_Raynor | -0.1794 | 0.042 | -4.303 | 0.000 | -0.261 | -0.098 |
allied_char_Rehgar | 0.1504 | 0.046 | 3.274 | 0.001 | 0.060 | 0.240 |
allied_char_Rexxar | 0.0180 | 0.055 | 0.326 | 0.744 | -0.090 | 0.126 |
allied_char_Samuro | 0.1477 | 0.045 | 3.261 | 0.001 | 0.059 | 0.236 |
allied_char_Sgt. Hammer | -0.0133 | 0.054 | -0.247 | 0.805 | -0.119 | 0.093 |
allied_char_Sonya | 0.1149 | 0.037 | 3.131 | 0.002 | 0.043 | 0.187 |
allied_char_Stitches | -0.1448 | 0.044 | -3.312 | 0.001 | -0.230 | -0.059 |
allied_char_Sylvanas | -0.0147 | 0.037 | -0.395 | 0.693 | -0.087 | 0.058 |
allied_char_Tassadar | -0.3050 | 0.048 | -6.344 | 0.000 | -0.399 | -0.211 |
allied_char_The Butcher | 0.0695 | 0.043 | 1.631 | 0.103 | -0.014 | 0.153 |
allied_char_The Lost Vikings | 0.0373 | 0.085 | 0.441 | 0.659 | -0.128 | 0.203 |
allied_char_Thrall | -0.1411 | 0.043 | -3.268 | 0.001 | -0.226 | -0.056 |
allied_char_Tracer | -0.1031 | 0.046 | -2.221 | 0.026 | -0.194 | -0.012 |
allied_char_Tychus | -0.1084 | 0.042 | -2.588 | 0.010 | -0.191 | -0.026 |
allied_char_Tyrael | -0.0131 | 0.047 | -0.278 | 0.781 | -0.105 | 0.079 |
allied_char_Tyrande | 0.1289 | 0.050 | 2.557 | 0.011 | 0.030 | 0.228 |
allied_char_Uther | 0.2299 | 0.044 | 5.222 | 0.000 | 0.144 | 0.316 |
allied_char_Valeera | -0.2521 | 0.042 | -5.970 | 0.000 | -0.335 | -0.169 |
allied_char_Valla | -0.0848 | 0.035 | -2.430 | 0.015 | -0.153 | -0.016 |
allied_char_Varian | -0.0593 | 0.036 | -1.646 | 0.100 | -0.130 | 0.011 |
allied_char_Xul | -0.0716 | 0.058 | -1.242 | 0.214 | -0.184 | 0.041 |
allied_char_Zagara | 0.0324 | 0.048 | 0.671 | 0.502 | -0.062 | 0.127 |
allied_char_Zarya | -0.0181 | 0.039 | -0.462 | 0.644 | -0.095 | 0.059 |
allied_char_Zeratul | -0.2644 | 0.046 | -5.758 | 0.000 | -0.354 | -0.174 |
allied_char_Zuljin | 0.0853 | 0.044 | 1.952 | 0.051 | -0.000 | 0.171 |
map_Braxis Holdout | -7.098e-15 | 0.022 | -3.24e-13 | 1.000 | -0.043 | 0.043 |
map_Cursed Hollow | -4.511e-15 | 0.021 | -2.16e-13 | 1.000 | -0.041 | 0.041 |
map_Infernal Shrines | -2.019e-14 | 0.021 | -9.41e-13 | 1.000 | -0.042 | 0.042 |
map_Towers of Doom | -7.11e-15 | 0.021 | -3.35e-13 | 1.000 | -0.042 | 0.042 |
opp_avg_hero_level | -0.0208 | 0.003 | -7.669 | 0.000 | -0.026 | -0.015 |
opp_avg_mrr | -0.0023 | 4.23e-05 | -53.942 | 0.000 | -0.002 | -0.002 |
opposing_char_Abathur | 0.0948 | 0.049 | 1.949 | 0.051 | -0.001 | 0.190 |
opposing_char_Alarak | 0.1239 | 0.047 | 2.616 | 0.009 | 0.031 | 0.217 |
opposing_char_Anubarak | -0.2178 | 0.037 | -5.890 | 0.000 | -0.290 | -0.145 |
opposing_char_Artanis | -0.0317 | 0.037 | -0.868 | 0.386 | -0.103 | 0.040 |
opposing_char_Arthas | 0.0681 | 0.037 | 1.838 | 0.066 | -0.005 | 0.141 |
opposing_char_Auriel | -0.2367 | 0.044 | -5.336 | 0.000 | -0.324 | -0.150 |
opposing_char_Azmodan | -0.0509 | 0.046 | -1.112 | 0.266 | -0.141 | 0.039 |
opposing_char_Brightwing | -0.2199 | 0.046 | -4.769 | 0.000 | -0.310 | -0.130 |
opposing_char_Cassia | 0.0740 | 0.044 | 1.671 | 0.095 | -0.013 | 0.161 |
opposing_char_Chen | 0.0910 | 0.054 | 1.676 | 0.094 | -0.015 | 0.197 |
opposing_char_Cho | 0.0296 | 0.098 | 0.302 | 0.763 | -0.163 | 0.222 |
opposing_char_Chromie | 0.1479 | 0.042 | 3.561 | 0.000 | 0.067 | 0.229 |
opposing_char_Dehaka | 0.0521 | 0.039 | 1.332 | 0.183 | -0.025 | 0.129 |
opposing_char_Diablo | 0.1250 | 0.038 | 3.301 | 0.001 | 0.051 | 0.199 |
opposing_char_E.T.C. | 0.3184 | 0.041 | 7.732 | 0.000 | 0.238 | 0.399 |
opposing_char_Falstad | 0.0843 | 0.038 | 2.231 | 0.026 | 0.010 | 0.158 |
opposing_char_Gazlowe | 0.0461 | 0.050 | 0.915 | 0.360 | -0.053 | 0.145 |
opposing_char_Genji | 0.2310 | 0.036 | 6.365 | 0.000 | 0.160 | 0.302 |
opposing_char_Greymane | -0.0133 | 0.038 | -0.348 | 0.728 | -0.089 | 0.062 |
opposing_char_Guldan | 0.0751 | 0.037 | 2.045 | 0.041 | 0.003 | 0.147 |
opposing_char_Illidan | 0.2319 | 0.046 | 5.006 | 0.000 | 0.141 | 0.323 |
opposing_char_Jaina | -0.0057 | 0.038 | -0.150 | 0.881 | -0.080 | 0.069 |
opposing_char_Johanna | 0.0566 | 0.039 | 1.435 | 0.151 | -0.021 | 0.134 |
opposing_char_Kaelthas | -0.0620 | 0.036 | -1.737 | 0.082 | -0.132 | 0.008 |
opposing_char_Kharazim | -0.0971 | 0.046 | -2.103 | 0.035 | -0.188 | -0.007 |
opposing_char_Leoric | 0.0106 | 0.041 | 0.261 | 0.794 | -0.069 | 0.091 |
opposing_char_Li Li | -0.2945 | 0.042 | -7.017 | 0.000 | -0.377 | -0.212 |
opposing_char_Li-Ming | 0.1578 | 0.036 | 4.397 | 0.000 | 0.087 | 0.228 |
opposing_char_Lt. Morales | -0.0748 | 0.050 | -1.497 | 0.134 | -0.173 | 0.023 |
opposing_char_Lunara | 0.1653 | 0.042 | 3.893 | 0.000 | 0.082 | 0.249 |
opposing_char_LĂșcio | -0.3063 | 0.044 | -7.032 | 0.000 | -0.392 | -0.221 |
opposing_char_Malfurion | -0.1844 | 0.043 | -4.303 | 0.000 | -0.268 | -0.100 |
opposing_char_Medivh | 0.4848 | 0.068 | 7.109 | 0.000 | 0.351 | 0.618 |
opposing_char_Muradin | 0.2787 | 0.039 | 7.165 | 0.000 | 0.202 | 0.355 |
opposing_char_Murky | -0.1373 | 0.060 | -2.279 | 0.023 | -0.255 | -0.019 |
opposing_char_Nazeebo | -0.1191 | 0.036 | -3.271 | 0.001 | -0.190 | -0.048 |
opposing_char_Nova | 0.1181 | 0.048 | 2.449 | 0.014 | 0.024 | 0.213 |
opposing_char_Probius | -0.2418 | 0.050 | -4.857 | 0.000 | -0.339 | -0.144 |
opposing_char_Ragnaros | -0.0260 | 0.039 | -0.667 | 0.504 | -0.102 | 0.050 |
opposing_char_Raynor | 0.1794 | 0.042 | 4.303 | 0.000 | 0.098 | 0.261 |
opposing_char_Rehgar | -0.1504 | 0.046 | -3.274 | 0.001 | -0.240 | -0.060 |
opposing_char_Rexxar | -0.0180 | 0.055 | -0.326 | 0.744 | -0.126 | 0.090 |
opposing_char_Samuro | -0.1477 | 0.045 | -3.261 | 0.001 | -0.236 | -0.059 |
opposing_char_Sgt. Hammer | 0.0133 | 0.054 | 0.247 | 0.805 | -0.093 | 0.119 |
opposing_char_Sonya | -0.1149 | 0.037 | -3.131 | 0.002 | -0.187 | -0.043 |
opposing_char_Stitches | 0.1448 | 0.044 | 3.312 | 0.001 | 0.059 | 0.230 |
opposing_char_Sylvanas | 0.0147 | 0.037 | 0.395 | 0.693 | -0.058 | 0.087 |
opposing_char_Tassadar | 0.3050 | 0.048 | 6.344 | 0.000 | 0.211 | 0.399 |
opposing_char_The Butcher | -0.0695 | 0.043 | -1.631 | 0.103 | -0.153 | 0.014 |
opposing_char_The Lost Vikings | -0.0373 | 0.085 | -0.441 | 0.659 | -0.203 | 0.128 |
opposing_char_Thrall | 0.1411 | 0.043 | 3.268 | 0.001 | 0.056 | 0.226 |
opposing_char_Tracer | 0.1031 | 0.046 | 2.221 | 0.026 | 0.012 | 0.194 |
opposing_char_Tychus | 0.1084 | 0.042 | 2.588 | 0.010 | 0.026 | 0.191 |
opposing_char_Tyrael | 0.0131 | 0.047 | 0.278 | 0.781 | -0.079 | 0.105 |
opposing_char_Tyrande | -0.1289 | 0.050 | -2.557 | 0.011 | -0.228 | -0.030 |
opposing_char_Uther | -0.2299 | 0.044 | -5.222 | 0.000 | -0.316 | -0.144 |
opposing_char_Valeera | 0.2521 | 0.042 | 5.970 | 0.000 | 0.169 | 0.335 |
opposing_char_Valla | 0.0848 | 0.035 | 2.430 | 0.015 | 0.016 | 0.153 |
opposing_char_Varian | 0.0593 | 0.036 | 1.646 | 0.100 | -0.011 | 0.130 |
opposing_char_Xul | 0.0716 | 0.058 | 1.242 | 0.214 | -0.041 | 0.184 |
opposing_char_Zagara | -0.0324 | 0.048 | -0.671 | 0.502 | -0.127 | 0.062 |
opposing_char_Zarya | 0.0181 | 0.039 | 0.462 | 0.644 | -0.059 | 0.095 |
opposing_char_Zeratul | 0.2644 | 0.046 | 5.758 | 0.000 | 0.174 | 0.354 |
opposing_char_Zuljin | -0.0853 | 0.044 | -1.952 | 0.051 | -0.171 | 0.000 |
allied_avg_mrr**2 | 7.249e-07 | 5.54e-08 | 13.076 | 0.000 | 6.16e-07 | 8.34e-07 |
allied_avg_hero_level**2 | 0.0007 | 0.001 | 0.914 | 0.361 | -0.001 | 0.002 |
opp_avg_hero_level**2 | -0.0007 | 0.001 | -0.914 | 0.361 | -0.002 | 0.001 |
opp_avg_mrr**2 | -7.249e-07 | 5.54e-08 | -13.076 | 0.000 | -8.34e-07 | -6.16e-07 |
x = results.params.filter(like='allied_char')
y = pd.Series({c:obs.loc[obs[c].astype(bool)]['outcome'].mean() for c in x.index})
%matplotlib inline
from IPython.display import set_matplotlib_formats
from matplotlib import pyplot as plt
plt.style.use('bmh')
set_matplotlib_formats('retina')
f, ax = plt.subplots(1,1,figsize=(16,12))
ax.scatter(x, y)
for i, txt in enumerate(x.index):
txt = txt.lstrip("allied_char_")
ax.annotate(txt, (x[i]+0.005, y[i]), fontsize=9)
#ax.set_ylabel("<--- lower naive winrate | higher naive winrate --->")
plt.hlines(0.5, -0.5, 0.5, lw=1, color='gray')
plt.vlines(0.0, 0.38, 0.6, lw=1, color='gray')
plt.xlim(-0.5, 0.5)
plt.ylim(0.38, 0.6)
ax.text(-0.025, 0.59, 'higher naive win rate -->', style='italic', rotation=90, fontsize=13)
ax.text(-0.025, 0.44, '<-- lower naive win rate', style='italic', rotation=90, fontsize=13)
ax.text(0.22, 0.503, 'higher causal win rate -->', style='italic', fontsize=13)
ax.text(-0.465, 0.503, '<-- lower causal win rate', style='italic', fontsize=13)
plt.ylabel("Naive win rate")
plt.xlabel("Causal win rate")
plt.savefig("causal_v_naive.png", bbox_inches='tight', dpi=250)
f, ax = plt.subplots(1,1,figsize=(15,12))
yerr = results.bse.filter(like='allied_char')
r = pd.DataFrame({'param': x, 'error': 1.96*yerr})
r.index = [_.lstrip('allied_char_') for _ in r.index]
r.sort_values('param').plot.barh(y='param', ax=ax, color='#348ABD', xerr='error', lw=0.1)
plt.savefig("coefs.png", bbox_inches='tight', dpi=250)
r.to_html()
'<table border="1" class="dataframe">\n <thead>\n <tr style="text-align: right;">\n <th></th>\n <th>param</th>\n <th>error</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>Abathur</th>\n <td>-0.094841</td>\n <td>0.095362</td>\n </tr>\n <tr>\n <th>Alarak</th>\n <td>-0.123912</td>\n <td>0.092844</td>\n </tr>\n <tr>\n <th>Anubarak</th>\n <td>0.217839</td>\n <td>0.072494</td>\n </tr>\n <tr>\n <th>Artanis</th>\n <td>0.031704</td>\n <td>0.071621</td>\n </tr>\n <tr>\n <th>Arthas</th>\n <td>-0.068054</td>\n <td>0.072569</td>\n </tr>\n <tr>\n <th>Auriel</th>\n <td>0.236680</td>\n <td>0.086944</td>\n </tr>\n <tr>\n <th>Azmodan</th>\n <td>0.050937</td>\n <td>0.089799</td>\n </tr>\n <tr>\n <th>Brightwing</th>\n <td>0.219894</td>\n <td>0.090378</td>\n </tr>\n <tr>\n <th>Cassia</th>\n <td>-0.073980</td>\n <td>0.086752</td>\n </tr>\n <tr>\n <th>Chen</th>\n <td>-0.090962</td>\n <td>0.106347</td>\n </tr>\n <tr>\n <th>Cho</th>\n <td>-0.029603</td>\n <td>0.192337</td>\n </tr>\n <tr>\n <th>Chromie</th>\n <td>-0.147922</td>\n <td>0.081410</td>\n </tr>\n <tr>\n <th>Dehaka</th>\n <td>-0.052107</td>\n <td>0.076658</td>\n </tr>\n <tr>\n <th>Diablo</th>\n <td>-0.125002</td>\n <td>0.074226</td>\n </tr>\n <tr>\n <th>E.T.C.</th>\n <td>-0.318406</td>\n <td>0.080710</td>\n </tr>\n <tr>\n <th>Falstad</th>\n <td>-0.084279</td>\n <td>0.074041</td>\n </tr>\n <tr>\n <th>Gazlowe</th>\n <td>-0.046134</td>\n <td>0.098835</td>\n </tr>\n <tr>\n <th>Genji</th>\n <td>-0.231025</td>\n <td>0.071141</td>\n </tr>\n <tr>\n <th>Greymane</th>\n <td>0.013345</td>\n <td>0.075164</td>\n </tr>\n <tr>\n <th>Guldan</th>\n <td>-0.075087</td>\n <td>0.071950</td>\n </tr>\n <tr>\n <th>Illidan</th>\n <td>-0.231867</td>\n <td>0.090791</td>\n </tr>\n <tr>\n <th>Jaina</th>\n <td>0.005682</td>\n <td>0.074336</td>\n </tr>\n <tr>\n <th>Johanna</th>\n <td>-0.056602</td>\n <td>0.077305</td>\n </tr>\n <tr>\n <th>Kaelthas</th>\n <td>0.061999</td>\n <td>0.069960</td>\n </tr>\n <tr>\n <th>Kharazim</th>\n <td>0.097134</td>\n <td>0.090533</td>\n </tr>\n <tr>\n <th>Leoric</th>\n <td>-0.010650</td>\n <td>0.080061</td>\n </tr>\n <tr>\n <th>Li Li</th>\n <td>0.294467</td>\n <td>0.082250</td>\n </tr>\n <tr>\n <th>Li-Ming</th>\n <td>-0.157817</td>\n <td>0.070352</td>\n </tr>\n <tr>\n <th>Lt. Morales</th>\n <td>0.074805</td>\n <td>0.097942</td>\n </tr>\n <tr>\n <th>Lunara</th>\n <td>-0.165306</td>\n <td>0.083230</td>\n </tr>\n <tr>\n <th>LĂșcio</th>\n <td>0.306283</td>\n <td>0.085365</td>\n </tr>\n <tr>\n <th>Malfurion</th>\n <td>0.184425</td>\n <td>0.084005</td>\n </tr>\n <tr>\n <th>Medivh</th>\n <td>-0.484766</td>\n <td>0.133657</td>\n </tr>\n <tr>\n <th>Muradin</th>\n <td>-0.278738</td>\n <td>0.076251</td>\n </tr>\n <tr>\n <th>Murky</th>\n <td>0.137300</td>\n <td>0.118065</td>\n </tr>\n <tr>\n <th>Nazeebo</th>\n <td>0.119058</td>\n <td>0.071335</td>\n </tr>\n <tr>\n <th>Nova</th>\n <td>-0.118107</td>\n <td>0.094538</td>\n </tr>\n <tr>\n <th>Probius</th>\n <td>0.241767</td>\n <td>0.097563</td>\n </tr>\n <tr>\n <th>Ragnaros</th>\n <td>0.026016</td>\n <td>0.076392</td>\n </tr>\n <tr>\n <th>Raynor</th>\n <td>-0.179442</td>\n <td>0.081743</td>\n </tr>\n <tr>\n <th>Rehgar</th>\n <td>0.150428</td>\n <td>0.090043</td>\n </tr>\n <tr>\n <th>Rexxar</th>\n <td>0.017962</td>\n <td>0.107951</td>\n </tr>\n <tr>\n <th>Samuro</th>\n <td>0.147668</td>\n <td>0.088742</td>\n </tr>\n <tr>\n <th>Sgt. Hammer</th>\n <td>-0.013346</td>\n <td>0.106053</td>\n </tr>\n <tr>\n <th>Sonya</th>\n <td>0.114861</td>\n <td>0.071912</td>\n </tr>\n <tr>\n <th>Stitches</th>\n <td>-0.144782</td>\n <td>0.085668</td>\n </tr>\n <tr>\n <th>Sylvanas</th>\n <td>-0.014683</td>\n <td>0.072811</td>\n </tr>\n <tr>\n <th>Tassadar</th>\n <td>-0.304981</td>\n <td>0.094226</td>\n </tr>\n <tr>\n <th>The Butcher</th>\n <td>0.069496</td>\n <td>0.083529</td>\n </tr>\n <tr>\n <th>The Lost Vikings</th>\n <td>0.037259</td>\n <td>0.165672</td>\n </tr>\n <tr>\n <th>Thrall</th>\n <td>-0.141052</td>\n <td>0.084595</td>\n </tr>\n <tr>\n <th>Tracer</th>\n <td>-0.103110</td>\n <td>0.091010</td>\n </tr>\n <tr>\n <th>Tychus</th>\n <td>-0.108427</td>\n <td>0.082120</td>\n </tr>\n <tr>\n <th>Tyrael</th>\n <td>-0.013088</td>\n <td>0.092284</td>\n </tr>\n <tr>\n <th>Tyrande</th>\n <td>0.128939</td>\n <td>0.098849</td>\n </tr>\n <tr>\n <th>Uther</th>\n <td>0.229908</td>\n <td>0.086290</td>\n </tr>\n <tr>\n <th>Valeera</th>\n <td>-0.252105</td>\n <td>0.082765</td>\n </tr>\n <tr>\n <th>Valla</th>\n <td>-0.084760</td>\n <td>0.068380</td>\n </tr>\n <tr>\n <th>Varian</th>\n <td>-0.059338</td>\n <td>0.070678</td>\n </tr>\n <tr>\n <th>Xul</th>\n <td>-0.071553</td>\n <td>0.112902</td>\n </tr>\n <tr>\n <th>Zagara</th>\n <td>0.032396</td>\n <td>0.094635</td>\n </tr>\n <tr>\n <th>Zarya</th>\n <td>-0.018121</td>\n <td>0.076799</td>\n </tr>\n <tr>\n <th>Zeratul</th>\n <td>-0.264404</td>\n <td>0.090002</td>\n </tr>\n <tr>\n <th>Zuljin</th>\n <td>0.085264</td>\n <td>0.085608</td>\n </tr>\n </tbody>\n</table>'