Python e inferência estatística: parte 4

Esta postagem final é sobre análise de variância. Veja a postagem anterior aqui .





Análise de variação

Análise de variância (variância), que na literatura especial também é chamada de ANOVA do inglês. ANalysis Of VAriance é um conjunto de métodos estatísticos usados ​​para medir a significância estatística das diferenças entre os grupos. Ele foi desenvolvido pelo estatístico extremamente talentoso Ronald Fisher, que também popularizou o teste de significância estatística em seus trabalhos de pesquisa de testes biológicos.





Observação... Nas postagens anteriores e nesta série de postagens, o termo “variância” foi usado em nosso termo aceito “variância” e o termo “variância” foi indicado entre parênteses em alguns lugares. Isso não é coincidência. No exterior existem termos emparelhados "variância" e "covariância" e, em teoria, deveriam ser traduzidos com uma raiz, por exemplo, como "variância" e "covariância", mas na verdade, temos uma ligação emparelhada quebrada, e eles são traduzido como "variância" e "covariância" completamente diferentes. Mas isso não é tudo. "Dispersão" (variação estatística) no exterior é um conceito genérico separado de dispersão, ou seja, o grau em que a distribuição se estende ou se contrai e as medidas de variância estatística são variância, desvio padrão e intervalo interquartil. Dispersão, como conceito genérico de dispersão, e variância, como uma de suas medidas,medir a distância da média são dois conceitos diferentes. Mais adiante no texto para variação, o termo geralmente aceito "variação" será usado em todo o texto. No entanto, essa discrepância na terminologia deve ser levada em consideração.





Nossos testes de estatística z e estatística t enfocaram as médias da amostra como o mecanismo principal para diferenciar as duas amostras. Em cada caso, procuramos a discrepância nas médias, dividida pelo nível de discrepância que poderíamos razoavelmente esperar e quantificada pelo erro padrão.





A média não é o único indicador de amostra que pode indicar uma discrepância entre as amostras. Na verdade, a variância da amostra também pode ser usada como um indicador de discrepância estatística.





Duração (segundos), página por página e combinada
Duração (segundos), página por página e combinada

, , . - . , , .





. , , . , , .





F-

F- — .





— 1, — . k , n — , :





df_1 = k-1 df_2 = nk

F- pandas plot



:





def ex_2_Fisher():
    '''  F-  '''
    mu = 0
    d1_values, d2_values = [4, 9, 49], [95, 90, 50]
    linestyles = ['-', '--', ':', '-.']
    x = sp.linspace(0, 5, 101)[1:] 
    ax = None
    for (d1, d2, ls) in zip(d1_values, d2_values, linestyles):
        dist = stats.f(d1, d2, mu)
        df  = pd.DataFrame( {0:x, 1:dist.pdf(x)} )   
        ax = df.plot(0, 1, ls=ls, 
                     label=r'$d_1=%i,\ d_2=%i$' % (d1,d2), ax=ax)
    plt.xlabel('$x$\nF-')
    plt.ylabel('  \n$p(x|d_1, d_2)$')
    plt.show()
      
      



F- , 100 , 5, 10 50 .





F-

, , F-. F- , . F- :





S2b — , S2w — .





F . , , . , , , .





F- , F. F .





F- . , . , k , k, :





SSW  , xjkj- .





SSW  , Python, ssdev



, :





def ssdev( xs ):
    '''    
            '''
    mu = xs.mean() 
    square_deviation = lambda x : (x - mu) ** 2 
    return sum( map(square_deviation, xs) )
      
      



F- :





SST — , SSW — , . «» , :





, SST — - . Python SST SSW , .





ssw = sum( groups.apply( lambda g: ssdev(g) ) )  #  
                                                 #   
sst = ssdev( df['dwell-time'] )  #      
ssb = sst – ssw                  #    
      
      



F- . ssb



ssw



, F-.





Python F- :





msb = ssb / df1      #  
msw = ssw / df2      #  
f_stat = msb / msw
      
      



F- , F-.





F-

, , () ,   , .





scipy stats.f.sf



, . F- 20 , . , , F-. F-, F- F-, . f_test



, :





def f_test(groups):
    m, n = len(groups), sum(groups.count())
    df1, df2 = m - 1, n - m 
    ssw = sum( groups.apply(lambda g: ssdev(g)) )  
    sst = ssdev( df['dwell-time'] )                
    ssb = sst - ssw                                
    msb = ssb / df1                                
    msw = ssw / df2                                
    f_stat = msb / msw
    return stats.f.sf(f_stat, df1, df2)
    
def ex_2_24():
    '''   -   F-'''
    df = load_data('multiple-sites.tsv')
    groups = df.groupby('site')['dwell-time']
    return f_test(groups)
      
      



0.014031745203658217
      
      



F- p-, scipy stats.f.sf



, . P- , .. - . . 5%- .





p-, 0.014, .. . - , .





Distribuição F com 19 e 980 graus de liberdade
F- 19 980

- , :





def ex_2_25():
    '''    
        -    '''
    df = load_data('multiple-sites.tsv')
    df.boxplot(by='site', showmeans=True)
    plt.xlabel('  -')
    plt.ylabel(' , .')
    plt.title('')
    plt.suptitle('')
    plt.show()
      
      



boxplot



, -. - 0, .





, - 10 , . , , , , 6, 144 .:





def ex_2_26():
    '''T-  0  10  -'''
    df = load_data('multiple-sites.tsv')
    groups   = df.groupby('site')['dwell-time']
    site_0   = groups.get_group(0) 
    site_10  = groups.get_group(10)
    _, p_val = stats.ttest_ind(site_0, site_10, equal_var=False)
    return p_val
      
      



0.0068811940138903786
      
      



F-, , - 6 :





def ex_2_27():
    '''t-  0  6  -'''
    df = load_data('multiple-sites.tsv')
    groups   = df.groupby('site')['dwell-time']
    site_0   = groups.get_group(0) 
    site_6   = groups.get_group(6)
    _, p_val = stats.ttest_ind(site_0, site_6, equal_var=False)
    return p_val
      
      



0.005534181712508717
      
      



, , , - 6 -. AcmeContent -. - - !





, , . , — , . . , , .





d

d  — , , , , . , :





Sab — ( ) . :





def pooled_standard_deviation(a, b):
    '''   
       (   )'''
    return sp.sqrt( standard_deviation(a) ** 2 +
                    standard_deviation(b) ** 2)
      
      



, 6 - d  :





def ex_2_28():
    '''   d  
          -   6'''
    df = load_data('multiple-sites.tsv')
    groups = df.groupby('site')['dwell-time']
    a      = groups.get_group(0)
    b      = groups.get_group(6)
    return (b.mean() - a.mean()) / pooled_standard_deviation(a, b)
      
      



0.38913648705499848
      
      



p-, d . , , . 0.5, , , 0.38 — . - , -, .





   Github.    .





, . , , z-, t- F-.





, , , . — , — . , , F- 1- 2- .





.





Na próxima série de postagens, se os leitores desejarem, aplicaremos o que aprendemos sobre variância e o teste F a amostras individuais. Apresentaremos um método de análise de regressão e o usaremos para encontrar correlações entre variáveis ​​em uma amostra de atletas olímpicos.








All Articles