柱状图通常表示均值 ± 标准差的数据,数据要求符合正态分布,描述数据的特点或者比较各组数据间的差异,多数情况下采用方差分析和 T 检验。
举个例子:现有三个年级学生身高的数据,分别为一年级、二年级和三年级。
1. 打开 graphpad 软件,选择 column 模块,按下图进行选择。
2. 键入数据,完善表格。
3. 点击 Results 下的 New Analysis 或者 Analyze,按下图选择「One-way ANOVA(单方向方差分析)」并勾选三个分组。进入下一步。
4. 进行下一步选择
4.1 Experimental Design 下按下图进行选择
4.2 Multiple comparisons 下选择
4.3 Options 下选择(默认)
5. 统计分析结果
5.1 单方向方差分析的 P 值和 F 值
5.2 三组中两两分析结果
6. 作图:点击 Graphs 模块中的 DATA 1,按下图进行选择,并生成草图。
6.1 双击图片进入 format graph 对话框,进一步修饰柱形的颜色、填充、边框等。值得一提的是,在 format graph 的 graph settings 模块下可以调整各柱形间距:建议调整为 70%。进入Annotations,把数值体现在图上。
7. 不同的数据形式需要用不同的柱形图表示。
于是我又想用python来实现以下,单纯使用单因素方差分析,则
from scipy import stats
a = [121,110,109,120,121,110,108,111,120,116] # 一年级
b = [130,131,132,131,120,125,134,133,122,129] # 二年级
c = [141,144,130,120,136,142,135,146,129,135] # 三年级
f,p=stats.f_oneway(a,b,c)
print(f,p)
结果:30.1117709031702 1.3330782027096544e-07,但是在这里,两两之间的比较的结果是无法得到。于是换种方法。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns
#数据的录入
a = [121,110,109,120,121,110,108,111,120,116] # 一年级
b = [130,131,132,131,120,125,134,133,122,129] # 二年级
c = [141,144,130,120,136,142,135,146,129,135] # 三年级
f,p=stats.f_oneway(a,b,c) #使用单因素卡方检验
print(f,p)
df={'class1':a,
'class2':b,
'class3':c}
df=pd.DataFrame(df) #创建DataFrame表格
df_melt = df.melt()
df_melt.columns = ['Class','Value']
sns.boxplot(x='Class',y='Value',data = df_melt) #使用seaborn模块绘制箱线图
plt.show()
#使用方差分析
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
model = ols('Value~C(Class)',data=df_melt).fit()
table1 = anova_lm(model, typ = 2)
print(table1)
#方差分析的结果我们需要看P值,本例中P值等于 1.333078e-07小于0.05,说明处理间存在显著差异,具体哪个处理间存在差异还需要通过多重检验来看。与前一种方法也相同。
#多重分析 比较常用的检验方法是邓肯多重检验(Tukey HSD test)
from statsmodels.stats.multicomp import MultiComparison
mc = MultiComparison(df_melt['Value'],df_melt['Class'])
tukey_result = mc.tukeyhsd(alpha = 0.5)
print(tukey_result)
两者分析的结果是一致的。
原创文章(本站视频密码:66668888),作者:xujunzju,如若转载,请注明出处:https://zyicu.cn/?p=3290