卡方分布和 Zipf 分布模拟及 Seaborn 可视化教程

卡方分布

简介

卡方分布是一种连续概率分布,常用于统计学中进行假设检验。它描述了在独立抽样中,每个样本的平方偏差之和的分布。卡方分布的形状由其自由度 (df) 参数决定,自由度越大,分布越平缓。

参数

卡方分布用两个参数来定义:

df:自由度,表示卡方分布的形状。自由度必须为正整数。 size:输出数组的形状。

公式

卡方分布的概率密度函数 (PDF) 为:

1f(x) = (x^(df/2 - 1) * np.exp(-x/2)) / (2^(df/2) * Gamma(df/2)) for x >= 0

其中:

f(x):表示在 x 点的概率密度。 x:非负实数。 df:自由度。 np.exp(-x/2):指数函数。 Gamma(df/2):伽马函数。

生成卡方分布数据

NumPy 提供了 random.chisquare() 函数来生成服从卡方分布的随机数。该函数接受以下参数:

df:自由度。 size:输出数组的形状。

示例:生成 10 个自由度为 5 的卡方分布随机数:

1import numpy as np 2 3data = np.random.chisquare(df=5, size=10) 4print(data)

可视化卡方分布

Seaborn 库提供了便捷的函数来可视化分布,包括卡方分布。

示例:绘制 1000 个自由度为 5 的卡方分布随机数的分布图:

1import seaborn as sns 2import numpy as np 3 4data = np.random.chisquare(df=5, size=1000) 5sns.distplot(data) 6plt.show()

练习

  1. 模拟 20 个自由度为 10 的卡方分布随机数,并绘制它们的分布图。
  2. 比较不同自由度下卡方分布形状的变化。
  3. 利用卡方分布来进行卡方检验,假设某枚硬币是公平的,即正面朝上的概率为 0.5。抛掷硬币 100 次,并计算正面朝上的次数是否服从二项分布。

解决方案

1import seaborn as sns 2import numpy as np 3from scipy import stats 4 5# 1. 模拟随机数并绘制分布图 6data = np.random.chisquare(df=10, size=20) 7sns.distplot(data) 8plt.show() 9 10# 2. 比较不同自由度下分布形状的变化 11df_values = [2, 5, 10, 20] 12for df in df_values: 13 data = np.random.chisquare(df=df, size=1000) 14 sns.distplot(data, label=f"df={df}") 15plt.legend() 16plt.show() 17 18# 3. 进行卡方检验 19heads = np.random.binomial(n=100, p=0.5) 20chi2_stat, p_value = stats.chisquare(heads, f_exp=50) 21print("卡方统计量:", chi2_stat) 22print("p 值:", p_value) 23 24# 由于 p 值大于 0.05,无法拒绝原假设,即可以认为硬币是公平的。

瑞利分布

简介

瑞利分布是一种连续概率分布,常用于描述信号处理和雷达系统中的幅度分布。它表示在一个随机变量的平方根服从指数分布时,该随机变量的分布。

参数

瑞利分布用一个参数来定义:

scale:尺度参数,控制分布的平坦程度。较大的尺度参数使分布更加平坦,两侧尾部更加分散。默认为 1。

公式

瑞利分布的概率密度函数 (PDF) 为:

1f(x) = (x scale) / (scale^2 np.exp(-x^2 / (2 scale^2))) for x >= 0

其中:

f(x):表示在 x 点的概率密度。 x:非负实数。 scale:尺

Zipf分布

简介

Zipf分布,又称为Zeta分布,是一种离散概率分布,常用于描述自然语言、人口统计学、城市规模等领域中具有幂律特征的数据分布。它体现了“少数服从多数”的现象,即排名越靠前的元素出现的频率越高。

参数

Zipf分布用一个参数来定义:

a:分布参数,控制分布的形状。a越小,分布越偏向于少数元素,越接近幂律分布。默认为 2。

公式

Zipf分布的概率质量函数 (PMF) 为:

1P(k) = 1 / (k ^ a) for k >= 1

其中:

P(k):表示第 k 个元素出现的概率。 k:元素的排名,从 1 开始。 a:分布参数。

生成Zipf分布数据

NumPy提供了random.zipf()函数来生成服从Zipf分布的随机数。该函数接受以下参数:

a:分布参数。 size:输出数组的形状。

示例:生成10个服从Zipf分布的随机数,分布参数为2:

1import numpy as np 2 3data = np.random.zipf(a=2, size=10) 4print(data)

可视化Zipf分布

Seaborn库提供了便捷的函数来可视化分布,包括Zipf分布。

示例:绘制1000个服从Zipf分布的随机数的分布图,分布参数为2:

1import seaborn as sns 2import numpy as np 3 4data = np.random.zipf(a=2, size=1000) 5sns.distplot(data) 6plt.show()

