sexta-feira, 3 de dezembro de 2010

Médias

As funções esquecidas do Oracle

Com as funções estatísticas do banco nós podemos obter desde o básico da estatística descritiva como count, max, mean, min e um standard deviation, bem como determinar a importância de relações usando testes de hipóteses, dentre os quais temos t-test, f-test ou Análise de Variância (ANOVA).

Dentre as características do Oracle Statistical Functions nós temos:

§  Estatística Descritiva
§  Teste de Hipótese
§  Análise de Correlação (Paramétrica e Não Paramétrica)
§  Funções de Rank
§  Qui-quadrado
§  Regressão Linear
§  Análise de Variância (ANOVA)
§  Teste de Distribuição
§  Funções de Agregação
§  Análise de Pareto
§  Funções Analíticas (essas até já bem usadas ultimamente)

Um fato importante é que todas essas funções não fazem parte de um pacote que deve ser pago separadamente, já estão inclusas nas edições Standard e Enterprise a partir da versão 10g e são free!

Vamos a alguns exemplos. Comecemos pelo básico, estatística descritiva. Média, Moda e Mediana:

Como fazer a média usando Oracle? Bem, aos iniciantes é normal não conhecer, mas para os já experientes programadores, DBA’s, etc, isso pode parecer básico. No entanto, não custa nada relembrar. Vamos usar os seguintes dados:

ID_PACIENTE   NOME            IDADE
-----------   ----            -----
1             Joao Silva      50
2             Jose Souza      30
3             Maria Faria     50
           Antonia Xavier  65
 

SQL> select avg(idade), median(idade), stats_mode(idade)
  2  from fat_linfoma li,
  3          dim_paciente pac
  4  where li.id_paciente = pac.id_paciente;

AVG(IDADE)     MEDIAN(IDADE)     STATS_MODE(IDADE)
----------     -------------     -----------------
49             50                50

Neste exemplo temos as três medidas: média, mediana e moda da idade de pacientes com linfomas. Sempre podemos programar mais uma consulta! E se quisermos obter o resultado de qual a mediana de redução do tamanho do linfoma por grupo de tratamento, faremos o seguinte, usando os dados abaixo:

NOME            TAMANHO_REDUCAO
----            ---------------
Radioterapia    ,5
Quimioterapia   ,25
Quimo e Radio   ,25
Experimental    ,5
Radioterapia    ,3
 

SQL> select trat.nome, median(tamanho_reducao)
  2  from fat_linfoma lin,
  3          dim_tratamento trat
  4  where lin.id_tratamento = trat.id_tratamento
  5  group by trat.nome;

NOME            MEDIAN(TAMANHO_REDUCAO)
----            -----------------------
Experimental    ,5
Quimioterapia   ,25
Quimo e Radio   ,25
Radioterapia    ,4

Isso que vimos são coisas simples. Agora, outro exemplo. Digamos que um pesquisador, com o conjunto de dados a seguir, gostaria de investigar o tempo de vida médio de pacientes com determinado tipo de linfoma. Estabelecemos como hipótese nula que o tempo de vida médio desses pacientes é de 12 meses e como hipótese alternativa que o tempo de vida médio dos pacientes é diferente de 12 meses. Para testar essas hipóteses, voltamos à prancheta do SQL*PLus. Neste caso a estatística faz uso dos testes de hipóteses e nós vamos usar o teste t.

NOME             TEMPO_VIDA
----             ----------
Nao-Hodgkin      24
Hodgkin          12
Hodgkin          6
Nao-Hodgkin      36
Hodgkin          100

SQL> select avg(tempo_vida) media_grupo,
  2         stats_t_test_one(tempo_vida, 12, ‘STATISTIC’) vlr_observado,
  3         stats_t_test_one(tempo_vida, 12) p_vlr
  4  from fat_linfoma;

MEDIA_GRUPO    VLR_OBSERVADO     P_VLR
-----------    -------------     -----
35,6           1,39608315        0,235187133

Pelo resultado encontrado, não existem evidências suficientes para admitirmos que o tempo de vida médio dos pacientes com este tipo de linfoma seja diferente de 12 meses, pois o p_vlr é maior que 0,05. Para que a hipótese nula fosse considerada verdadeira, o resultado do p_vlr deveria ser menor que 5%.

Vamos dar uma olhada em como fazer o teste de qui-quadrado utilizando Oracle. Neste caso vou usar a estrutura da tabela Customer, que faz parte o owner SH, dos demos do Oracle. Este exemplo está na documentação da Oracle, quem quiser testar pode usar em casa ou no trabalho.

SQL> select stats_crosstab (cust_gender, cust_income_level, ‘CHISQ_OBS’) qui_quadrado,
  2         stats_crosstab (cust_gender, cust_income_level, ‘CHISQ_SIG’) p_vlr,
  3         stats_crosstab (cust_gender, cust_income_level, ‘PHI_COEFFICIENT’) coef_corr
  4  from sh.customers;

QUI_QUADRADO    P_VLR        COEF_CORR
------------    -----        ---------
251,690705      1,2364E-47   ,067367056

Esta consulta procura determinar se existe uma relação significativa entre renda e sexo. O resultado mostra que o p_vlr é de 1,23, portanto existe uma relação significativa entre renda e sexo. Adicionalmente a nossa query fornece o valor do coeficiente de correlação, que no caso foi de 0,06.

 

Nenhum comentário :

Postar um comentário

Related Posts Plugin for WordPress, Blogger...