【问题标题】:Probability theory with python: Mean, Standard devationpython的概率论:平均值,标准差
【发布时间】:2019-03-29 21:26:28
【问题描述】:

所以我是 python 的相对新手和概率的绝对新手。我通过在 python 中创建一个简单的程序来学习概率论。

该程序正在尝试对动物园中动物的数据进行建模。我们有 100 只体重从 1 公斤到 6000 公斤不等的随机动物。

通过我们拥有的数据,我们可以从数据中获得任何有趣的统计见解,而我目前没有这样做?任何人都可以推荐可以应用于数据的模型吗?或者用不同的方法或模型绘制数据的不同方式。 非常欢迎任何显示如何对数据绘制不同见解的链接或示例。此外,任何指向可应用于数据的概率或统计数据的链接。

生成随机数据

def generateRandom():
   animal_weights = []

   animal_weights.append(random.sample(range(4000, 6001), 7))
   animal_weights.append(random.sample(range(2500, 4000), 13))
   animal_weights.append(random.sample(range(800, 2500), 20))
   animal_weights.append(random.sample(range(100, 800), 20))
   animal_weights.append(random.sample(range(25, 100), 20))
   animal_weights.append(random.sample(range(1, 25), 20))

#creates 1 single list
   flat_list_animals = [item for sublist in animal_weights for item in sublist]
   random.shuffle(flat_list_animals)

   return np.array(flat_list_animals)

然后我们得到数据的平均值、标准差以及如果从列表中随机选择一种动物,它将是大象或非常大的动物的概率。

def do_stats(animal_list):
    animal_mean = np.mean(animal_list)
    print("Mean weight of animal list: ", animal_mean)

    stand_dev = np.std(animal_list, dtype=np.float64)
    print("Standard deviation of animal list: %.2f"%stand_dev)

    stan_error_mean = stand_dev / (math.sqrt(len(animal_list)))
    print("Standard error of the mean: %.2f"% stan_error_mean)

    prob_of_elephants = len(animal_list) / 7
    print("Probability of randomly selecting an elephant or large animal over 4000kg: %.2f"% prob_of_elephants)

然后我们从列表中随机选择 20 个元素,20 次,每次计算均值和标准差。然后我们计算 20 个样本均值和标准差的平均值。

def calculate_random_means(animal_list) :
    random_means = []
    random_std_dev = []
    for i in range(20):
        index = np.random.choice(animal_list.shape[0], 20, replace=False) 
        #creates a random list of 20 
        random_list = animal_list[index]
        stand_dev = np.std(random_list, dtype=np.float64)
        random_std_dev.append(stand_dev)

        random_mean = np.mean(random_list)
        random_means.append(random_mean)
        print("Mean of the random sample of the list", random_mean)
    return random_means, random_std_dev

np_random_means, random_std_dev = np.array(calculate_random_means(animal_list))
average_random_mean = np.average(np_random_means)
print("\nAverage mean of 20 random samples: %.2f"% average_random_mean)

average_random_std = np.average(random_std_dev)
print("\nAverage standard devation of 20 random samples: %.2f"% average_random_std)

最后,我们绘制均值和标准差加上平均均值和标准差。

materials = ['Mean', 'Average Sample Mean']
x_pos = np.arange(len(materials))

CTEs = [animal_mean, average_random_mean]
error = [stand_dev, average_random_std]
numbers = [0,1000,2000,3000,4000,5000,6000]
fig, ax = plt.subplots()
#align='center'
ax.bar(x_pos, CTEs, yerr=error, ecolor='black', capsize=10)
ax.set_ylabel('X')
ax.set_yticks(numbers)
ax.set_xticks(x_pos)
ax.set_xticklabels(materials)
ax.set_title('Mean and stanard devation')
ax.yaxis.grid(True)

# Save the figure and show
plt.tight_layout()
plt.show()

【问题讨论】:

  • 由于这主要是关于统计和概率的问题,因此 Stack Overflow 不在此范围内。更适合maths.stackexchange.comstats.stackexchange.com 可能值得在问题中解释random.sample 从均匀分布中采样的那些网站。
  • Dunes 可以多解释一下您所说的“来自均匀分布的 random.sample 样本”是什么意思,我不太明白您的意思。
  • 这只是意味着分布中的每个值都有相同的被选中的概率。就像当你掷骰子时,你得到 1 和 6 的可能性一样。但是当你掷两个骰子并相加时,你得到 7 的可能性比 2 或 12 高得多。掷两个骰子就是一个例子正态分布(又名高斯分布)。我现在不太熟悉这些网站,我不想假设他们熟悉 Python 的随机模块(尽管他们可能熟悉)。
  • @Dunes 两个骰子实际上是倒三角形上的一堆点。用 3 它变成一条曲线。随着n 的增加,它将越来越接近正态分布的钟形。

标签: python numpy matplotlib probability


【解决方案1】:

问题是您的数据是一维的。它只包含 100 只动物的重量。

通常在统计数据中,有一个目标变量(您试图解释或预测的内容)和解释变量(帮助您解释或预测目标变量的变量)。例如,如果您想建立每只动物体重的统计模型,并且您还知道(例如)每只动物的身高和年龄,那么简单的统计模型可能如下:

体重 = a + b * 身高 + c * 年龄。一种统计方法(例如最小二乘法,您可以在维基百科中找到)将选择数字 a、b 和 c,这将使等式的左侧尽可能接近等式的右侧。所以模型可能看起来像 Weight = 10 + 5.6*height - 2.6*age (当然,数字完全是虚构的)。这意味着,如果您有一些已知身高和年龄的动物,您可以使用该等式来预测动物的体重(并得出结论,例如,动物的体重有 95% 的可能性在 60 公斤到 90 公斤之间(再次,数字组成))

由于您只有 1 个变量,您真正能做的就是绘制一个直方图,然后计算平均重量、重量标准差、最低重量、最高重量、重量百分位数等。对数权重可能更清晰可见。

另外,大象的概率(例如)只是样本中大象的数量除以动物的总数(这实际上只是中学数学哈哈)

【讨论】:

  • 好的,有道理。平均均值或平均标准差是否有任何值,它们可以用来绘制对数据的洞察力吗?
  • 如果随机选择,没有。如果根据不同类型的动物(例如爬行动物、哺乳动物……)计算,那么可能。在这种情况下,动物类型将是您的解释变量。
猜你喜欢
  • 1970-01-01
  • 2016-04-13
  • 2020-12-27
  • 2020-12-26
  • 2020-11-07
  • 2018-01-21
  • 2020-01-11
  • 2014-03-21
相关资源
最近更新 更多