分享

Python 数据统计分析: Pingouin

 NeighborMrSun 2023-02-13 发布于湖南

前言

论数据统计分析与可视化的能力,当然还是的属R语言最为强大,毕竟当初设计这门语言的人就是为了实现数据统计分析。国内Python热火朝天,R语言感觉不温不火。大部分R语言的数据分析与可视化的包主要还是外国人在开发与更新 (关于这个我以后会介绍如何在Python中调用R语言)。Python主要应用还是机器学习与深度学习这些。

最近有个用户感知研究,也要用到数据统计分析。平时的代码都是用Python写的,所以也懒得再去翻R语言的代码,索性还是用Python吧。然后再搜索有些数据分析方法的时候,就发现了几个很棒的数据统计分析包,都还是最近几年刚出的,感觉非常有用。所以在这里顺带介绍给大家,我也当是记了一个学习笔记,也方便我以后要用的时候自己来查找!

对于想学R语言的朋友,我也推荐一本书给大家:《R语言数据可视化之美》,对于想学Python的朋友,我也推荐一本书给大家:《Python数据可视化之美》。数据可视化入门一门新的编程语言,是一个很好的方法,亲测有效!


Pingouin是一个用Python 3编写的开源统计包,主要基于Pandas和NumPy。下面列出了它的一些主要功能。关于可用函数的完整列表,请参考API文档。

  • ANOVAs: N-way, repeated measures, mixed, ancova 
  • 成对的事后检验(参数和非参数)和成对的相关关系
  • 健全的、部分的、距离的和重复测量的相关关系
  • 线性/逻辑回归和调解分析
  • 贝叶斯系数
  • 多变量测试
  • 可靠性和一致性
  • 效应大小和功率分析
  • 围绕效应大小或相关系数的参数化/约束性置信区间
  • 循环统计
  • 智平方测试 Chi-squared tests
  • 绘图。Bland-Altman图,Q-Q图,成对图,稳健相关图等

Pingouin是为那些需要简单而详尽的统计功能的用户设计的。在这个页面,你会发现一系列的流程图,旨在帮助你选择Pingouin的哪些功能适合你的分析。点击所需的流程图,查看带有相关文档超链接的全比例图像。

方差分析 ANOVA

方差分析(英语:Analysis of variance,简称ANOVA)为资料分析中常见的统计模型,主要为探讨连续型(Continuous)资料型态之因变量(Dependent variable)与类别型资料型态之自变量(Independent variable)的关系,当自变项的因子中包含等于或超过三个类别情况下,检验其各类别间平均数是否相等的统计模式,广义上可将T检验中方差相等(Equality of variance)的合并T检验(Pooled T-test)视为是方差分析的一种,基于T检验为分析两组平均数是否相等,并且采用相同的计算概念,而实际上当方差分析套用在合并T检验的分析上时,产生的F值则会等于T检验的平方项。

方差分析依靠F-分布为概率分布的依据,利用平方和(Sum of square)与自由度(Degree of freedom)所计算的组间与组内均方(Mean of square)估计出F值,若有显著差异则考量进行事后比较或称多重比较(Multiple comparison),较常见的为薛费法(事后比较法)、杜其范围检验与邦费罗尼校正,用于探讨其各组之间的差异为何。

在方差分析的基本运算概念下,依照所感兴趣的因子数量而可分为单因子方差分析、双因子方差分析、多因子方差分析三大类,依照因子的特性不同而有三种型态,固定效应方差分析(fixed-effect analysis of variance)、随机效应方差分析(random-effect analysis of variance)与混合效应方差分析(Mixed-effect analaysis of variance),然而第三种型态在后期发展上被认为是Mixed model的分支,关于更进一步的探讨可参考Mixed model的部分。

方差分析优于两组比较的T检验之处,在于后者会导致多重比较(multiple comparisons)的问题而致使第一类错误(Type one error)的机会增高,因此比较多组平均数是否有差异则是方差分析的主要命题。

