做数学建模不得不会的数据特征分析方法----正态性检验

利用观测数据判断总体是否服从正态分布的检验称为正态性检验,它是统计判决中重要的一种特殊的拟合优度假设检验。我们可以通过直方图初步判断,QQ图判断,K-S检验

首先引入所需模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

(1)直方图初判
创建随机数据

s = pd.DataFrame(np.random.randn(1000)+10,columns = ['value'])
print(s.head())

数据部分展示:
在这里插入图片描述
绘制数据分布图

fig = plt.figure(figsize = (10,6))
ax1 = fig.add_subplot(2,1,1)  # 创建子图1
ax1.scatter(s.index, s.values)
plt.grid()

绘制结果:
在这里插入图片描述
绘制直方图

ax2 = fig.add_subplot(2,1,2)  # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()

绘制结果:
在这里插入图片描述

从图中我们可以看出,数据呈现较明显的正态性
(2)QQ图判断

# QQ图通过把测试样本数据的分位数与已知分布相比较,从而来检验数据的分布情况
# QQ图是一种散点图,对应于正态分布的QQ图,就是由标准正态分布的分位数为横坐标,样本值为纵坐标的散点图
# 参考直线:四分之一分位点和四分之三分位点这两点确定,看散点是否落在这条线的附近
# 绘制思路
# ① 在做好数据清洗后,对数据进行排序(次序统计量:x(1)<x(2)<....<x(n))
# ② 排序后,计算出每个数据对应的百分位p{i},即第i个数据x(i)p(i)分位数,其中p(i)=(i-0.5)/n (pi有多重算法,这里以最常用方法为主)
# ③ 绘制直方图 + qq图,直方图作为参考

创建随机数据

s = pd.DataFrame(np.random.randn(1000)+10,columns = ['value'])
print(s.head())

计算均值、标准差

mean = s['value'].mean()
std = s['value'].std()
print('均值为:%.2f,标准差为:%.2f' % (mean,std))

数据展示:
在这里插入图片描述
计算四分之一位数、四分之三位数

st = s['value'].describe()
x1 ,y1 = 0.25, st['25%']
x2 ,y2 = 0.75, st['75%']
print('四分之一位数为:%.2f,四分之三位数为:%.2f' % (y1,y2))

绘制数据分布图

fig = plt.figure(figsize = (10,9))
ax1 = fig.add_subplot(3,1,1)  # 创建子图1
ax1.scatter(s.index, s.values)
plt.grid()

在这里插入图片描述
绘制直方图

ax2 = fig.add_subplot(3,1,2)  # 创建子图2
s.hist(bins=30,alpha = 0.5,ax = ax2)
s.plot(kind = 'kde', secondary_y=True,ax = ax2)
plt.grid()

在这里插入图片描述
绘制QQ图,直线为四分之一数、四分之三位数的连线,基本符合正态分布

ax3 = fig.add_subplot(3,1,3)  # 创建子图3
ax3.plot(s_r['p'],s_r['value'],'k.',alpha = 0.1)
ax3.plot([x1,x2],[y1,y2],'-r')
plt.grid()

绘制结果:
在这里插入图片描述
(3)KS检验,理论推导
生成样本数据,35位健康男性在未进食之前的血糖浓度

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]

查看数据基本统计量

df = pd.DataFrame(data, columns =['value'])
u = df['value'].mean()
std = df['value'].std()
print("样本均值为:%.2f,样本标准差为:%.2f" % (u,std))

在这里插入图片描述
创建频率数据

s = df['value'].value_counts().sort_index()
df_s = pd.DataFrame({'血糖浓度':s.index,'次数':s.values})

D值序列计算结果表格

df_s['累计次数'] = df_s['次数'].cumsum()
df_s['累计频率'] = df_s['累计次数'] / len(data)
df_s['标准化取值'] = (df_s['血糖浓度'] - u) / std
df_s['理论分布'] =[0.0244,0.0968,0.2148,0.2643,0.3228,0.3859,0.5160,0.5832,0.7611,0.8531,0.8888,0.9803]  # 通过查阅正太分布表
df_s['D'] = np.abs(df_s['累计频率'] - df_s['理论分布'])
dmax = df_s['D'].max()
print("实际观测D值为:%.4f" % dmax)

在这里插入图片描述

密度图表示

df_s['累计频率'].plot(style = '--k.')
df_s['理论分布'].plot(style = '--r.')
plt.legend(loc = 'upper left')
plt.grid()

在这里插入图片描述
(4)直接用算法做KS检验

from scipy import stats
# scipy包是一个高级的科学计算库,它和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算

data = [87,77,92,68,80,78,84,77,81,80,80,77,92,86,
       76,80,81,75,77,72,81,72,84,86,80,68,77,87,
       76,77,78,92,75,80,78]
# 样本数据,35位健康男性在未进食之前的血糖浓度

df = pd.DataFrame(data, columns =['value'])
u = df['value'].mean()  # 计算均值
std = df['value'].std()  # 计算标准差
stats.kstest(df['value'], 'norm', (u, std))
# .kstest方法:KS检验,参数分别是:待检验的数据,检验方法(这里设置成norm正态分布),均值与标准差
# 结果返回两个值:statistic → D值,pvalue → P值
# p值大于0.05,为正态分布

在这里插入图片描述

有没有朋友知道CSDN写博客这个界面大小怎样更改呀,不知道为什么我的界面变成了这个样子,菜单栏变得非常小,知道的话能不能告诉我怎样改,这样子好难受啊
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在2023数学建模国赛C题中,敏感性分析检验可以应用于对附件表单3中未知类别玻璃文物的化学成分进行鉴别所属类型,并对分类结果的敏感性进行分析。敏感性分析是一种用于评估模型输出结果对于输入参数变化的敏感程度的方法。通过对化学成分的变化进行分析,可以确定哪些参数对于分类结果的影响最为显著。具体的步骤如下: 1. 第一步差异性分析:使用卡方检验分析来确定自变量(化学成分)与因变量(所属类型)之间的关系。将数据导入SPSS软件,进行卡方检验,并分析显著性p值是否小于0.05,以确定自变量是否对分类结果有显著影响。 2. 第二步变化规律分析:对铅钡玻璃与高钾玻璃风化前后的变化差异进行描述性统计分析,例如计算均值、标准差等统计指标。同时,可以使用频率直方图统计分析来观察变化情况。此外,还可以进行正态分布检验,以确定化学成分是否满足正态分布假设。 3. 敏感性分析:通过对化学成分的变化进行敏感性分析,可以评估不同参数对于分类结果的影响程度。可以尝试对每个化学成分进行逐一变化,观察分类结果的变化情况,并分析其敏感性。可以使用敏感性指标(如Sobol指标、Morris指标等)来量化参数的敏感程度。通过这种方式,可以确定哪些化学成分对于分类结果起到主要作用,从而为进一步的鉴别和分类提供指导。 通过以上步骤,可以对附件表单3中未知类别玻璃文物的化学成分进行分析,并对分类结果的敏感性进行检验和评估。这将有助于深入理解玻璃文物的特性和分类方法,并提供科学依据和指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值