Eustatística

Pedro Garcia

PET Estatística

Boas PRÁTICAS no Curso de Estatística

Como melhorar o aproveitamento nas disciplinas ?

\[ Aprendizado = \sum (Eu,Estatística,Pratica) \]

Benefícios

  • Estimula Ideias e a Criatividade
  • Otimização de Tempo (antecipando o aprendizado, unindo estudo com o que gosta)
  • Prazer no Aprendizado
  • Estudo Ativo
  • Prática e Portfólio
  • Exposição a Problemas e Produção de Dúvidas

Exemplos de Aplicações

Estatística 1 - Coeficiente de Variação

Multivariada - Clusterização

Mostre o Código
require(jsonlite)
require(tidyverse)
require(dplyr)
require(ggplot2)
require(plotly)
require(factoextra)
require(heatmaply)
require(lubridate)

dados = fromJSON(txt = readLines(con = "c:/Users/pedro/Desktop/MODALIDADES/CS/FEM/statsFem.json",warn= FALSE))
dados = (unnest(dados,))
dados = cbind(dados,unnest(dados[,101]))

dados = dados[,c(106,(which(sapply(dados, class) == "integer" | sapply(dados, class) == "numeric")))]

dados = dados[,!(colnames(dados) %in% c('rounds_win','count','pages','offset','limit','player_id','games_count','rounds_count','kills_sum','death_sum','assists_sum','damage_sum','kd_diff_sum','id','status','country_id','team_id','discipline_id','id.1','status.1','country_id.1','team_id.1','discipline_id.1','team_id.1','discipline_id.1','id1','region_id','min_games_count',"avg_player_rating_value" ,        "avg_player_rating"))]

dt = dados
row.names(dt) = dt[,1]
dt = dt[,-1]
df <- scale(dt)
df.dist = dist(df, method = "euclidean")

df.hclust = hclust(df.dist, method = "ward.D2")

p = fviz_dend(df.hclust, k = 5,
          
          cex = .7, 
          #k_colors = c("#2E9FDF", "#c066c0", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE,
          #rect_border = c("#2E9FDF", "#cc84cc", "#E7B800", "#FC4E07"),
          rect_fill = TRUE,
          #horiz = T,
          main = "",
          type = "rectangle"
          ,ylab = "",horiz = T
          )
(p)

Mostre o Código
groups.2 = cutree(df.hclust,5)
dados <- cbind(dados, clusterg2 = groups.2)

df = dados[dados$clusterg2 >= 3,]

df.dist = dist(df, method = "euclidean")

df.hclust = hclust(df.dist, method = "ward.D2")


p = fviz_dend(df.hclust, k = 5,
          
          cex = .7, 
          #k_colors = c("#2E9FDF", "#c066c0", "#E7B800", "#FC4E07"),
          color_labels_by_k = TRUE, 
          rect = TRUE,
          #rect_border = c("#2E9FDF", "#cc84cc", "#E7B800", "#FC4E07"),
          rect_fill = TRUE,
          #horiz = T,
          main = "",
          type = "rectangle"
          ,ylab = "",horiz = T
          )
(p)

Inferência Estatística II e Bayesiana - Testes de Hipótese

Mostre o Código
require(jsonlite)
require(tidyverse)
require(dplyr)
require(ggplot2)
require(plotly)
require(factoextra)
require(heatmaply)
require(lubridate)

bigapostas = read.table(file = paste0("BIGAPOSTAS",".csv"), sep = ";",header = T,encoding = "latin1",dec = ",")
stake = 1


bigapostas = bigapostas[year(bigapostas$Date) == 2023 & month(bigapostas$Date) <= 11,]

blacklist = data.frame()
analytics = data.frame()

## Análise Vitória Mandante Reg
apostas = bigapostas[complete.cases(bigapostas[,c('critmandantereg','FT_Goals_H','FT_Goals_A','FT_Odds_H')]),]
      apostas = apostas[apostas$critmandantereg == TRUE,]
      apostas$stakes = ifelse(apostas$FT_Goals_H > apostas$FT_Goals_A,(apostas$FT_Odds_H-1)*stake,-stake)/(nrow(apostas)*stake)
      apostas$ganho = ifelse(apostas$FT_Goals_H > apostas$FT_Goals_A,(apostas$FT_Odds_H-1)*stake,-stake)
      apostas$efc = ifelse(apostas$FT_Goals_H > apostas$FT_Goals_A,1,0)

      apostas$metodo = 'critmandantereg'
      analytics = rbind(analytics,apostas)
      
      

      ## Abordagem Frequentista
      
        
        testehip = as.data.frame(apostas %>% group_by(League) %>% summarise(sucesso = sum(efc == 1),teta = max(acc_ts_wd_oddmin_otim.y), qtd = n()) %>% arrange(-qtd))
        testehip
                                 League sucesso      teta qtd