在统计学中,方差分析(ANOVA)是一系列统计模型及其相关的过程总称,其中某一变量的方差可以分解为归属于不同变量来源的部分。其中最简单的方式中,方差分析的统计测试能够说明几组数据的平均值是否相等,因此得到两组的T检验。在做多组双变量T检验的时候,错误的概率会越来越大,特别是第一类错误,因此方差分析只在二到四组平均值的时候比较有效。(来源:维基百科)

Image

import pingouin as pg# Load an example dataset comparing pain threshold as a function of hair colordf = pg.read_dataset('anova')
# 1. This is a between subject design, so the first step is to test for equality of variancespg.homoscedasticity(data=df, dv='Pain threshold', group='Hair color')
# 2. If the groups have equal variances, we can use a regular one-way ANOVApg.anova(data=df, dv='Pain threshold', between='Hair color')
# 3. If there is a main effect, we can proceed to post-hoc Tukey testpg.pairwise_tukey(data=df, dv='Pain threshold', between='Hair color')

相关性分析 Correlation

相关系数是最早由统计学家卡尔·皮尔逊设计的统计指标,是研究变量之间线性相关程度的量,一般用字母 r 表示。由于研究对象的不同,相关系数有多种定义方式,较为常用的是皮尔逊相关系数。

相关表和相关图可反映两个变量之间的相互关系及其相关方向,但无法确切地表明两个变量之间相关的程度。相关系数是用以反映变量之间相关关系密切程度的统计指标。相关系数是按积差方法计算,同样以两变量与各自平均值的离差为基础,通过两个离差相乘来反映两变量之间相关程度;着重研究线性的单相关系数。

需要说明的是,皮尔逊相关系数并不是唯一的相关系数,但是最常见的相关系数,以下解释都是针对皮尔逊相关系数。

依据相关现象之间的不同特征,其统计指标的名称有所不同。如将反映两变量间线性相关关系的统计指标称为相关系数(相关系数的平方称为判定系数);将反映两变量间曲线相关关系的统计指标称为非线性相关系数、非线性判定系数;将反映多元线性相关关系的统计指标称为复相关系数、复判定系数等 (来源: 百度百科)

Image

import pingouin as pgimport seaborn as sns# Load an example dataset with the personality scores of 500 participantsdf = pg.read_dataset('pairwise_corr')
# 1.Test for bivariate normality (optional)pg.multivariate_normality(df[['Neuroticism', 'Openness']])
# 1bis. Visual inspection with a histogram + scatter plot (optional)sns.jointplot(data=df, x='Neuroticism', y='Openness', kind='reg')
# 2. If the data have a bivariate normal distribution and no clear outlier(s), we can use a regular Pearson correlationpg.corr(df['Neuroticism'], df['Openness'], method='pearson')

Image

非参数分析 Non-parametric

非参数检验(Nonparametric tests)是统计分析方法的重要组成部分,它与参数检验共同构成统计推断的基本内容。参数检验是在总体分布形式已知的情况下,对总体分布的参数如均值、方差等进行推断的方法。但是,在数据分析过程中,由于种种原因,人们往往无法对总体分布形态作简单假定,此时参数检验的方法就不再适用了。非参数检验正是一类基于这种考虑,在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而得名为“非参数”检验。(来源: 百度百科)

Image

import pingouin as pg# Load an example dataset comparing pain threshold as a function of hair colordf = pg.read_dataset('anova')# There are 4 independent groups in our dataset, we'll therefore use the Kruskal-Wallis test:pg.kruskal(data=df, dv='Pain threshold', between='Hair color')

地址:

https://github.com/raphaelvallat/pingouin

引用

如果你想引用Pingouin,请参考《 Journal of Open Source Software》上的出版物。

Vallat, R. (2018). Pingouin: statistics in Python. Journal of Open Source Software, 3(31), 1026, https:///10.21105/joss.01026

@article{vallat2018pingouin,  title={Pingouin: statistics in Python.},  author={Vallat, Raphael},  journal={J. Open Source Softw.},  volume={3},  number={31},  pages={1026},  year={2018}}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多