Python基本统计分析

常见的统计分析方法

 

import numpy as np

import scipy.stats as spss

import pandas as pd

 

鸢尾花数据集

 

https://github.com/mwaskom/seaborn-data

 

df = pd.read_csv("iris.csv",index_col="species")

v1 = df.loc["versicolor",:].petal_length.values

v2 = df.loc["virginica",:].petal_length.values

 

1.组间差异的参数检验

数据是否服从正态分布

符合正态分布(p>0.05)

 

# Shapiro-Wilk test

stat, p_value = spss.shapiro(v1)

stat, p_value = spss.shapiro(v2)

 

方差齐性检验

方差齐,即v1和v2的方差没有显著性差异,即p>0.05

 

# 非参数检验,对于数据的分布没有要求

stat, p_value = spss.levene(v1,v2)

# 要求数据服从正态分布

stat, p_value = spss.bartlett(v1,v2)

 

两独立样本的 t 检验

stat, p_value = spss.ttest_ind(v1,v2)

 

非独立样本的 t 检验

配对 Paired Student’s t-test(本例中v1,v2并不是配对样本,这里仅用于演示)

 

stat, p_value = spss.ttest_rel(v1,v2)

one-way ANOVA

检查是否符合正态分布

df.petal_length.groupby(df.index).apply(spss.shapiro)

# species

# setosa (0.971718966960907, 0.27151283621788025)

# versicolor (0.9741330742835999, 0.3379890024662018)

# virginica (0.9673907160758972, 0.1808987259864807)

# Name: sepal_width, dtype: object

 

方差齐性检验

p_value > 0.05方差齐

 

v1 = df.loc["versicolor",:].sepal_width.values

v2 = df.loc["virginica",:].sepal_width.values

v3 = df.loc["setosa",:].sepal_width.values

stat, p_value = spss.bartlett(v1,v2,v3)

 

单因素方差分析

p_value < 0.05三个物种间的sepal_width有差异

 

stat, p_value = spss.f_oneway(v1, v2, v3)

也可以使用statsmodels中的函数,结果一致

 

from statsmodels.formula.api import ols

from statsmodels.stats.anova import anova_lm

df.loc[:,'species'] = df.index

aov_results = anova_lm(ols('sepal_width ~ species', data = df).fit())

aov_results

# df sum_sq mean_sq F PR(>F)

# species 2.0 11.344933 5.672467 49.16004 4.492017e-17

# Residual 147.0 16.962000 0.115388 NaN NaN

 

两两比较找出哪些组之间存在显著差异

3个物种两两之间的sepal_width都有显著性差异

 

from statsmodels.stats.multicomp import pairwise_tukeyhsd

tukey = pairwise_tukeyhsd(df.sepal_width, df.index)

print(tukey)

# Multiple Comparison of Means - Tukey HSD, FWER=0.05     

# ============================================================

# group1 group2 meandiff p-adj lower upper reject

# ------------------------------------------------------------

# setosa versicolor -0.658 0.0 -0.8189 -0.4971 True

# setosa virginica -0.454 0.0 -0.6149 -0.2931 True

# versicolor virginica 0.204 0.0088 0.0431 0.3649 True

# ------------------------------------------------------------

2.组间差异的非参数检验

两组样本

独立样本秩和检验

stat, p_value = spss.ranksums(v1, v2)

非独立样本秩和检验

stat, p_value = spss.wilcoxon(v1, v2)

多组样本

stat, p_value = spss.kruskal(v1, v2, v3)

3.连续型变量之间的相关性

Pearson’s Correlation Coefficient

v1,v2符合正态分布

 

r, p_value = spss.pearsonr(v1,v2)

spearman

v1,v2的分布没有特定的要求

 

r, p_value = spss.spearmanr(v1,v2)

kendalltau

v1,v2的分布没有特定的要求

 

r, p_value = spss.kendalltau(v1,v2)

多个变量之间的相关性

协方差矩阵

df.cov(numeric_only=True)

# sepal_length sepal_width petal_length petal_width

# sepal_length 0.685694 -0.042434 1.274315 0.516271

# sepal_width -0.042434 0.189979 -0.329656 -0.121639

