Python 比较分类数据的斜率

Python 比较分类数据的斜率,python,scipy,linear-regression,Python,Scipy,Linear Regression,您好,我想比较一下2009年至2017年期间以下销售数据分布的线性回归线的斜率。因此,我对“蓝条高于其他条”不感兴趣,但对三个类别的斜率是否存在差异感兴趣 我想比较回归线的斜率——检查它们是否有显著差异- 方法:我为每条回归线绘制额外的置信区间。如果斜率不同且置信区间在给定时间段内不重叠,我知道斜率不同。这是一个合适的方法吗?我怎样才能做到呢 三个类别的数据如下: Blue 413 506 367 436 523 432 415 700 506 Red 24 82 126 106

您好,我想比较一下2009年至2017年期间以下销售数据分布的线性回归线的斜率。因此,我对“蓝条高于其他条”不感兴趣,但对三个类别的斜率是否存在差异感兴趣

我想比较回归线的斜率——检查它们是否有显著差异-

方法:我为每条回归线绘制额外的置信区间。如果斜率不同且置信区间在给定时间段内不重叠,我知道斜率不同。这是一个合适的方法吗?我怎样才能做到呢

三个类别的数据如下:

Blue  413 506 367 436 523 432 415 700 506 
Red     24 82 126 106 107 115 139 109 101 
Green  27   69  68  79  83  80  113 116 94  

谢谢你的帮助

费舍尔z检验是一种比较相关系数的方法。我之所以提到这一点,是因为可能存在两个样本具有相同的相关系数(x很可能是y的预测因子)但斜率不同的情况。反之亦然。这一点很重要,因为它告知了我们在测试两个样本中斜率相同的零假设时使用的方法(请参阅此处的更多信息:)

您可以找到每条线的坡度(以下是其中一条线的示例)

如果你的样本很大(我所学的是n>30),并且你不能假设方差的同质性那么z检验就是:

numerator = slope1 - slope2
denominator = pow((pow(std_error1,2) + pow(std_error2,2), 1/2)
z = numerator / denominator  
&使用z统计量查找p值(此处阅读:)


如果你可以假设方差的同质性,那么你需要做一个集合学生的t检验。这在方法上和上面的相似,只是不同的公式。查看我发布的第一个链接

费舍尔z检验是一种比较相关系数的方法。我之所以提到这一点,是因为可能存在两个样本具有相同的相关系数(x很可能是y的预测因子)但斜率不同的情况。反之亦然。这一点很重要,因为它告知了我们在测试两个样本中斜率相同的零假设时使用的方法(请参阅此处的更多信息:)

您可以找到每条线的坡度(以下是其中一条线的示例)

如果你的样本很大(我所学的是n>30),并且你不能假设方差的同质性那么z检验就是:

numerator = slope1 - slope2
denominator = pow((pow(std_error1,2) + pow(std_error2,2), 1/2)
z = numerator / denominator  
&使用z统计量查找p值(此处阅读:)


如果你可以假设方差的同质性,那么你需要做一个集合学生的t检验。这在方法上和上面的相似,只是不同的公式。查看我发布的第一个链接

要真正估计斜率差异的统计显著性,最准确的方法是使用双向方差分析。在这个统计测试中,斜率之间的差异是指主要因素销售代理(或您所指的任何颜色)和年份之间的相互作用。如果每种颜色的销售率随时间变化不同,那么您将得到销售代理和年份之间的交互。 问题是,据我所知,在python中没有这种anova的简单实现(例如,在scipy中没有)。您可以使用需要安装的pyvttbl库

看这里

这里呢


关于你关于检查置信区间是否重叠的建议,我认为这不会给你一个准确的指示。首先,3个销售代理的截距(可能还有范围?)不同,置信区间将指示销售价值,而不是时间和销售之间的相互作用。第二,置信区间的重叠与统计显著性并不完全平行,尽管许多人确实混淆了它们。通过重叠的误差条,可以获得统计显著性差异

要真正估计斜率差异的统计显著性,最准确的方法是使用双向方差分析。在这个统计测试中,斜率之间的差异是指主要因素销售代理(或您所指的任何颜色)和年份之间的相互作用。如果每种颜色的销售率随时间变化不同,那么您将得到销售代理和年份之间的交互。 问题是,据我所知,在python中没有这种anova的简单实现(例如,在scipy中没有)。您可以使用需要安装的pyvttbl库

看这里

这里呢


关于你关于检查置信区间是否重叠的建议,我认为这不会给你一个准确的指示。首先,3个销售代理的截距(可能还有范围?)不同,置信区间将指示销售价值,而不是时间和销售之间的相互作用。第二,置信区间的重叠与统计显著性并不完全平行,尽管许多人确实混淆了它们。通过重叠的误差条,可以获得统计显著性差异

在python中,这可以使用。 您必须设置一个pandas dataframe,其中一列(值)、一列(年份)和另一列(我们称之为color_group),这是一个分类变量,指示数据所属的组/颜色。然后设置一个有点像这样的模型:

import statsmodels.formula.api as smf
import numpy as np
import pandas as pd

dat_blue = np.array([413,506,367,436,523,432,415,700,506])
dat_red = np.array([24,82,126,106,107,115,139,109,101])
dat_green = np.array([27,69,68,79,83,80,113,116,94])
values = np.r_[dat_blue, dat_red, dat_green]

yrs = np.array(range(2009,2018))
years = np.r_[yrs, yrs, yrs]

grp = np.r_[np.repeat('BLUE', 9), np.repeat('RED', 9), np.repeat('GREEN', 9)]
df = pd.DataFrame({'value':values, 'year':years, 'color_group':grp})

lm1 = smf.ols(formula='value ~ year * color_group', data=df).fit()
lm1.summary()
然后看一看年与年之间的测试结果。这里有点复杂,但请查看上面的文档链接。我认为这只会测试斜坡是否完全相同


更进一步说,统计学家担心在这些涉及时间序列数据的测试中会出现问题。

在python中,这可以使用。 您必须设置一个pandas数据框,其中一列(值)、一列(年份)和另一列(我们称之为color_组)包含您的所有数据,这是一个分类va