练习

  1. 模拟不同分布参数下Zipf分布形状的变化。
  2. 利用Zipf分布来模拟一个城市的规模分布,并计算排名前10的城市人口占总人口的比例。
  3. 比较Zipf分布与幂律分布的异同。

解决方案

1import seaborn as sns 2import numpy as np 3 4# 1. 模拟不同分布参数下Zipf分布形状的变化 5a_values = [1.5, 2, 2.5, 3] 6for a in a_values: 7 data = np.random.zipf(a=a, size=1000) 8 sns.distplot(data, label=f"a={a}") 9plt.legend() 10plt.show()

2. 模拟城市规模分布并计算人口比例

population = np.random.zipf(a=2, size=100) top10_population = population[:10].sum() total_population = population.sum() print("排名前10的城市人口:", top10_population) print("排名前10的城市人口比例:", top10_population / total_population)

3. Zipf分布与幂律分布的比较

Zipf分布和幂律分布都描述了“少数服从多数”的现象,即排名越靠前的元素出现的频率越高。

但是,Zipf分布的参数化程度更高,可以更精确地描述不同领域的幂律现象。幂律分布则更通用,但缺乏Zipf分布对参数的控制能力。

具体来说,Zipf分布的PMF为:

1P(k) = 1 / (k ^ a)

幂律分布的PMF为:

1P(k) = C / k ^ alpha

其中,C为归一化常数。

可见,Zipf分布的参数a控制了分布的倾斜程度,而幂律分布的参数alpha则控制了分布的整体形状。

此外,Zipf分布通常用于描述离散数据,而幂律分布则可以用于描述离散和连续数据。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

点赞
收藏

评论区

加载中...

相关推荐

SAS统计初学1

卡方检验;卡方检验是一种用途很广的计数资料的假设检验方法。它属于非参数检验的范畴,主要是比较两个及两个以上样本率(构成比)以及两个分类变量的关联性分析。其根本思想就是在于比较理论频数和实际频数的吻合程度或拟合优度问题。它在分类资料统计推断中的应用,包括:两个率或两个构成比比较的卡方检验;多个率或多个构成比比较的卡方检验以

用python重温统计学基础:离散型概率分布

简单介绍数据的分布形态描述中的离散型概率分布利用python中的matplotlib来模拟几种分布的图形在上一篇描述性统计(http://mp.weixin.qq.com/s?__bizMzg5NDE3Nzc5Mw&mid2247483743&idx1&sn8a0bff6f07d2c1804ccf301b400a263e&

用python重温统计学基础:离散型概率分布

简单介绍数据的分布形态描述中的离散型概率分布利用python中的matplotlib来模拟几种分布的图形在上一篇中提到数据分析的对象主要是结构化化数据,而所有的结构化数据可以从三个维度进行描述,即数据的集中趋势描述,数据的离散程度描述和数据的分布形态描述,并对前两个维度进行了介绍。本篇主要是对数据的分布形态描述中的离散型概率分布进行介绍。

NumPy 二项分布生成与 Seaborn 可视化技巧

二项分布是描述固定次数独立试验中成功次数的概率分布,常用于分析二元结果的事件,如抛硬币。分布由参数n(试验次数)、p(单次成功概率)和k(成功次数)定义。概率质量函数P(k)C(n,k)p^k(1p)^(nk)。NumPy的random.binomial()可生成二项分布数据,Seaborn可用于可视化。当n大且p接近0.5时,二项分布近似正态分布。练习包括模拟不同条件下的二项分布和应用到考试场景。

NumPy 泊松分布模拟与 Seaborn 可视化技巧

泊松分布是描述单位时间间隔内随机事件发生次数的离散概率分布,参数λ表示平均速率。公式为P(k)e^(λ)(λ^k)/k!。NumPy的random.poisson()可生成泊松分布数据。当λ很大时,泊松分布近似正态分布。练习包括模拟顾客到达、比较不同λ下的分布及模拟电话呼叫中心。使用Seaborn可进行可视化。关注公众号LetusCoding获取更多文章。

NumPy 均匀分布模拟及 Seaborn 可视化教程

本文介绍了均匀分布和逻辑分布。均匀分布是连续概率分布,所有事件在指定范围内有相等概率发生,常用于随机数生成。其概率密度函数为f(x)1/(ba),其中a和b分别为下限和上限。NumPy的random.uniform()可生成均匀分布的随机数。Seaborn可用于可视化分布。文中还提供了练习及解决方案,包括生成不同范围的均匀分布随机数、比较分布形状变化及模拟抛硬币实验。逻辑分布则常用于S形增长现象的建模,其PDF为(scale/(π(1(xloc)/scale)^2)),由位置参数loc和尺度参数scale定义。