# petal_length 1.274315 -0.329656 3.116278 1.295609

# petal_width 0.516271 -0.121639 1.295609 0.581006

 

相关系数矩阵

df.corr(numeric_only=True)

# sepal_length sepal_width petal_length petal_width

# sepal_length 1.000000 -0.117570 0.871754 0.817941

# sepal_width -0.117570 1.000000 -0.428440 -0.366126

# petal_length 0.871754 -0.428440 1.000000 0.962865

# petal_width 0.817941 -0.366126 0.962865 1.000000

3.分类变量

汽车耗油量数据集https://github.com/mwaskom/seaborn-data

 

mpg = pd.read_csv("mpg.csv")

频数

pd.value_counts(mpg.origin)

# usa 249

# japan 79

# europe 70

# Name: origin, dtype: int64

 

# 百分比

pd.value_counts(mpg.origin,normalize=True)

# usa 0.625628

# japan 0.198492

# europe 0.175879

# Name: origin, dtype: float64

 

列联表

两个以上的变量交叉分类的频数分布表

 

pd.crosstab(mpg.cylinders, mpg.origin)

# origin europe japan usa

# cylinders      

# 3 0 4 0

# 4 63 69 72

# 5 3 0 0

# 6 4 6 74

# 8 0 0 103

 

pd.crosstab(mpg.cylinders, mpg.origin, margins = True)

# origin europe japan usa All

# cylinders        

# 3 0 4 0 4

# 4 63 69 72 204

# 5 3 0 0 3

# 6 4 6 74 84

# 8 0 0 103 103

# All 70 79 249 398

 

每个单元格占总数的比例

pd.crosstab(mpg.cylinders, mpg.origin, normalize = True)

# origin europe japan usa

# cylinders      

# 3 0.000000 0.010050 0.000000

# 4 0.158291 0.173367 0.180905

# 5 0.007538 0.000000 0.000000

# 6 0.010050 0.015075 0.185930

# 8 0.000000 0.000000 0.258794

按行求比例

pd.crosstab(mpg.cylinders, mpg.origin, normalize = 0)

# origin europe japan usa

# cylinders      

# 3 0.000000 1.000000 0.000000

# 4 0.308824 0.338235 0.352941

# 5 1.000000 0.000000 0.000000

# 6 0.047619 0.071429 0.880952

# 8 0.000000 0.000000 1.000000

按列求比例

pd.crosstab(mpg.cylinders, mpg.origin, normalize = 1)

# origin europe japan usa

# cylinders      

# 3 0.000000 0.050633 0.000000

# 4 0.900000 0.873418 0.289157

# 5 0.042857 0.000000 0.000000

# 6 0.057143 0.075949 0.297189

# 8 0.000000 0.000000 0.413655

列联表独立性检验

χ2 独立性检验

在该函数中,参数““correction”用于设置是否进行连续性校正,默认为 True。对于大样本,且频数表中每个单元格的期望频数都比较大(一般要求大于 5),可以不进行连续性校正。

 

tb = pd.crosstab(mpg.cylinders, mpg.origin)

# χ2 值、 P 值、自由度、期望频数表

chi2, p_value, df, expected = spss.chi2_contingency(tb)

p_value

# 9.800693325588298e-35

expected

# array([[ 0.70351759, 0.79396985, 2.50251256],

# [ 35.87939698, 40.49246231, 127.6281407 ],

# [ 0.52763819, 0.59547739, 1.87688442],

# [ 14.77386935, 16.67336683, 52.55276382],

# [ 18.11557789, 20.44472362, 64.43969849]])

 

Fisher 精确概率检验

R语言中fisher.test的故事以及示例

 

Agresti (1990, p. 61f; 2002, p. 91) Fisher's Tea Drinker A British woman claimed to be able to distinguish whether milk or tea was added to the cup first. To test, she was given 8 cups of tea, in four of which milk was added first. The null hypothesis is that there is no association between the true order of pouring and the woman's guess, the alternative that there is a positive association (that the odds ratio is greater than 1).

 

如果观察总例数 n 小于 40,或者频数表里的某个期望频数很小(小于 1),则需要使用 Fisher 精确概率检验

 