1                        Brazil Serie A      31 0.4000000  85
2                England EFL League One      25 0.5714286  54
3                  England Championship      26 0.7222222  45
4            Netherlands Eerste Divisie      19 0.6938776  44
5                Spain Segunda División      21 0.8888889  43
6                         Spain La Liga      23 0.6691176  36
7                        Brazil Serie B      15 0.7414634  31
8                 Germany 2. Bundesliga      13 0.5000000  27
9                    Poland Ekstraklasa       9 0.6785714  27
10                   Germany Bundesliga      11 0.5925926  25
11                Norway First Division      11 0.5000000  23
12             Uruguay Primera División      12 0.5000000  18
13                   Norway Eliteserien       5 0.6250000  17
14             Switzerland Super League      12 0.7142857  14
15               Netherlands Eredivisie       5 0.4920635  12
16                Bulgaria First League       6 0.5882353  11
17                    Denmark Superliga       5 0.6296296  11
18                    Portugal Liga NOS       4 0.7000000  10
19                       Romania Liga I       4 0.4666667  10
20                        Italy Serie B       1 1.0000000   7
21 Republic of Ireland Premier Division       4 0.6000000   7
22        Egypt Egyptian Premier League       0 0.6129032   6
23                      Japan J1 League       2 0.8571429   6
24         Switzerland Challenge League       1 0.5000000   6
25                  Iceland Úrvalsdeild       4 0.4807692   5
26                   Sweden Allsvenskan       3 0.6521739   5
27                     Turkey Süper Lig       4 0.6101695   5
28                     Serbia SuperLiga       2 0.7333333   4
29                      Japan J2 League       1 0.6000000   3
30                    Sweden Superettan       2 0.6428571   3
31           China Chinese Super League       0 0.6282051   1
32                       France Ligue 2       1 0.0000000   1
33                 Scotland Premiership       0 0.6111111   1
34                  Slovakia Super Liga       0 0.5000000   1

Abordagem Frequentista

Mostre o Código
        vars = testehip$teta
      
        testehip = testehip[testehip$League == 'Switzerland Challenge League',]
        
        pvalue = c(); for(i in 1:nrow(testehip)){
          pvalue[i] = binom.test(testehip$sucesso[i], testehip$qtd[i], p = testehip$teta[i], alternative = c( "less"),conf.level = 0.95)$p.value
        }
        
        
        if(length(testehip[pvalue <= 0.05,]$League) == 0){} else{
          blacklist = rbind(blacklist,data.frame(Liga = testehip[pvalue <= 0.05,]$League,Metodo = 'critwdreg',Teste = 'binom.test'))
        }
NULL
Mostre o Código
         pvalue
[1] 0.109375
Mostre o Código
         blacklist
data frame with 0 columns and 0 rows

Abordagem Bayesiana

Mostre o Código
        testehip = as.data.frame(apostas %>% group_by(League) %>% summarise(teta = max(acc_ts_wd_oddmin_otim.y)))
        
        testehip$teta = testehip$teta-0.001
        testehip$teta = ifelse(testehip$teta < 0,0.001,testehip$teta)
        
        require(rjags)
        
        vars = testehip$teta
        vlr = sum(quantile(vars,c(0.025,0.975)))/2
        
        
        testehip = testehip[testehip$League == 'Switzerland Challenge League',]
        conv = c(); li = c(); ls = c(); efc = c();
        for(it in 1:nrow(testehip)){
          
          # esse é o valor do meu desvio  
          y = as.numeric(sqrt(((vlr)*(1-vlr))/length(vars)))  
          #y = as.numeric(diff(quantile(vars,c(0.025,0.975)))/2)/3
          
          
          desvio = 1; id = 2
          while((y - desvio[id-1]) < 0){
            alpha = 2; x = testehip$teta[it]
            beta=(alpha*(1-x))/x
            mult = id; alpha = alpha*mult; beta = beta*mult
            desvio[id] = sqrt((alpha*beta) / ((alpha+beta)^2 * (alpha+beta+1))) #Desvio
            id = id+1
          }
          
          
          alpha = 2; x = testehip$teta[it]
          beta=(alpha*(1-x))/x
          mult = id; alpha = alpha*mult; beta = beta*mult
          sqrt((alpha*beta) / ((alpha+beta)^2 * (alpha+beta+1)))
          
          
          dados=list(y=apostas[apostas$League == testehip$League[it],]$efc,n=length(apostas[apostas$League == testehip$League[it],]$efc))
          
          
          i=list(p=testehip$teta[it])
          
          modelstring = paste0("\n  model {\n    for (i in 1:n) {\n      y[i]~dbern(p)\n      }\n    p~dbeta(",as.character(alpha),",",as.character(beta),") \n  }\n")
          
          modelo=jags.model(textConnection(modelstring),data=dados,inits=i,quiet=TRUE)
          update(modelo,n.iter=1000,progress.bar = "none")
          output=coda.samples(model=modelo,variable.names="p",n.iter=100000, thin=10)
          
          
          conv[it] = geweke.diag(as.matrix(mcmc.list(output)))$z
          
          
          efc[it] = mean(dados$y)
          
          li[it] = HPDinterval(mcmc(as.matrix(mcmc.list(output))),prob = c(0.95))[1]
          ls[it] = HPDinterval(mcmc(as.matrix(mcmc.list(output))),prob = c(0.95))[2]
        
        }
        
        cat('\n','Quantis 95% Teta : ',quantile(vars,c(0.025,0.975)),'\n',
            'Desvio Padrão Obtido : ',y,'\n',
            'Alpha e Beta para construção da Distribuição : ',alpha,';',beta,'\n',
            'IC[95%] (bayesiano) : [',li,';',ls,']','\n',
            'Teta : ',efc)

 Quantis 95% Teta :  0.32935 0.9073333 
 Desvio Padrão Obtido :  0.08331288 
 Alpha e Beta para construção da Distribuição :  20 ; 20.08016 
 IC[95%] (bayesiano) : [ 0.3100897 ; 0.5907257 ] 
 Teta :  0.1666667
Mostre o Código
        #quem não convergiu
        #testehip[abs(conv) > 1.96,]

        #quem o teste foi rejeitado
        #testehip[((efc < li) == TRUE),]
        
        if(length(testehip[((efc < li) == TRUE),]$League) == 0){} else{
          blacklist = rbind(blacklist,data.frame(Liga = testehip[((efc < li) == TRUE),]$League,Metodo = 'critwdreg',Teste = 'bayesiano'))
        }

        blacklist  
                          Liga    Metodo     Teste
1 Switzerland Challenge League critwdreg bayesiano