python科研绘图:P-P图与Q-Q图

目录

什么是P-P图与Q-Q图

分位数

百分位数

Q-Q图步骤与原理

Shapiro-Wilk检验

绘制Q-Q图

绘制P-P图


什么是P-P图与Q-Q图

P-P图和Q-Q图都是用于检验样本的概率分布是否服从某种理论分布。

P-P图的原理是检验实际累积概率分布与理论累积概率分布是否吻合。若吻合,则散点应围绕在一条直线周围,或者实际累积概率与理论累积概率之差分布在对称于以0为水平轴的带内。

Q-Q图的原理是检验实际分位数与理论分位数是否吻合。若吻合,则散点应围绕在一条直线周围,或者实际分位数与理论分位数之差分布在对称于以0为水平轴的带内。

P-P图和Q-Q图都是用于检验样本的概率分布是否服从某种理论分布。当检验样本的分布为正态分布时,Q-Q图中直线斜率为待检测数据的标准差,截距为均值。

特点P-P图Q-Q图
用途评估累积概率分布函数(CDF)的拟合程度。评估样本分布与理论分布的拟合程度。
横坐标标准化的观测值(累积概率)理论分布的分位数
纵坐标样本观测值的累积概率理论分布的分位数
判定标准直观看出CDF的拟合情况,直线越接近对角线越好。点在45度对角线上越接近,拟合越好。
形状分析对于偏斜、尖峰等分布形状的评估较为直观。主要用于检验是否符合正态分布,对称性等。
数据量要求对数据量要求不敏感,适用于各种分布的评估。在小样本下效果较好,对数据量要求较高。

分位数

分位数, 指的就是连续分布函数中的一个点,这个点对应概率p。若概率0<p<1,随机变量X或它的概率分布的分位数Za,是指满足条件p(X≤Za)=α的实数。

百分位数

百分位数,统计学术语,如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。可表示为:一组n个观测值按数值大小排列。如,处于p%位置的值称第p百分位数。

Q-Q图步骤与原理

1)将数据升序排列,根据各点在该组数据中的位置,算出累积概率,计算累积概率时(若共n个数),第i个数的累积概率不是i/n,而是用(i-0.5)/n。这可能是为了避免最后一个数的累积概率为1时,反算出的积分上限为正无穷。;

2)根据累积概率,反算出若为标准正态分布,高斯函数的积分上限;

3)积分上限为横坐标,数据点为纵坐标,画出数据分布的QQ图;

4)根据数据的均值与标准差,画出若该组数据为正态分布的QQ图。

P-P图与Q-Q图类似,把分位数换成累积概率。

Shapiro-Wilk检验

Shapiro-Wilk检验是一种用于检验样本数据是否来自正态分布的统计方法。该检验是由Samuel Shapiro和Martin Wilk于1965年提出的。它基于一个假设,即如果样本数据来自正态分布,那么样本数据的顺序统计量应该与对应的理论累积分布函数之间存在线性关系。

Shapiro-Wilk检验的零假设是数据来自正态分布。如果检验结果的p值小于所选定的alpha级别,那么否定假设被拒绝,意味着样本数据不是来自正态分布。反之,如果p值大于选定的alpha级别,则不能拒绝零假设,即数据可能来自正态分布。

绘制Q-Q图

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
​
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文标签乱码
plt.rcParams['axes.unicode_minus'] = False
​
# 生成一个示例数据集,这里使用随机数据
np.random.seed(0)
data = np.random.normal(loc=50, scale=5, size=40)  # 均值=50,标准差=5
# 正态性检验 - Shapiro-Wilk检验,
# Shapiro-Wilk检验基于W统计量,对数据是否符合正态分布进行评估,适用于各种样本大小
stat, p = stats.shapiro(data)
print("Shapiro-Wilk正态性检验统计量:", stat)
print("Shapiro-Wilk正态性检验p值:", p)
plt.figure(figsize=(6, 6))
# 绘制概率图(probability plot)
# stats.probplot函数通过最小二乘法来估计一组数据的分位数对,并利用线性回归技术求出分位数图上的理论值与实际值的直线方程。
stats.probplot(data, plot=plt, dist='norm', fit=True, rvalue=True)
plt.title('Probability Plot (Q-Q Plot)')
plt.legend()
plt.grid(True)
plt.tight_layout()
# 显示图形
plt.show()

Shapiro-Wilk正态性检验统计量: 0.9782676696777344

Shapiro-Wilk正态性检验p值: 0.6254295110702515