spss.fisher_exact这个函数的输入只能是2X2的二维列联表,R中的fisher.test输入可以不是2X2列联表。

 

OR(0,+inf)如果 OR 值大于 1,则说明该因素更容易导致结果事件发生

 

alternative可以选two-sided(默认,OR可能>1,也可能<1), less(OR<1), greater(OR>1)

 

tea_tasting = pd.DataFrame({"Milk":[3,1],"Tea":[1,3]},index=["Milk", "Tea"])

tea_tasting

# Milk Tea

# Milk 3 1

# Tea 1 3

OR, p_value = spss.fisher_exact(tea_tasting,alternative="greater")

OR, p_value

# (9.0, 0.24285714285714283)

# p > 0.05, association could not be established

 

配对列联表的Mcnemar 检验

对每个对象分别用两种方法处理

 

exact:True(样本量小,使用二项分布);False(样本较大,使用 χ2 分布)

correction:在样本量较大,且不一致的结果总数小于 40 时,需要进行连续性校正

from statsmodels.sandbox.stats.runs import mcnemar

tb = np.array([[11, 12],[2, 33]])

stat, p_value = mcnemar(tb, exact = False, correction = True)

p_value

# 0.016156931261181305

 

Reference

https://www.heywhale.com/mw/notebook/61e3d3c7ddda3c0017b4658f

https://www.statsmodels.org/stable/generated/statsmodels.sandbox.stats.runs.mcnemar.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

