我们可以清楚地看到数据不遵循高斯分布。
有不同的数据转换方法可以使数据接近高斯分布。我们进行Box-Cox变换:
dataNew['Dense1'],fitted_lambda = stats.boxcox(dataNew['Dense1'])
dataNew['Dense2'],fitted_lambda = stats.boxcox(dataNew['Dense2'])
dataNew['Dense3'],fitted_lambda = stats.boxcox(dataNew['Dense3'])
dataNew['Dense4'],fitted_lambda = stats.boxcox(dataNew['Dense4'])
现在让我们再次绘制它们的分布图来检查:
Python中有两种方法可以执行ANOVA测试。一个是stats.f_oneway()方法:
F, p = stats.f_oneway(dataNew['Dense1'],dataNew['Dense2'],dataNew['Dense3'],dataNew['Dense4'])
## 看看整体模型是否重要
print('F-Statistic=%.3f, p=%.3f' % (F, p))
我们发现p值<0.05。因此,我们可以拒绝零假设——不同密度组之间没有差异。
方法2:用OLS模型进行单因素方差分析正如我们在回归中所知道的,我们可以对每个输入变量进行回归,并检查其对目标变量的影响。所以,我们将遵循同样的方法,我们在线性回归中遵循的方法。
model = ols('count ~ C(density_Group)', newDf).fit()
model.summary()
## 看看整体模型是否重要
print(f"Overall model F({model.df_model: .0f},{model.df_resid: .0f}) = {model.fvalue: .3f}, p = {model.f_pvalue: .4f}")
#创建方差分析表
res = sm.stats.anova_lm(model, typ= 2)
res
从以上输出结果可以看出,p值小于0.05。因此,我们可以拒绝不同密度组之间没有差异的零假设。
F-statistic= 5.817,p-value= 0.002,这表明density_Group对日冕阳性病例有总体显着影响。但是,我们尚不知道desnity_groups之间的区别在哪里。因此,基于p值,我们可以拒绝H0;就面积密度和日冕例数而言,没有显着差异。
事后比较检验当我们进行方差分析时,我们试图确定各组之间是否存在统计学上的显着差异。那么,如果我们发现统计学意义呢?
如果发现存在差异,则需要检查组差异的位置。因此,我们将使用Tukey HSD测试来确定差异所在:
mc = statsmodels.stats.multicomp.MultiComparison(newDf['Count'],newDf['density_Group'])
mc_results = mc.tukeyhsd()
print(mc_results)
Tuckey HSD测试清楚地表明,Group1 – Group3,Group1 – Group4,Group2 – Group3和Group3 – Group4之间存在显着差异。
这表明,除上述两组外,所有其他日冕病例数的成对比较均拒绝零假设,且无统计学显著性差异。
假设检验/模型诊断正态分布假设检验当使用线性回归和方差分析模型时,假设与残差有关,而不是变量本身。
方法1:Shapiro-Wilk试验:### 正态性假设检查
w, pvalue = stats.shapiro(model.resid)
print(w, pvalue)
从上面的代码片段中,我们看到所有密度组的p值都大于0.05。因此,我们可以得出结论,它们遵循高斯分布。
方法2:Q-Q图试验:我们可以使用Q-Q图来检验这个假设:
res = model.resid
fig = sm.qqplot(res, line='s')
plt.show()