Statistical Estimation

Estimation

Weighing Penguins

In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import mode
from scipy.constants import pound

Weighing Penguins

In [2]:
sample = pd.Series(np.random.normal(0, 1, size=5000))
sample
Out[2]:
0      -0.717932
1       0.495770
2       1.671748
3      -0.862814
4       0.031351
          ...   
4995    1.514102
4996    0.002657
4997   -0.233125
4998   -0.050474
4999    0.278093
Length: 5000, dtype: float64
In [3]:
fig, ax = plt.subplots()
ax.hist(sample, bins=np.arange(-4, 4, 0.3))
plt.show()
No description has been provided for this image
In [4]:
np.mean(sample), np.std(sample)
Out[4]:
(np.float64(0.01370825310918264), np.float64(1.0102147861939337))

We didn't have to show it in graph but we can totally say that np.random.normal creates normally distributed numbers.

In [5]:
def make_normal_sample(mu, sigma, n):
    return np.random.normal(mu, sigma, n)
In [6]:
ns = np.logspace(1, 5).astype(int)

We are going to use these ns to see how the estimator changes when the sample size increases.

In [7]:
mu = 3.7
sigma = 0.46
In [8]:
means = [np.mean(make_normal_sample(mu, sigma, n)) for n in ns]
medians = [np.median(make_normal_sample(mu, sigma, n)) for n in ns]
In [9]:
fig, axes = plt.subplots(1, 2, figsize=(12, 3))
axes[0].plot(ns, means)
axes[1].plot(ns, medians)
axes[0].set_ylabel("Sample Mean")
axes[0].set_xlabel("Sample Size")
axes[1].set_ylabel("Sample Median")
axes[1].set_xlabel("Sample Size")
plt.tight_layout()
plt.show()
No description has been provided for this image

Right here, we've visualized the WLLN (Weak Law of Large Numbers) in action. We can also see that in a normal distribution, mean, median and the mode are perfectly equal in a normal distribution. But using the mean is usually preferred here because it is more statistically efficient.

What is an estimator? Simply put, an estimator is a rule or formula used to make an educated guess about a population parameter (like the mean, standard deviation, or median) based on sample data. When an estimator gets closer to the true population parameter as the sample size goes to infinity, we specifically call it a consistent estimator.

Before diving into deeper topics, I just want to clarify that we are currently focusing on central tendency measures. While all of these are useful under the right conditions, picking the most useful may depend on the question we’re asking. Let’s illustrate this with a real-world example.

If we plotted a histogram of global wealth, we would see a right-skewed distribution (Lognormal is our best choice here). This happens because the vast majority of people earn roughly the same average income, while a tiny fraction of the population holds an extreme amount of wealth.

In [10]:
income = np.random.lognormal(9, 2.1, size=1_000_000)
bins = np.linspace(0, 200_000, 100)
In [11]:
fig, ax = plt.subplots()
ax.hist(income, bins=bins)
ax.set_xlim(0, 200_000)
ax.set_ylabel("Number of people (out of 1 mil.)")
ax.set_xlabel("Wage (dollars)")
plt.tight_layout()
plt.show()
No description has been provided for this image

Let's also visualize the mean, median and the mode of this distribution.

In [12]:
fig, ax = plt.subplots()
ax.hist(income, bins=bins)
ax.axvline(
    np.mean(income),
    linestyle="--",
    color="blue",
    alpha=0.5,
    label=f"mean ({np.mean(income):.2f})",
)
ax.axvline(
    np.median(income),
    linestyle="--",
    color="red",
    alpha=0.5,
    label=f"median ({np.median(income):.2f})",
)
ax.set_xlim(0, 200_000)
ax.set_ylabel("Number of people (out of 1 mil.)")
ax.set_xlabel("Wage (dollars)")
ax.legend()
plt.tight_layout()
plt.show()
No description has been provided for this image

So comparing the mean and the median, which one would be closer to the answer we would get if we asked people about their wages? It would probably be the median value. Because the mean is very sensitive to outliers, and we have ultra-rich people in the distribution, we cannot rely on it.

So what does this have to do with estimation? Nothing. I just wanted to make it clearer that the fact we can obtain the same result using both the mean and the median above is a property of the normal distribution. Let's keep going with the estmiation.

Let's check out means and medians first.

In [13]:
means[:5], medians[:5]
Out[13]:
([np.float64(3.710588369313455),
  np.float64(3.610824365255988),
  np.float64(3.6625750656149445),
  np.float64(3.627649671764413),
  np.float64(3.582960331275818)],
 [np.float64(3.804422738321767),
  np.float64(3.7989901287514485),
  np.float64(3.6239311738164197),
  np.float64(3.7248346481788124),
  np.float64(3.6826402383273416)])

We are sure that both mean and the median is a great estimators, but let's take a look at the RMSE (Root Mean Sqaure Error) of both estimates.

In [14]:
def mse(estimates, actual):
    errors = np.asarray(estimates) - actual
    return np.mean(errors**2)
In [15]:
means_rmse = np.sqrt(mse(means, mu))
medians_rmse = np.sqrt(mse(medians, mu))
means_rmse, medians_rmse
Out[15]:
(np.float64(0.035784900129106144), np.float64(0.04074764240633559))

It looks like the RMSE of means is lower, which means the deviation of the sample means is lower compared to deviation of the sample medians.

Robustness

The mu and the sigma we use here are from an imaginary penguin weight dataset.

If we expand on the scenario, we take the penguins, weigh them, and record their weights. However, let’s say that 2% of the penguins accidentally pressed the “unit” button, and some of them were measured in kilograms instead of pounds.

In [16]:
def make_normal_sample_with_errors(mu, sigma, n):
    sample = np.random.normal(mu, sigma, n)
    factor = np.random.choice([1, 1 / pound], p=[0.98, 0.02], size=n)
    return factor * sample
In [17]:
sample = make_normal_sample_with_errors(mu, sigma, 5000)
sample_pdf = pd.Series(sample).value_counts(normalize=True)
In [18]:
fig, ax = plt.subplots()
ax.hist(sample, bins=40, density=True, alpha=0.8)
sns.kdeplot(sample, ax=ax, color="red")
plt.show()
No description has been provided for this image

As we can see, the outliers are causing the plot to extend to the right. Let's see which estimator is unbiased with the faulty dataset.

In [19]:
ns = np.logspace(1, 5).astype(int)
faulty_means = [np.mean(make_normal_sample_with_errors(mu, sigma, n)) for n in ns]
faulty_medians = [np.median(make_normal_sample_with_errors(mu, sigma, n)) for n in ns]
In [20]:
fig, axes = plt.subplots(1, 2, figsize=(12, 3))
axes[0].plot(ns, faulty_means)
axes[1].plot(ns, faulty_medians)
axes[0].axhline(mu, linestyle="--", color="red", alpha=0.6)
axes[1].axhline(mu, linestyle="--", color="red", alpha=0.6)
axes[0].set_ylabel("Sample Mean")
axes[0].set_xlabel("Sample Size")
axes[1].set_ylabel("Sample Median")
axes[1].set_xlabel("Sample Size")
plt.tight_layout()
plt.show()
No description has been provided for this image

With the faulty dataset, median is the less biased estimator. That's because, as we've always been saying, the median is much more robust.

Estimating Variance

Suppose we want to estimate the variance in the penguins' weights. But we also have to know that there are two ways of computing the variance, one is biased, and the other one is unbiased. Let's see the difference between them.