比大小(打擂台)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明比较大小函数max; int max(int a, int b);int main() {//初始化变量值&#xff1b;int i, n, m, a[10];//填充数组&#xff1b;printf("请输入10个数…

数据结构选择题(期末)

1.给定NN的二维数组A&#xff0c;则在不改变数组的前提下&#xff0c;查找最大元素的时间复杂度是&#xff08;A&#xff09;&#xff1a; A.O(N2) B.O(NlogN) C.O(N) D.O(N2logN) 两重循环即O(N2)的时间复杂度 2.与数据元素本身的形式、内容、相对位置、个数无关的是数据的…

MIT 6.5840(6.824) Lab1:MapReduce 设计实现

1 介绍 本次实验是实现一个简易版本的MapReduce&#xff0c;你需要实现一个工作程序&#xff08;worker process&#xff09;和一个调度程序&#xff08;coordinator process&#xff09;。工作程序用来调用Map和Reduce函数&#xff0c;并处理文件的读取和写入。调度程序用来协…

晶振在电子设备中的作用是什么?

在无源晶振电路中&#xff0c;并联电阻起着至关重要的作用。无源晶振本身不能自行产生振荡&#xff0c;因此需要借助外部电路来实现。并联在晶振两端的电阻&#xff0c;通常称为负载电阻&#xff0c;对电路的稳定性和振荡性能有着重要影响。 晶振电路的核心是皮尔斯振荡器&…

mysql根据字段值关联查不同表

mysql根据字段值关联查不同表&#xff1a; 实现&#xff1a; 使用left join 结合case when 判断直接取值&#xff1a; select mp.member_id ,mp.store_id, case mp.store_type when 1 then bs.store_namewhen 2 then sc.store_namewhen 3 then be.store_name end as store_na…

string类篇超超超详解,40余个成员函数详细解释(图文)!看完包会!!

本篇目标 constructoroperatorElements accessIteratorsCapacityModifiersString operationsmember contants其他函数 一、constructor(对象的创建) void StrTest1() {string s1;//直接构造cout << s1 << endl;//string里内置了流插入、流提取的函数重载&#xf…

Naive RAG 、Advanced RAG 和 Modular RAG 简介

简介&#xff1a; RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统是一种结合了检索&#xff08;Retrieval&#xff09;和生成&#xff08;Generation&#xff09;的机制&#xff0c;用于提高大型语言模型&#xff08;LLMs&#xff09;在特定任务上的表现。随…

使用 Python 批量重命名文件

在日常工作或学习中,我们经常需要对大量文件进行重命名。手动操作一个一个改名既费时又费力,这时候可以使用 Python 脚本来自动完成这项任务。 本文将介绍一个使用 Python 的简单脚本,可以帮助您批量重命名指定目录下的所有文件。 脚本分析 import osdef batch_rename_fi…

深入解析RedisJSON:在Redis中直接处理JSON数据

码到三十五 &#xff1a; 个人主页 JSON已经成为现代应用程序之间数据传输的通用格式。然而&#xff0c;传统的关系型数据库在处理JSON数据时可能会遇到性能瓶颈。为了解决这一问题&#xff0c;Redis推出了RedisJSON模块&#xff0c;它允许开发者在Redis数据库中直接存储、查询…

产品推荐 | 基于 AMD Virtex UltraScale FPGA VCU1287 的特性描述套件

01 产品概述 VCU1287 功能描述套件可为您提供描述和评估 Virtex™ UltraScale™ XCVU095-FFVB2104E FPGA 上可用 32 GTH (16Gbps) 和 32 GTY (30Gbps) 收发器所需的一切功能。每个 GTH 与 GTY Quad 及其相关参考时钟均从 FPGA 路由至 SMA 及 Samtec BullsEye 连接器。 Bulls…

好题总结汇总

好题总结汇总 总结一些做完很有收获的题。 一、经典问题 DP的结合 1、题意&#xff1a; 给定 n n n 种颜色的球的数量 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1​,a2​,...,an​&#xff0c;选出一些不同种类的球(也就是在n种球中选球的任意情况)&#xff0c;将球…

TCP的滑动窗口机制和流量控制

目录 滑动窗口 流量控制 拥塞控制 滑动窗口 TCP除了保证可靠性之外&#xff0c;也希望能够尽可能高效的完成数据传输。滑动窗口就是一种提高效率的机制。以下是不引入滑动窗口的数据传输过程&#xff1a; 可以看到&#xff0c;主机A这边每次收到一个ACK才发送下一个数据。这…

为什么cca门限和tx 功率有关系

Cca是用来决定信道是否繁忙&#xff0c;好像只和收有关。 但是为什么和tx有关。 设想一下这个网路布局。 如果某个STA在决定是否发送的时候&#xff0c;是否不能只看收到的干扰多大&#xff0c;还应该“冒险”一下&#xff0c;如果自己的功率足够&#xff0c;那么就可以扛住干…

Prometheus 服务发现 添加标签

在Prometheus中添加标签可以采用Relabel Config的方式&#xff0c;通过在配置文件中编写relabel_config模块来定义要给哪些目标添加标签&#xff0c;该模块可以实现筛选、替换、修剪、添加等不同的转换操作。 下面是一个添加标签的例子&#xff0c;该例子将添加标签“env: stag…

【经验03】spark处理离线数据速度缓慢遇到的坑

两张表关联 A表有15亿数据,B表有6亿数据 语句大概的意思如下: select a.* from A as a left join B as b on (a.id = b.id and a.id2 = b.id2); 运行了4个小时还没出结果。 增加了spark的参数,增加了RAM和并行设置。都不太好使。 最后发现是关联字段类型不一致导致。…

MySQL索引(一)

什么是MySQL索引 MySQL的索引是一种用于加速数据查询的数据库结构。它类似于一本书的目录&#xff0c;通过建立索引&#xff0c;MySQL可以更快速地定位和检索所需的数据&#xff0c;从而提高查询的效率。索引的基本原理是为数据列创建一个数据结构&#xff08;通常是B树或哈希…

MyBatis的注解实现复杂映射开发

xml 配置方式实现复杂映射回顾 ​ 实现复杂映射我们之前可以在映射文件中通过配置来实现&#xff0c;使用注解开发后&#xff0c;我们可以通过 Results 注解&#xff0c;Result 注解&#xff0c;One 注解和 Many 注解组合完成复杂关系的配置。 注解说明Results代替的是标签 …

软考时间;软考和计算机等级考试的区别是什么;计算机职称评审主要考什么证书

目录 软考时间 软考和计算机等级考试的区别是什么 计算机职称评审主要考什么证书 软考时间 <

【csv-parse】使用parse方法的时候来转换为csv字符串时,会导致输出有乱码

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;前端bug记录 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续前进…

【运维实践项目|002】:服务器集群优化与监控项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 1、你是如何选择和部署监控系统的&#xff1f; 2、你是怎样优化服务器资源配置的&#xff1f; …