绘制P-P图

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats
​
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文标签乱码
plt.rcParams['axes.unicode_minus'] = False
​
# 生成一个示例数据集,这里使用随机数据
np.random.seed(0)
data = np.random.normal(loc=50, scale=5, size=40)  # 均值=50,标准差=5
# 正态性检验 - Shapiro-Wilk检验,
# Shapiro-Wilk检验基于W统计量,对数据是否符合正态分布进行评估,适用于各种样本大小
stat, p = stats.shapiro(data)
print("Shapiro-Wilk正态性检验统计量:", stat)
print("Shapiro-Wilk正态性检验p值:", p)
plt.figure(figsize=(6, 6))
# Create a P-P plot
stats.probplot(data, plot=plt)
​
# Customize the plot if needed
plt.title('P-P Plot')
plt.xlabel('Theoretical Quantiles')
plt.ylabel('Sample Quantiles')
​
# Show the plot
plt.show()

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: LaTeX是一种基于TeX的排版系统,用于生成高质量的科学和技术文档。在LaTeX中,可以使用algorithm2e或者algorithmicx这两个宏包来处理算法。 算法写作主要需要几个步骤: 1. 导入宏包 在LaTeX文档中,需要添加以下代码来导入宏包: \usepackage{algorithm} \usepackage{algpseudocode} 其中,algorithm宏包提供了algorithm环境,用于包裹整个算法,而algpseudocode提供了算法所需的基本语法和命令。 2. 编写算法 在algorithm环境中,可以使用以下基本命令来描述算法: \begin{algorithm}[htb] \caption{算法名称} \label{alg:a1} \begin{algorithmic}[1] \Procedure{ProcedureName}{$parameters$} \State //算法过程 \EndProcedure \end{algorithmic} \end{algorithm} 其中,第一行的algorithm环境名称可以根据需要更改,大括号内的内容为算法的名称。由于算法可以包含多个过程,因此可以在algorithmic环境中使用Procedure命令来定义一个过程。 在过程内部,可以使用以下命令来描述算法的具体过程: $\bullet$ State命令:用于描述某个状态; $\bullet$ For/While命令:用于描述循环过程; $\bullet$ If/Else命令:用于描述条件判断; $\bullet$ Return命令:用于描述返回值; $\bullet$ AlgorithmicComment命令:用于添加注释。 例如,以下是一个简单的用algorithmicx宏包编写的简单算法: \begin{algorithm} \caption{递归算法实现} \label{alg:a1} \begin{algorithmic}[1] \Function{Factorial}{$n$} \If{$n==0$} \State \Return 1 \Else \State \Return $n*Factorial(n-1)$ \EndIf \EndFunction \end{algorithmic} \end{algorithm} 3. 调用算法 在调用算法时,可以使用ref命令来引用算法,例如: 如\ref{alg:a1}所示,递归算法实现的阶乘计算。 以上就是在LaTeX中编写算法的基本步骤,通过以上步骤,可以快速高效地编写各种算法。 ### 回答2: 在LaTeX中写算法,可以通过使用algorithm2e宏包来实现。Algorithm2e提供了一个简单而灵活的机制来编写算法,它不仅支持各种各样的算法结构,还可以配合使用伪代码和一些其他的语言元素,如条件分支和循环等。下面是一个在LaTeX中编写算法的步骤: 1.安装algorithm2e宏包。算法是algorithm2e宏包的核心特性之一,这个宏包是LaTex用户可以使用的最流行的算法宏包之一。用户可以在TeX Live和MiKTeX中找到与该宏包相应的包,或者也可以手动下载该宏包,并将其放在适当的位置上。 2.使用algorithm2e宏包。一旦安装成功,就可以使用该宏包了。首先,在LaTeX文档的顶部调用algorithm2e 包,如下所示: \usepackage{algorithm2e} 3.准备算法。现在可以开始编写算法了。下面是一个简单的示例算法: \begin{algorithm}[H] \SetAlgoLined \KwIn{输入数据 $x$} \KwOut{计算结果 $f(x)$} \eIf{$x>0$}{ $f(x)=x+5$\; }{ $f(x)=|x|$\; } \caption{一个简单的算法示例} \end{algorithm} 4.解释算法元素。在以上示例中,$\SetAlgoLined$ 表示各行算法的分隔线,\KwIn 和\KwOut 是算法的输入和输出,而\eIf{condition}{then部分}{else部分}构成了一个条件分支的创建。 5.进一步提高。用户还可以通过不同的方式来提高算法的可读性,例如使用注释、子例程和标签等。下面是一个使用子例程和标签的高级示例: \begin{algorithm} $Result \gets MaximumFlow(G, s, t)$ \ForEach{$v \in G$}{ $v.color \gets WHITE$ } \ForEach{$v \in residualGraph(G)$}{ $v.color \gets BLUE$ } $2 \gets 3$\; \label{cmt} \ForEach{$Edge(u, v) \in G$} { \If{$u.color = BLUE$ and $v.color = WHITE$}{ \uline{Augment}($v$, $u$, $G$) \label{line} } } \caption{A simple example}\label{algo2e} \end{algorithm} 在上面的算法中,\uline{Augment}代表子例程,而第五行的\label语句将该行命名为“line”。最后一行的\label语句将整个算法命名为“algo2e”。这些标签可以在文档中链接到相应的算法行,从而实现针对详细算法的交互演示。 总之,在LaTeX 中编写算法是相对简单和灵活的,用户只需通过提供简单格式的说明来实现算法在正文中出现的目的。这几个步骤可以帮助用户了解如何编写LaTeX中的算法。 ### 回答3: 在latex中,我们可以使用algorithm2e宏包来写算法。使用该宏包之前需要在文档开头添加如下代码: \usepackage[ruled,linesnumbered]{algorithm2e} 其中,ruled表示算法会被框起来,linesnumbered表示算法每一行都会被编号。接着就可以开始编写算法了。 算法的基本结构如下: \begin{algorithm}[H] \caption{算法名称} \LinesNumbered \KwIn{输入} \KwOut{输出} \BlankLine 算法内容 \end{algorithm} 其中,\caption{算法名称}表示算法的名称,\LinesNumbered表示开启行号,\KwIn和\KwOut表示输入和输出,\BlankLine是一个空行用于排版美观。算法内容可以使用以下语句: \If{条件}{执行语句} \While{条件}{执行语句} \For{变量从起始值到结束值}{执行语句} \Repeat{条件}{执行语句} \Switch{变量}{\Case{值1}{执行语句}\Case{值2}{执行语句}} 其中,\If表示条件语句,\While表示循环语句,\For表示循环语句,\Repeat表示重复语句,\Switch表示条件语句,\Case表示分支语句。 算法中还可以使用一些特殊命令来表示一些数学符号,如$\gets$表示赋值符号,$\ge$表示大于等于号,$\le$表示小于等于号等。 综上所述,使用algorithm2e宏包可以轻松地在latex中编写算法。需要特别注意的是,算法的排版应该尽量美观、简洁,方便阅读和理解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值