In [21]:
def biased_var(data):
    n = len(data)
    mean = np.mean(data)
    deviations = data - mean
    return np.mean(np.sum(deviations**2) / n)
In [22]:
biased_vars = [biased_var(make_normal_sample(mu, sigma, n=50)) for i in range(1001)]
np.mean(biased_vars), sigma**2
Out[22]:
(np.float64(0.20780642857990253), 0.2116)

We know that our population variance is 0.2116, but biased_vars consistently gives an underestimation.

In [23]:
def unbiased_var(data):
    n = len(data)
    mean = np.mean(data)
    deviations = data - mean
    return np.mean(np.sum(deviations**2) / (n - 1))


unbiased_vars = [unbiased_var(make_normal_sample(mu, sigma, n=50)) for i in range(1001)]
np.mean(unbiased_vars), sigma**2
Out[23]:
(np.float64(0.2118673895379583), 0.2116)

unbiased_vars gives us a much closer value to population variance. Because compared to the population, the data points are closer together in a sample, and because variance estimates deviation, we consistently overestimate the variance.

That's was the practical reason, there is also a mathematically proven reason which I'm not going to get into here.

Sampling Distributions

So far we've been working with simulated data, now, let's see what happens with real data.

In [24]:
peng = (
    pd.read_csv("./data/penguins_raw.csv")
    .dropna(subset="Body Mass (g)")
    .reset_index(drop=True)
)
In [25]:
peng.shape
peng
Out[25]:
studyName Sample Number Species Region Island Stage Individual ID Clutch Completion Date Egg Culmen Length (mm) Culmen Depth (mm) Flipper Length (mm) Body Mass (g) Sex Delta 15 N (o/oo) Delta 13 C (o/oo) Comments
0 PAL0708 1 Adelie Penguin (Pygoscelis adeliae) Anvers Torgersen Adult, 1 Egg Stage N1A1 Yes 2007-11-11 39.1 18.7 181.0 3750.0 MALE NaN NaN Not enough blood for isotopes.
1 PAL0708 2 Adelie Penguin (Pygoscelis adeliae) Anvers Torgersen Adult, 1 Egg Stage N1A2 Yes 2007-11-11 39.5 17.4 186.0 3800.0 FEMALE 8.94956 -24.69454 NaN
2 PAL0708 3 Adelie Penguin (Pygoscelis adeliae) Anvers Torgersen Adult, 1 Egg Stage N2A1 Yes 2007-11-16 40.3 18.0 195.0 3250.0 FEMALE 8.36821 -25.33302 NaN
3 PAL0708 5 Adelie Penguin (Pygoscelis adeliae) Anvers Torgersen Adult, 1 Egg Stage N3A1 Yes 2007-11-16 36.7 19.3 193.0 3450.0 FEMALE 8.76651 -25.32426 NaN
4 PAL0708 6 Adelie Penguin (Pygoscelis adeliae) Anvers Torgersen Adult, 1 Egg Stage N3A2 Yes 2007-11-16 39.3 20.6 190.0 3650.0 MALE 8.66496 -25.29805 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
337 PAL0910 64 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N98A2 Yes 2009-11-19 55.8 19.8 207.0 4000.0 MALE 9.70465 -24.53494 NaN
338 PAL0910 65 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A1 No 2009-11-21 43.5 18.1 202.0 3400.0 FEMALE 9.37608 -24.40753 Nest never observed with full clutch.
339 PAL0910 66 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A2 No 2009-11-21 49.6 18.2 193.0 3775.0 MALE 9.46180 -24.70615 Nest never observed with full clutch.
340 PAL0910 67 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A1 Yes 2009-11-21 50.8 19.0 210.0 4100.0 MALE 9.98044 -24.68741 NaN
341 PAL0910 68 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A2 Yes 2009-11-21 50.2 18.7 198.0 3775.0 FEMALE 9.39305 -24.25255 NaN

342 rows × 17 columns

For this example, we are only going to use Chinstrap penguins.

In [26]:
chin = peng[peng["Species"] == "Chinstrap penguin (Pygoscelis antarctica)"]
chin
Out[26]:
studyName Sample Number Species Region Island Stage Individual ID Clutch Completion Date Egg Culmen Length (mm) Culmen Depth (mm) Flipper Length (mm) Body Mass (g) Sex Delta 15 N (o/oo) Delta 13 C (o/oo) Comments
274 PAL0708 1 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N61A1 No 2007-11-19 46.5 17.9 192.0 3500.0 FEMALE 9.03935 -24.30229 Nest never observed with full clutch.
275 PAL0708 2 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N61A2 No 2007-11-19 50.0 19.5 196.0 3900.0 MALE 8.92069 -24.23592 Nest never observed with full clutch.
276 PAL0708 3 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N62A1 Yes 2007-11-26 51.3 19.2 193.0 3650.0 MALE 9.29078 -24.75570 NaN
277 PAL0708 4 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N62A2 Yes 2007-11-26 45.4 18.7 188.0 3525.0 FEMALE 8.64701 -24.62717 NaN
278 PAL0708 5 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N64A1 Yes 2007-11-21 52.7 19.8 197.0 3725.0 MALE 9.00642 -24.61867 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
337 PAL0910 64 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N98A2 Yes 2009-11-19 55.8 19.8 207.0 4000.0 MALE 9.70465 -24.53494 NaN
338 PAL0910 65 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A1 No 2009-11-21 43.5 18.1 202.0 3400.0 FEMALE 9.37608 -24.40753 Nest never observed with full clutch.
339 PAL0910 66 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A2 No 2009-11-21 49.6 18.2 193.0 3775.0 MALE 9.46180 -24.70615 Nest never observed with full clutch.
340 PAL0910 67 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A1 Yes 2009-11-21 50.8 19.0 210.0 4100.0 MALE 9.98044 -24.68741 NaN
341 PAL0910 68 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A2 Yes 2009-11-21 50.2 18.7 198.0 3775.0 FEMALE 9.39305 -24.25255 NaN

68 rows × 17 columns

In [27]:
chin["Body Mass (kg)"] = chin["Body Mass (g)"] / 1000
chin["Body Mass (kg)"]
Out[27]:
274    3.500
275    3.900
276    3.650
277    3.525
278    3.725
       ...  
337    4.000
338    3.400
339    3.775
340    4.100
341    3.775
Name: Body Mass (kg), Length: 68, dtype: float64
In [28]:
fig, ax = plt.subplots()
sns.kdeplot(chin["Body Mass (kg)"], ax=ax)
plt.show()
No description has been provided for this image
In [29]:
sample = chin["Body Mass (kg)"].sample(35)
np.mean(sample)
Out[29]:
np.float64(3.6785714285714284)

So there are multiple methods which use resampling, we can generally use bootstrapping to estimate the population parameters, we can also use permutation tests for null hypothesis. But in this example, since we know about the population distribution, we are going to cheat and use parametric resampling, which also a form of bootstrapping but with more trust on mathematical model rather than the data.

In [30]:
def resample(sample):
    mean, std = np.mean(sample), np.std(sample)
    return np.random.normal(mean, std, len(sample))
In [31]:
sample_means = [np.mean(resample(sample)) for i in range(1001)]
sample_means[:5]
Out[31]:
[np.float64(3.536264283313898),
 np.float64(3.7173850316382464),
 np.float64(3.6127182745741706),
 np.float64(3.686842614627953),
 np.float64(3.6927234354762275)]
