代码之家  ›  专栏  ›  技术社区  ›  2Obe

比较分类数据的斜率

  •  0
  • 2Obe  · 技术社区  · 8 年前

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

    enter image description here

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

    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  
    

    感谢您的帮助!!

    3 回复  |  直到 8 年前
        1
  •  2
  •   Robert Davy    8 年前

    在python中,可以使用 statsmodels . 您必须设置一个数据框,将所有数据放在一列中( 价值 ),一列表示年份,另一列(我们称之为 color_组 )这是一个分类变量,指示数据属于哪个组/颜色。然后建立一个有点像这样的模型:

    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()
    

    interaction 在年份和COLOR_组之间。这里有点复杂,但请查看上面的文档链接。我认为这只会测试斜坡是否完全相同。

    serial correlation 在这些涉及时间序列数据的测试中。

        2
  •  1
  •   smundlay    8 年前

    http://core.ecu.edu/psyc/wuenschk/docs30/CompareCorrCoeff.pdf )

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

    from scipy import stats
    import numpy as np
    
    x = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017]
    y_blue = [944, 413, 506, 367, 436, 523, 432, 415, 700, 506]
    
    slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
    print(slope)
    

    如果您的样本很大(我所学的是n>30),并且 你不能假设方差的同质性 z-测试简单来说就是:

    numerator = slope1 - slope2
    denominator = pow((pow(std_error1,2) + pow(std_error2,2), 1/2)
    z = numerator / denominator  
    

    &使用z统计量查找p值(请阅读此处: https://www.sophia.org/tutorials/how-to-find-a-p-value-from-a-z-test-statistic )

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

        3
  •  1
  •   BossaNova    8 年前

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

    看这里 https://pypi.python.org/pypi/pyvttbl

    在这里 https://www.marsja.se/two-way-anova-repeated-measures-using-python/