In [32]:
np.mean(chin["Body Mass (kg)"]), np.mean(sample_means)
Out[32]:
(np.float64(3.733088235294118), np.float64(3.6785829589919152))

This is the secnario where we try to estimate the dataset's parameters using a small part of dataset. But what if we wanted to estimate the overall parameters of the Chinstrap penguins at Antarctica, even with the ones that are not in the dataset.

In [33]:
sample_means_overall = [np.mean(resample(chin["Body Mass (kg)"])) for i in range(10000)]
np.mean(sample_means_overall)
Out[33]:
np.float64(3.7328337924810797)

Not surprisingly, we are going to see a normal distribution for the distribution of the means.

In [34]:
fig, ax = plt.subplots()
sample_means_overall_df = pd.Series(sample_means_overall)
ax.hist(sample_means_overall_df, bins=50, alpha=0.6, edgecolor="black", density=True)
sns.kdeplot(sample_means_overall, ax=ax, color="red", alpha=0.8)
ax.set_xlim(3.51)
plt.show()
No description has been provided for this image

Standard Error

We know that standard deviation measures the spread, but to use the correct terminology, standard deviation of the sample means is called standard error. Let's compute that.

In [35]:
print("Std. Err.", np.std(sample_means_overall))
Std. Err. 0.04630467395916925

Which translates to, "if we collect many samples, we expect sample means to vary by about the above value, on average."

Confidence Intervals

Another way of summarizing sampling distributions is to compute a confidence interval. For example, 90% confidence interval contains 90% of the values in the sampling distribution.

In [36]:
np.percentile(sample_means_overall, [5, 95])
Out[36]:
array([3.65686101, 3.80953302])

Exercies

Let's find the sampling distribution of the standard deviation for Chinstrap penguins

In [37]:
chin
Out[37]:
studyName Sample Number Species Region Island Stage Individual ID Clutch Completion Date Egg Culmen Length (mm) Culmen Depth (mm) Flipper Length (mm) Body Mass (g) Sex Delta 15 N (o/oo) Delta 13 C (o/oo) Comments Body Mass (kg)
274 PAL0708 1 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N61A1 No 2007-11-19 46.5 17.9 192.0 3500.0 FEMALE 9.03935 -24.30229 Nest never observed with full clutch. 3.500
275 PAL0708 2 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N61A2 No 2007-11-19 50.0 19.5 196.0 3900.0 MALE 8.92069 -24.23592 Nest never observed with full clutch. 3.900
276 PAL0708 3 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N62A1 Yes 2007-11-26 51.3 19.2 193.0 3650.0 MALE 9.29078 -24.75570 NaN 3.650
277 PAL0708 4 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N62A2 Yes 2007-11-26 45.4 18.7 188.0 3525.0 FEMALE 8.64701 -24.62717 NaN 3.525
278 PAL0708 5 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N64A1 Yes 2007-11-21 52.7 19.8 197.0 3725.0 MALE 9.00642 -24.61867 NaN 3.725
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
337 PAL0910 64 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N98A2 Yes 2009-11-19 55.8 19.8 207.0 4000.0 MALE 9.70465 -24.53494 NaN 4.000
338 PAL0910 65 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A1 No 2009-11-21 43.5 18.1 202.0 3400.0 FEMALE 9.37608 -24.40753 Nest never observed with full clutch. 3.400
339 PAL0910 66 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N99A2 No 2009-11-21 49.6 18.2 193.0 3775.0 MALE 9.46180 -24.70615 Nest never observed with full clutch. 3.775
340 PAL0910 67 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A1 Yes 2009-11-21 50.8 19.0 210.0 4100.0 MALE 9.98044 -24.68741 NaN 4.100
341 PAL0910 68 Chinstrap penguin (Pygoscelis antarctica) Anvers Dream Adult, 1 Egg Stage N100A2 Yes 2009-11-21 50.2 18.7 198.0 3775.0 FEMALE 9.39305 -24.25255 NaN 3.775

68 rows × 18 columns

In [38]:
def bootstrap(sample):
    return np.random.choice(sample, len(sample), replace=True)
In [39]:
chin_std_distribution = [
    np.std(bootstrap(chin["Body Mass (kg)"]), ddof=1) for _ in range(10000)
]
chin_std_distribution
Out[39]:
[np.float64(0.45996117592966335),
 np.float64(0.38656568377874573),
 np.float64(0.2899509510153954),
 np.float64(0.40015704226258986),
 np.float64(0.36416732296192805),
 np.float64(0.43100519034007906),
 np.float64(0.3855495889164044),
 np.float64(0.4610504239400247),
 np.float64(0.3478965625264711),
 np.float64(0.3690707727443581),
 np.float64(0.37927834529978777),
 np.float64(0.3688906425888844),
 np.float64(0.37489444666060645),
 np.float64(0.40720977157784555),
 np.float64(0.3779551399257755),
 np.float64(0.4354003927138985),
 np.float64(0.383286947194105),
 np.float64(0.3874745099095876),
 np.float64(0.39629886138232046),
 np.float64(0.31788231459933514),
 np.float64(0.42922277876454784),
 np.float64(0.34873171058874075),
 np.float64(0.3478650156879765),
 np.float64(0.328143773763692),
 np.float64(0.32851458695996816),
 np.float64(0.335927587675596),
 np.float64(0.4048940276383538),
 np.float64(0.3827525748862958),
 np.float64(0.38264933934451023),
 np.float64(0.3309875942281275),
 np.float64(0.4308076503066936),
 np.float64(0.3467450237585493),
 np.float64(0.3638899663282584),
 np.float64(0.41604665605861946),
 np.float64(0.4224382783204458),
 np.float64(0.3595544247097485),
 np.float64(0.3776492242374717),
 np.float64(0.35419902931896985),
 np.float64(0.4206523412867523),
 np.float64(0.38477154065585856),
 np.float64(0.40990266302121975),
 np.float64(0.4437350450063788),
 np.float64(0.36830111925229525),
 np.float64(0.35335525671076023),
 np.float64(0.3390183871958747),
 np.float64(0.3886871489213543),
 np.float64(0.38790902822582574),
 np.float64(0.34182732113081044),
 np.float64(0.3549737528785195),
 np.float64(0.3282555840955389),
 np.float64(0.409813631382701),
 np.float64(0.4177752847435823),
 np.float64(0.41891069702356915),
 np.float64(0.3994969125576667),
 np.float64(0.3847758189652825),
 np.float64(0.3585842136502837),
 np.float64(0.40991738819530926),
 np.float64(0.4012879492555625),
 np.float64(0.37835327633314886),
 np.float64(0.386851783011679),
 np.float64(0.39910371351816054),
 np.float64(0.40806926175351615),
 np.float64(0.3569044536978476),
 np.float64(0.3872650382272933),
 np.float64(0.4377670701208319),
 np.float64(0.34641709161189316),
 np.float64(0.3412784783435797),
 np.float64(0.35885477625215123),
 np.float64(0.3522914687766127),
 np.float64(0.43798887773972633),
 np.float64(0.3591828106741158),
 np.float64(0.33555004441818065),
 np.float64(0.4193628562758993),
 np.float64(0.342661848226537),
 np.float64(0.37973669312017205),
 np.float64(0.37367614580047587),
 np.float64(0.39569192905805606),
 np.float64(0.3525826184788186),
 np.float64(0.381746274891226),
 np.float64(0.38663523263764915),
 np.float64(0.37730034141185126),
 np.float64(0.3854264595881534),
 np.float64(0.4170983094913107),
 np.float64(0.40871806351490186),
 np.float64(0.31940698832036235),
 np.float64(0.37040053184995864),
 np.float64(0.369726603308485),
 np.float64(0.40448199565770276),
 np.float64(0.3775069843936968),
 np.float64(0.37958258663829236),
 np.float64(0.3090385555188713),
 np.float64(0.39609232474140643),
 np.float64(0.39237740154274914),
 np.float64(0.41303042758236036),
 np.float64(0.40748373311925495),
 np.float64(0.37403134332001775),
 np.float64(0.43337371212785475),
 np.float64(0.3962419144171914),
 np.float64(0.3835461644030226),
 np.float64(0.36552036343312594),
 np.float64(0.35082114729937464),
 np.float64(0.4311310529933283),
 np.float64(0.33952967392147354),
 np.float64(0.3523802404299629),
 np.float64(0.44183215104009),
 np.float64(0.3623470810637219),
 np.float64(0.4003323561625935),
 np.float64(0.32523122726031434),
 np.float64(0.4493415031303804),
 np.float64(0.3520322287504607),
 np.float64(0.394543417560919),
 np.float64(0.39327000685021973),
 np.float64(0.32116306519040044),
 np.float64(0.3202256187178516),
 np.float64(0.3969129878019423),
 np.float64(0.3529468008770465),
 np.float64(0.31737332682142605),
 np.float64(0.36773471299239097),
 np.float64(0.36711624322602004),
 np.float64(0.38035321599811056),
 np.float64(0.42563475812275064),
 np.float64(0.3416715739456436),
 np.float64(0.35141813383048265),
 np.float64(0.420737123075653),
 np.float64(0.40420786622978633),
 np.float64(0.39932638489950745),
 np.float64(0.35898931235176335),
 np.float64(0.36387432103694345),
 np.float64(0.3419212168395257),
 np.float64(0.37487852876061634),
 np.float64(0.33434080538275),
 np.float64(0.34286176046134825),
 np.float64(0.3690780207244994),
 np.float64(0.4021430396805057),
 np.float64(0.3405251699244319),
 np.float64(0.3926383037565512),
 np.float64(0.4014555934385183),
 np.float64(0.35158204937841653),
 np.float64(0.3632494674361204),
 np.float64(0.4291243291396164),
 np.float64(0.3473900872151461),
 np.float64(0.4088108571756483),
 np.float64(0.3830995361643061),
 np.float64(0.45501184270012807),
 np.float64(0.40124572811228554),
 np.float64(0.39108869537108687),
 np.float64(0.38725157717054054),
 np.float64(0.40432324037102596),
 np.float64(0.3868069221711373),
 np.float64(0.3375422696516398),
 np.float64(0.41962201834411916),
 np.float64(0.3640318742134696),
 np.float64(0.4542591521418729),
 np.float64(0.4214598463757983),
 np.float64(0.388296428710856),
 np.float64(0.34859459304255913),
 np.float64(0.3433689223807128),
 np.float64(0.3280718606370849),
 np.float64(0.3779841754286166),
 np.float64(0.3255834483969685),
 np.float64(0.3868099366989692),
 np.float64(0.364959038617083),
 np.float64(0.3540380690630846),
 np.float64(0.410158772176492),
 np.float64(0.3503312351469372),
 np.float64(0.33292409763322783),
 np.float64(0.3443963414312358),
 np.float64(0.3795030699666805),
 np.float64(0.32089492261617797),
 np.float64(0.3188113761942462),
 np.float64(0.3930704292862541),
 np.float64(0.4354087419971611),
 np.float64(0.40700809761926826),
 np.float64(0.3849910991183448),
 np.float64(0.38098800530249277),
 np.float64(0.41618693117024896),
 np.float64(0.4277835817334536),
 np.float64(0.37211190311145065),
 np.float64(0.4006899435478808),
 np.float64(0.35022960611199916),
 np.float64(0.38274415219619784),
 np.float64(0.4176053225754808),
 np.float64(0.34568926801039),
 np.float64(0.43194231148124523),
 np.float64(0.37537002522638213),
 np.float64(0.3591973236201427),
 np.float64(0.3934961537329607),
 np.float64(0.41563016749050186),
 np.float64(0.378726001943158),
 np.float64(0.33434737019993704),
 np.float64(0.3776128973161414),
 np.float64(0.4006899435478808),
 np.float64(0.3832382685178254),
 np.float64(0.4271197395919301),
 np.float64(0.3558221692847728),
 np.float64(0.3972261703079545),
 np.float64(0.39137779744592816),
 np.float64(0.3634737232563106),
 np.float64(0.40417918725269963),
 np.float64(0.3669218813759744),
 np.float64(0.3299812014093864),
 np.float64(0.38886692830325265),
 np.float64(0.38550244143577245),
 np.float64(0.3889820916226872),
 np.float64(0.4085354350751328),
 np.float64(0.3819023819302105),
 np.float64(0.39834972898788756),
 np.float64(0.42230836316564796),
 np.float64(0.4186517499693682),
 np.float64(0.3589360008104336),
 np.float64(0.4183554268435476),
 np.float64(0.3691963842580988),
 np.float64(0.40140552967507975),
 np.float64(0.34905235908875587),
 np.float64(0.37052920978365156),
 np.float64(0.3679627595363679),
 np.float64(0.38523332353851514),
 np.float64(0.3419771808615691),
 np.float64(0.43664880195770306),
 np.float64(0.34266745296088535),
 np.float64(0.3716264335348654),
 np.float64(0.41778267283458237),
 np.float64(0.35548042156233467),
 np.float64(0.3663817999762258),
 np.float64(0.30029159811449313),
 np.float64(0.34177012841386767),
 np.float64(0.41572999781095255),
 np.float64(0.3534344459647093),
 np.float64(0.36451089940600817),
 np.float64(0.3309691501608706),
 np.float64(0.47970041591128615),
 np.float64(0.40522457029467057),
 np.float64(0.3542224602715684),
 np.float64(0.3878759610932725),
 np.float64(0.3691820785945595),
 np.float64(0.423678418269224),
 np.float64(0.40079948499587514),
 np.float64(0.37021215561730675),
 np.float64(0.4623589408314854),
 np.float64(0.42387782438903265),
 np.float64(0.33359485917837084),
 np.float64(0.3361951656709899),
 np.float64(0.4290552730692764),
 np.float64(0.3699536074182695),
 np.float64(0.3918204162450948),
 np.float64(0.36113070529072333),
 np.float64(0.3711270223000468),
 np.float64(0.3671582791270256),
 np.float64(0.41691935197249586),
 np.float64(0.3378617626722971),
 np.float64(0.4025630884306372),
 np.float64(0.4000553832927292),
 np.float64(0.395626572927453),
 np.float64(0.39628778419435046),
 np.float64(0.46531515158922926),
 np.float64(0.38222840208551073),
 np.float64(0.44097624956202297),
 np.float64(0.35911004614385256),
 np.float64(0.3929475619411192),
 np.float64(0.3318799710569501),
 np.float64(0.36144358039478863),
 np.float64(0.36790310443014956),
 np.float64(0.34496010762987367),
 np.float64(0.48620722986062687),
 np.float64(0.3175809506697),
 np.float64(0.360441728555301),
 np.float64(0.37089777746128966),
 np.float64(0.3414569038168347),
 np.float64(0.40198336067101736),
 np.float64(0.42227717758112665),
 np.float64(0.4492970805042082),
 np.float64(0.3934457745105999),
 np.float64(0.36585404521043546),
 np.float64(0.3518615052491636),
 np.float64(0.43662256801588967),
 np.float64(0.3142119481747443),
 np.float64(0.4000761286203351),
 np.float64(0.34426347435028537),
 np.float64(0.3278759009946125),
 np.float64(0.37958565853910875),
 np.float64(0.35902141010646926),
 np.float64(0.3550216701889834),
 np.float64(0.4333407903277701),
 np.float64(0.41014004198399157),
 np.float64(0.38357692251655273),
 np.float64(0.4511052420672412),
 np.float64(0.3286231403133829),
 np.float64(0.371596901256866),
 np.float64(0.314712754185557),
 np.float64(0.3475083373915345),
 np.float64(0.4007982870482235),
 np.float64(0.43191055104047615),
 np.float64(0.41908536719338),
 np.float64(0.3977341994539526),
 np.float64(0.41211005326886624),
 np.float64(0.3026614096395291),
 np.float64(0.37039293938121876),
 np.float64(0.3922908618371682),
 np.float64(0.3877774503059189),
 np.float64(0.36649841415321543),
 np.float64(0.38931486835875856),
 np.float64(0.294068847466106),
 np.float64(0.4258499995593175),
 np.float64(0.3508260351454958),
 np.float64(0.3778883498026811),
 np.float64(0.31750815734787147),
 np.float64(0.34692775534333953),
 np.float64(0.4157009587358947),
 np.float64(0.4062078302554529),
 np.float64(0.36933365329185336),
 np.float64(0.4324547609645986),
 np.float64(0.30556281640170124),
 np.float64(0.3685142975963397),
 np.float64(0.40112331296458875),
 np.float64(0.3548771257259007),
 np.float64(0.3405300041314774),
 np.float64(0.36354542571511544),
 np.float64(0.4108485178375436),
 np.float64(0.3616431625198603),
 np.float64(0.3425713591126445),
 np.float64(0.42315161242034993),
 np.float64(0.4050926903763046),
 np.float64(0.3651379148804338),
 np.float64(0.40448589591136597),
 np.float64(0.38197637125897665),
 np.float64(0.38854506615993156),
 np.float64(0.33271388521034806),
 np.float64(0.4412928219415117),
 np.float64(0.4142588278198668),
 np.float64(0.3843077750695773),
 np.float64(0.3293872180588438),
 np.float64(0.3767851495832131),
 np.float64(0.31750491690108557),
 np.float64(0.37380241167800804),
 np.float64(0.4320802834872266),
 np.float64(0.38242413187114804),
 np.float64(0.41759924535258897),
 np.float64(0.43420147485220256),
 np.float64(0.30593521610469915),
 np.float64(0.4181955415526797),
 np.float64(0.39677194909337693),
 np.float64(0.3584615806260122),
 np.float64(0.3677404951504328),
 np.float64(0.40137955556991134),
 np.float64(0.3613403311878324),
 np.float64(0.38056432930022893),
 np.float64(0.39007101849948056),
 np.float64(0.315467473337549),
 np.float64(0.37833877302354135),
 np.float64(0.31379494648133777),
 np.float64(0.3933885888915201),
 np.float64(0.3920584213489853),
 np.float64(0.3138703492478419),
 np.float64(0.3361472173200726),
 np.float64(0.33195250560724626),
 np.float64(0.3832534812683402),
 np.float64(0.3675257482036124),
 np.float64(0.31925920997190915),
 np.float64(0.3616515076615252),
 np.float64(0.3832362997648041),
 np.float64(0.37397797515350045),
 np.float64(0.3663158956173127),
 np.float64(0.4277051682299863),
 np.float64(0.3982691370557951),
 np.float64(0.381215680531909),
 np.float64(0.4021143840145874),
 np.float64(0.31836700595834316),
 np.float64(0.3998399797895448),
 np.float64(0.45660574456542835),
 np.float64(0.4118138532064127),
 np.float64(0.4466677115671432),
 np.float64(0.39420374478893394),
 np.float64(0.3205210721343877),
 np.float64(0.3641432133800467),
 np.float64(0.38969383088029924),
 np.float64(0.37025958284943145),
 np.float64(0.36608195174126457),
 np.float64(0.3868751866025781),
 np.float64(0.3417189478690756),
 np.float64(0.3990337594445746),
 np.float64(0.35424550242410774),
 np.float64(0.36015369457189256),
 np.float64(0.3940589514264302),
 np.float64(0.38999997186015517),
 np.float64(0.3511676246674431),
 np.float64(0.34539568356670947),
 np.float64(0.349747494517092),
 np.float64(0.3863001475468683),
 np.float64(0.41042575166465806),
 np.float64(0.39594822200981084),
 np.float64(0.4062807697538949),
 np.float64(0.39083553369492297),
 np.float64(0.43556041902541814),
 np.float64(0.39146453899953393),
 np.float64(0.40160233143786667),
 np.float64(0.3406228478760213),
 np.float64(0.3603100191792942),
 np.float64(0.3866834836783243),
 np.float64(0.37579207393959346),
 np.float64(0.3716007775021612),
 np.float64(0.3671567845997292),
 np.float64(0.3714826261450942),
 np.float64(0.35832072089883515),
 np.float64(0.384912165162722),
 np.float64(0.4339677741178291),
 np.float64(0.36654482488221923),
 np.float64(0.36221530705575666),
 np.float64(0.400509134658235),
 np.float64(0.37021159979341256),
 np.float64(0.3587624446055499),
 np.float64(0.4061384242673598),
 np.float64(0.4169812062704888),
 np.float64(0.39503249857974054),
 np.float64(0.39237058395558083),
 np.float64(0.3992205627545699),
 np.float64(0.39108869537108687),
 np.float64(0.41080928288049934),
 np.float64(0.36398646217191233),
 np.float64(0.35616724814044426),
 np.float64(0.34116289405641437),
 np.float64(0.34208807890855136),
 np.float64(0.33879920164345206),
 np.float64(0.3774670095300808),
 np.float64(0.3539504883457227),
 np.float64(0.4154413318622628),
 np.float64(0.37873596283355393),
 np.float64(0.365533874175085),
 np.float64(0.3833112842140112),
 np.float64(0.40558748402693295),
 np.float64(0.3498251475943041),
 np.float64(0.37405279847792333),
 np.float64(0.4368198337577852),
 np.float64(0.3982829146100006),
 np.float64(0.35625043320522615),
 np.float64(0.3857751054148748),
 np.float64(0.39088817956047905),
 np.float64(0.40385594136820874),
 np.float64(0.3635084441077877),
 np.float64(0.4239289556495328),
 np.float64(0.3657760445869558),
 np.float64(0.4526201643425168),
 np.float64(0.42343356423257306),
 np.float64(0.37886072343434335),
 np.float64(0.3609405316442999),
 np.float64(0.3724789047181768),
 np.float64(0.3737181779876175),
 np.float64(0.43492453403698333),
 np.float64(0.3342252845391642),
 np.float64(0.3996409371193069),
 np.float64(0.35623522257292345),
 np.float64(0.37486901429076425),
 np.float64(0.29907557125618345),
 np.float64(0.319614793322561),
 np.float64(0.37360583685818394),
 np.float64(0.3839851280683924),
 np.float64(0.3751484926952979),
 np.float64(0.3884075229228159),
 np.float64(0.3382797142263597),
 np.float64(0.3167554854030528),
 np.float64(0.38293549866389015),
 np.float64(0.29092206052978736),
 np.float64(0.3950130511507887),
 np.float64(0.4331880194377174),
 np.float64(0.36235029908218885),
 np.float64(0.34452696732126664),
 np.float64(0.3663271301531132),
 np.float64(0.35090090843670274),
 np.float64(0.4093016587956717),
 np.float64(0.4152638075377461),
 np.float64(0.386997146042159),
 np.float64(0.41832738984219775),
 np.float64(0.4065631180027345),
 np.float64(0.3902285411278869),
 np.float64(0.3698386390900814),
 np.float64(0.3618940016596374),
 np.float64(0.3619616586295054),
 np.float64(0.37105844857160336),
 np.float64(0.40733978736492266),
 np.float64(0.3276247676336278),
 np.float64(0.3991533786232731),
 np.float64(0.40829762719185675),
 np.float64(0.3573456247421928),
 np.float64(0.35382082134494014),
 np.float64(0.3230455091928343),
 np.float64(0.40459712209998366),
 np.float64(0.3887979550721756),
 np.float64(0.3592368493288453),
 np.float64(0.3957668066332246),
 np.float64(0.3358914452525611),
 np.float64(0.3603958641341307),
 np.float64(0.3430889465451195),
 np.float64(0.30378339373192714),
 np.float64(0.421531936651552),
 np.float64(0.40706471794021537),
 np.float64(0.38149608309066635),
 np.float64(0.3201688518931279),
 np.float64(0.3388518353000555),
 np.float64(0.32442353650127864),
 np.float64(0.36194555097426107),
 np.float64(0.3195031793373464),
 np.float64(0.41940210877043604),
 np.float64(0.44430352121495),
 np.float64(0.35823188956157803),
 np.float64(0.376687015955507),
 np.float64(0.35451666759570083),
 np.float64(0.3476851440516339),
 np.float64(0.41636043765877906),
 np.float64(0.36627769561807494),
 np.float64(0.39715571282340933),
 np.float64(0.36346843935771206),
 np.float64(0.4126398185366587),
 np.float64(0.31040010007194063),
 np.float64(0.37494713557728626),
 np.float64(0.40584428819422486),
 np.float64(0.4442831427980799),
 np.float64(0.33232092651558315),
 np.float64(0.3449092015748378),
 np.float64(0.39836281502775744),
 np.float64(0.40993529195577827),
 np.float64(0.418351000073516),
 np.float64(0.4318141437990412),
 np.float64(0.3307014918835069),
 np.float64(0.44944773325201354),
 np.float64(0.40953888366602764),
 np.float64(0.42335045658050063),
 np.float64(0.4422535870901644),
 np.float64(0.37192752882632746),
 np.float64(0.3839951311606024),
 np.float64(0.36306814942072896),
 np.float64(0.3514097408583735),
 np.float64(0.3119246239513913),
 np.float64(0.3243087130375365),
 np.float64(0.33927099323124044),
 np.float64(0.3998866375248608),
 np.float64(0.36879542993317604),
 np.float64(0.4177445817213032),
 np.float64(0.3739755908308902),
 np.float64(0.36221682197187216),
 np.float64(0.4177715085577267),
 np.float64(0.3879797505984704),
 np.float64(0.3993662327240633),
 np.float64(0.30705126898005997),
 np.float64(0.35539474028508117),
 np.float64(0.4366282233701474),
 np.float64(0.44917065806910966),
 np.float64(0.4013248677483394),
 np.float64(0.3449155652425965),
 np.float64(0.37765503622061214),
 np.float64(0.3569138705269649),
 np.float64(0.366237806072796),
 np.float64(0.343568423190375),
 np.float64(0.382229837682447),
 np.float64(0.40333521608216366),
 np.float64(0.4292662428414279),
 np.float64(0.42768720646746466),
 np.float64(0.32618982580438766),
 np.float64(0.38600688717261034),
 np.float64(0.37783897560172064),
 np.float64(0.38133351429167206),
 np.float64(0.37820187064647326),
 np.float64(0.3647951170074094),
 np.float64(0.34942944684598415),
 np.float64(0.299967074575986),
 np.float64(0.4201669627164712),
 np.float64(0.386328023223343),
 np.float64(0.3052229984735595),
 np.float64(0.4106242437249408),
 np.float64(0.37026402884098225),
 np.float64(0.412704973417339),
 np.float64(0.36176225221692293),
 np.float64(0.33158139989836605),
 np.float64(0.38355832488225217),
 np.float64(0.3901420522008905),
 np.float64(0.3226307831815886),
 np.float64(0.42835849574621854),
 np.float64(0.3420285233062416),
 np.float64(0.43345015070144804),
 np.float64(0.3476567347598499),
 np.float64(0.4258202009100471),
 np.float64(0.42248520034757486),
 np.float64(0.4124534387215813),
 np.float64(0.3200113515875084),
 np.float64(0.37863453060962843),
 np.float64(0.428794294215229),
 np.float64(0.37477440536487217),
 np.float64(0.4219653575235248),
 np.float64(0.40318961911736206),
 np.float64(0.42334916042554216),
 np.float64(0.39496164976475756),
 np.float64(0.3476535780285696),
 np.float64(0.41896439907342603),
 np.float64(0.4060619119529604),
 np.float64(0.38338285473028316),
 np.float64(0.3511338322831292),
 np.float64(0.3579882561309181),
 np.float64(0.37687051779323144),
 np.float64(0.36319130443501535),
 np.float64(0.38034510085168555),
 np.float64(0.31857979540514847),
 np.float64(0.36158606899895585),
 np.float64(0.3993373777999814),
 np.float64(0.3139472632606748),
 np.float64(0.3734131996742442),
 np.float64(0.3955261773635304),
 np.float64(0.38390866725521927),
 np.float64(0.3849141253440521),
 np.float64(0.3941141253626415),
 np.float64(0.3549295009076791),
 np.float64(0.36591253476645186),
 np.float64(0.4098107860678195),
 np.float64(0.4348795850713763),
 np.float64(0.4211531214558763),
 np.float64(0.43405564392058665),
 np.float64(0.3553947402850811),
 np.float64(0.36269767702122585),
 np.float64(0.45642830141999063),
 np.float64(0.36977464929909254),
 np.float64(0.38042750662420893),
 np.float64(0.37292353846324494),
 np.float64(0.29800031340026295),
 np.float64(0.34450626164236686),
 np.float64(0.4471588376845559),
 np.float64(0.4123642924666156),
 np.float64(0.38926200971028163),
 np.float64(0.42242658759266083),
 np.float64(0.36661087518182045),
 np.float64(0.32758289335573554),
 np.float64(0.3270038514699899),
 np.float64(0.36691384304456937),
 np.float64(0.39417538200941105),
 np.float64(0.3627022157063757),
 np.float64(0.42217710827927213),
 np.float64(0.3368378295880904),
 np.float64(0.418321487076154),
 np.float64(0.37521485650568426),
 np.float64(0.3961214160470214),
 np.float64(0.35440907798281435),
 np.float64(0.37781283370662894),
 np.float64(0.3090651882787748),
 np.float64(0.4045884760382238),
 np.float64(0.3998797764346238),
 np.float64(0.3693197243900323),
 np.float64(0.4078284910826096),
 np.float64(0.37512271185099455),
 np.float64(0.36032581923207746),
 np.float64(0.38594575580862406),
 np.float64(0.42475833003917013),
 np.float64(0.4474397647327418),
 np.float64(0.3083975672439745),
 np.float64(0.4235054804964577),
 np.float64(0.45366444646064197),
 np.float64(0.401427401302206),
 np.float64(0.423617541862333),
 np.float64(0.36962863692654024),
 np.float64(0.38772792016956514),
 np.float64(0.3987502081377556),
 np.float64(0.34576703900024813),
 np.float64(0.36870019268987664),
 np.float64(0.40101249162242514),
 np.float64(0.3389358297784969),
 np.float64(0.38717788730493174),
 np.float64(0.34626122990128133),
 np.float64(0.44054051324521776),
 np.float64(0.4053423625287688),
 np.float64(0.34654398689796373),
 np.float64(0.3426055956366521),
 np.float64(0.3612522423685839),
 np.float64(0.38462836812015616),
 np.float64(0.412986583474498),
 np.float64(0.36562899818094147),
 np.float64(0.42598253801693187),
 np.float64(0.3933803939297918),
 np.float64(0.3549356849208063),
 np.float64(0.3779638508108336),
 np.float64(0.3674839409868558),
 np.float64(0.3966156417690477),
 np.float64(0.3243459346716339),
 np.float64(0.402319193053488),
 np.float64(0.41494390705885503),
 np.float64(0.4021636773178542),
 np.float64(0.42968164604121545),
 np.float64(0.38992117233119494),
 np.float64(0.41897274846893523),
 np.float64(0.362182924208521),
 np.float64(0.3624500434833346),
 np.float64(0.3816465413553931),
 np.float64(0.3649284029024758),
 np.float64(0.36929817998722775),
 np.float64(0.36692505927237623),
 np.float64(0.35472536799453547),
 np.float64(0.3931417933904664),
 np.float64(0.3496602122738731),
 np.float64(0.3423428277630593),
 np.float64(0.41956316908587216),
 np.float64(0.4461602103222591),
 np.float64(0.37152324491220806),
 np.float64(0.3943067384597075),
 np.float64(0.37529528175486393),
 np.float64(0.3372299996314809),
 np.float64(0.35675701909847773),
 np.float64(0.3455457822354657),
 np.float64(0.3390469133940047),
 np.float64(0.4182596669943691),
 np.float64(0.38202359481760556),
 np.float64(0.3792456108100667),
 np.float64(0.3328416772123831),
 np.float64(0.42702674825186726),
 np.float64(0.41571217861899473),
 np.float64(0.4008022231484907),
 np.float64(0.34742779740166857),
 np.float64(0.36697421969291977),
 np.float64(0.381700274912536),
 np.float64(0.35240067810378434),
 np.float64(0.43352103819987375),
 np.float64(0.37197639691185497),
 np.float64(0.385440696203356),
 np.float64(0.3256997178224753),
 np.float64(0.3665218073922991),
 np.float64(0.3421873152117637),
 np.float64(0.36927514837356895),
 np.float64(0.34350293419902006),
 np.float64(0.4465978357153913),
 np.float64(0.44271908932689324),
 np.float64(0.4582934906991458),
 np.float64(0.33576992101664777),
 np.float64(0.3231270319815266),
 np.float64(0.39847902086588827),
 np.float64(0.3405471247295229),
 np.float64(0.3350173294955581),
 np.float64(0.3789686109392976),
 np.float64(0.37110502833353487),
 np.float64(0.4145196917473963),
 np.float64(0.3992970117589772),
 np.float64(0.3707379617786331),
 np.float64(0.30983897762294804),
 np.float64(0.38106577213828424),
 np.float64(0.4722947257227909),
 np.float64(0.28007724226186503),
 np.float64(0.3211340183258004),
 np.float64(0.35535903365568516),
 np.float64(0.3476229957103239),
 np.float64(0.31178275899409535),
 np.float64(0.3950158294135433),
 np.float64(0.39945003758734804),
 np.float64(0.42135046692620254),
 np.float64(0.3766467719565446),
 np.float64(0.3870035265825847),
 np.float64(0.3747130889550571),
 np.float64(0.4479704684527704),
 np.float64(0.33660785085763983),
 np.float64(0.30355480952878955),
 np.float64(0.33298837139946724),
 np.float64(0.38201802884612224),
 np.float64(0.3703849763809399),
 np.float64(0.3688147719931867),
 np.float64(0.41670476486636837),
 np.float64(0.3954809129984569),
 np.float64(0.36488836585273515),
 np.float64(0.3766365736992848),
 np.float64(0.36806061025089554),
 np.float64(0.42093401178085443),
 np.float64(0.3513728484410795),
 np.float64(0.36609843947177634),
 np.float64(0.3888614602838878),
 np.float64(0.4332032197840356),
 np.float64(0.3252599082298157),
 np.float64(0.3830479686261979),
 np.float64(0.3430339637169896),
 np.float64(0.4068017712349525),
 np.float64(0.3935135844878428),
 np.float64(0.4059132375386775),
 np.float64(0.35714575362553025),
 np.float64(0.3823712175681937),
 np.float64(0.3879834631668687),
 np.float64(0.36774217382444835),
 np.float64(0.3509353096051405),
 np.float64(0.3568108484376201),
 np.float64(0.3679388986545293),
 np.float64(0.3786968421943493),
 np.float64(0.3884555538229227),
 np.float64(0.37100150980952656),
 np.float64(0.36028165349066366),
 np.float64(0.42694498265904807),
 np.float64(0.3845461490918705),
 np.float64(0.4092815486731407),
 np.float64(0.41443049343572275),
 np.float64(0.4315891627964856),
 np.float64(0.2955980084782881),
 np.float64(0.3651854376382467),
 np.float64(0.32877839278574006),
 np.float64(0.40924266630079437),
 np.float64(0.41329223282112637),
 np.float64(0.3528814973688054),
 np.float64(0.37193638088025244),
 np.float64(0.44788548172607784),
 np.float64(0.4391912000806373),
 np.float64(0.42127492644628955),
 np.float64(0.3561050392039465),
 np.float64(0.3148040609576608),
 np.float64(0.3610271766174469),
 np.float64(0.2997163569851084),
 np.float64(0.3790069796267538),
 np.float64(0.393943357000752),
 np.float64(0.38583253058723593),
 np.float64(0.40636044794286585),
 np.float64(0.32989970906647104),
 np.float64(0.36568902426389055),
 np.float64(0.3727699274195961),
 np.float64(0.36998846172361116),
 np.float64(0.41306629657278343),
 np.float64(0.44367985787751957),
 np.float64(0.3523609695374619),
 np.float64(0.3895691943100731),
 np.float64(0.43489488401276244),
 np.float64(0.36808054996735),
 np.float64(0.41822899953155557),
 np.float64(0.4037282015306215),
 np.float64(0.41671793290114684),
 np.float64(0.3674802079683524),
 np.float64(0.37956325116245304),
 np.float64(0.3808770880921274),
 np.float64(0.3939379594442919),
 np.float64(0.3718140932371485),
 np.float64(0.43258987404010835),
 np.float64(0.3416207801974092),
 np.float64(0.4331432069794173),
 np.float64(0.38899408216754355),
 np.float64(0.39787817251869073),
 np.float64(0.4223356486631154),
 np.float64(0.290087887063984),
 np.float64(0.41102878352585326),
 np.float64(0.41587697701216836),
 np.float64(0.3377762827141348),
 np.float64(0.3756956891926804),
 np.float64(0.3914028580915224),
 np.float64(0.40712554230764936),
 np.float64(0.32660171258812476),
 np.float64(0.3540349692305883),
 np.float64(0.3834100480234876),
 np.float64(0.35984598817594354),
 np.float64(0.35677778280573363),
 np.float64(0.43005677673022324),
 np.float64(0.3297377040436145),
 np.float64(0.4239669764812111),
 np.float64(0.3367284615949658),
 np.float64(0.3957167164908151),
 np.float64(0.46277754290179524),
 np.float64(0.3258675191471505),
 np.float64(0.3436099463273742),
 np.float64(0.37676785515924704),
 np.float64(0.38280579483386157),
 np.float64(0.33971689234521196),
 np.float64(0.36623630778925786),
 np.float64(0.39189270807763815),
 np.float64(0.40425062636946574),
 np.float64(0.3224895867808596),
 np.float64(0.3612626850533283),
 np.float64(0.35939719889829935),
 np.float64(0.38156943216507055),
 np.float64(0.3324895121359791),
 np.float64(0.3318435944881406),
 np.float64(0.39614444514886266),
 np.float64(0.38632305191249144),
 np.float64(0.39574444884092924),
 np.float64(0.38865538337157374),
 np.float64(0.32772963921182113),
 np.float64(0.38124140917795507),
 np.float64(0.4722412784433898),
 np.float64(0.3238598136308159),
 np.float64(0.3624449339060144),
 np.float64(0.4066063052205749),
 np.float64(0.3279461838733915),
 np.float64(0.41735345432673104),
 np.float64(0.32866592553198226),
 np.float64(0.3634767425924511),
 np.float64(0.40380583547737875),
 np.float64(0.38366614285693057),
 np.float64(0.3296461640957966),
 np.float64(0.32905386890166954),
 np.float64(0.3458180171213748),
 np.float64(0.4653965133282436),
 np.float64(0.33171603830722),
 np.float64(0.3942241020904326),
 np.float64(0.36241976345521276),
 np.float64(0.4170825222106843),
 np.float64(0.4254948572818594),
 np.float64(0.360958774419674),
 np.float64(0.31065080620805935),
 np.float64(0.34219693659540057),
 np.float64(0.38645068781005865),
 np.float64(0.33174850052888055),
 np.float64(0.3842279866718181),
 np.float64(0.38981543633798665),
 np.float64(0.3744259580591083),
 np.float64(0.3803205740233638),
 np.float64(0.3715417065201877),
 np.float64(0.36570721772436754),
 np.float64(0.4219738100881987),
 np.float64(0.36553312359141055),
 np.float64(0.3850404468908154),
 np.float64(0.34271288795916316),
 np.float64(0.40131529661336557),
 np.float64(0.35883355928065425),
 np.float64(0.44178619704349775),
 np.float64(0.4230977933726483),
 np.float64(0.3908346562037499),
 np.float64(0.45257333550739753),
 np.float64(0.37078088201399534),
 np.float64(0.3763022457520461),
 np.float64(0.3540822387274814),
 np.float64(0.33205683663614605),
 np.float64(0.37675037788224736),
 np.float64(0.4083285366103623),
 np.float64(0.4106427847991953),
 np.float64(0.39886716093455593),
 np.float64(0.3328845383779976),
 np.float64(0.37972422962183544),
 np.float64(0.34295457295866055),
 np.float64(0.3688960347578334),
 np.float64(0.3429971702850177),
 np.float64(0.43713502272732613),
 np.float64(0.35603781051982963),
 np.float64(0.37638462548804413),
 np.float64(0.40879877673438053),
 np.float64(0.4134725943274561),
 np.float64(0.4027281580313085),
 np.float64(0.35169128396736365),
 np.float64(0.35436340057400684),
 np.float64(0.35176616808065225),
 np.float64(0.37887647402871555),
 np.float64(0.45444393246297654),
 np.float64(0.361085878169613),
 np.float64(0.34773899696292276),
 np.float64(0.362256207567218),
 np.float64(0.4516533559610003),
 np.float64(0.39542263400316596),
 np.float64(0.3425687561960163),
 np.float64(0.41546593157382644),
 np.float64(0.4089249326304008),
 np.float64(0.37578915355290265),
 np.float64(0.35195038535126305),
 np.float64(0.40166654447433897),
 np.float64(0.45933577554671556),
 np.float64(0.33988160768596437),
 np.float64(0.37706757352547543),
 np.float64(0.3727235557223911),
 np.float64(0.3362669733893734),
 np.float64(0.4076232530387716),
 np.float64(0.36081736878538434),
 np.float64(0.3218698456545801),
 np.float64(0.4303012094062782),
 np.float64(0.3786968421943493),
 np.float64(0.38038495357474106),
 np.float64(0.433591914108975),
 np.float64(0.39181078799704994),
 np.float64(0.37134079489411065),
 np.float64(0.38210851071340163),
 np.float64(0.29765577922502684),
 np.float64(0.39854236029556006),
 np.float64(0.3701063487623597),
 np.float64(0.38365702509671046),
 np.float64(0.3550377055864063),
 np.float64(0.40559221921527516),
 np.float64(0.41453557663153556),
 np.float64(0.39575276816701166),
 np.float64(0.39362791109986),
 np.float64(0.3711878223665509),
 np.float64(0.39021219408051666),
 np.float64(0.30743279814153585),
 np.float64(0.28032962027810715),
 np.float64(0.4092560744326865),
 np.float64(0.31863835216938674),
 np.float64(0.40470425012623357),
 np.float64(0.3430691537421304),
 np.float64(0.38426350972713225),
 np.float64(0.3581654431064578),
 np.float64(0.3643121352220668),
 np.float64(0.4255567545708126),
 np.float64(0.37739050037292876),
 np.float64(0.37374515685681403),
 np.float64(0.3537975576634243),
 np.float64(0.3541984483665693),
 np.float64(0.36392464746735764),
 np.float64(0.3767860597940641),
 np.float64(0.43648666038849654),
 np.float64(0.44547078681455643),
 np.float64(0.3695254472829172),
 np.float64(0.4158307938597584),
 np.float64(0.4112578405496005),
 np.float64(0.31112052860378825),
 np.float64(0.35846923446013285),
 np.float64(0.40376166919806594),
 np.float64(0.4087001064318017),
 np.float64(0.3596103148933575),
 np.float64(0.39038933848326945),
 np.float64(0.46517494608514803),
 np.float64(0.37661326235997816),
 np.float64(0.3777772487759326),
 np.float64(0.3660099965891105),
 np.float64(0.4087323279251747),
 ...]
In [40]:
fig, ax = plt.subplots()
ax.hist(chin_std_distribution, bins=60)
plt.show()
No description has been provided for this image
In [41]:
np.mean(chin_std_distribution), np.std(chin["Body Mass (kg)"], ddof=1)
Out[41]:
(np.float64(0.3802917123131765), np.float64(0.3843350813871914))
>