dados = read_csv(
    here::here("data/participation-per-country.csv"),
    col_types = cols(
        .default = col_double(),
        site = col_character(),
        country = col_character(),
        geo = col_character(),
        four_regions = col_character(),
        eight_regions = col_character(),
        six_regions = col_character(),
        `World bank income group 2017` = col_character()
    )
)  %>% 
    filter(usuarios > 200) 

glimpse(dados)
## Rows: 121
## Columns: 21
## $ site                           <chr> "StackOverflow", "StackOverflow", "Stac~
## $ country                        <chr> "Argentina", "Australia", "Austria", "B~
## $ PDI                            <dbl> 49, 36, 11, 80, 65, 69, 70, 39, 63, 80,~
## $ IDV                            <dbl> 46, 90, 55, 20, 75, 38, 30, 80, 23, 20,~
## $ MAS                            <dbl> 56, 61, 79, 55, 54, 49, 40, 52, 28, 66,~
## $ UAI                            <dbl> 86, 51, 70, 60, 94, 76, 85, 48, 86, 30,~
## $ usuarios                       <dbl> 2798, 12313, 2518, 2558, 4275, 10717, 1~
## $ responderam_prop               <dbl> 0.5357398, 0.6133355, 0.6310564, 0.3928~
## $ perguntaram_prop               <dbl> 0.5210865, 0.5897832, 0.5933280, 0.4757~
## $ editaram_prop                  <dbl> 0.09256612, 0.14699911, 0.14932486, 0.0~
## $ comentaram_prop                <dbl> 0.25339528, 0.33395598, 0.35027800, 0.1~
## $ GNI                            <dbl> NA, 59570, 48160, 840, 44990, 11630, 68~
## $ Internet                       <dbl> 51.0, 79.5, 79.8, 5.0, 78.0, 45.0, 51.0~
## $ EPI                            <dbl> 59.02, NA, 63.21, NA, 61.21, 49.96, NA,~
## $ geo                            <chr> "arg", "aus", "aut", "bgd", "bel", "bra~
## $ four_regions                   <chr> "americas", "asia", "europe", "asia", "~
## $ eight_regions                  <chr> "america_south", "east_asia_pacific", "~
## $ six_regions                    <chr> "america", "east_asia_pacific", "europe~
## $ Latitude                       <dbl> -34.00000, -25.00000, 47.33333, 24.0000~
## $ Longitude                      <dbl> -64.00000, 135.00000, 13.33333, 90.0000~
## $ `World bank income group 2017` <chr> "Upper middle income", "High income", "~

Daqui para baixo são as respostas dos Exercícios

1. Descreva a relação entre EPI (fluência de inglês na população do país) e a taxa de pessoas daquele país que responderam alguma pergunta no StackOverflow.

dados_stack = dados %>% 
    filter(site == "StackOverflow") %>%
    filter(!is.na(EPI))  %>%
    filter(!is.na(responderam_prop))
    
dados_stack %>% 
    ggplot(aes(x= EPI, y = responderam_prop)) + 
    geom_point() +
    geom_smooth(method="lm")
## `geom_smooth()` using formula 'y ~ x'

cor(dados_stack$EPI, dados_stack$responderam_prop)
## [1] 0.6345309

Existe uma correlação média de 0,63 entre EPI e respoderam para o Stack nessa amostra.

regressao_stack = lm(dados_stack$responderam_prop~dados_stack$EPI)
regressao_stack
## 
## Call:
## lm(formula = dados_stack$responderam_prop ~ dados_stack$EPI)
## 
## Coefficients:
##     (Intercept)  dados_stack$EPI  
##        0.108082         0.007335
summary(regressao_stack)
## 
## Call:
## lm(formula = dados_stack$responderam_prop ~ dados_stack$EPI)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.181903 -0.008037  0.013796  0.037407  0.099443 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     0.108082   0.071716   1.507    0.138    
## dados_stack$EPI 0.007335   0.001303   5.628 9.78e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06502 on 47 degrees of freedom
## Multiple R-squared:  0.4026, Adjusted R-squared:  0.3899 
## F-statistic: 31.68 on 1 and 47 DF,  p-value: 9.785e-07

responderam = 0,10 + 0,007 x epi

A cada uma unidade que cresce a fluencia em ingles do país as respostas crescem em 0,7% em média com 1% se significância para o stack overflow

2. Descreva a relação entre as mesmas duas variáveis no SuperUser e compare o comportamento das pessoas de diferentes países nos dois sites comparando os resultados dos dois modelos.

2.1. Descreva a relação entre as mesmas duas variáveis no SuperUser

dados_super_user = dados %>% filter(site == "SuperUser")

dados_super_user = dados_super_user %>% filter(!is.na(EPI)) %>% filter(!is.na(responderam_prop))

dados_super_user %>% 
    ggplot(aes(x= EPI, y = responderam_prop)) + 
    geom_point() +
    geom_smooth(method = "lm")
## `geom_smooth()` using formula 'y ~ x'

cor(dados_super_user$EPI, dados_super_user$responderam_prop)
## [1] 0.6482049

Existe uma correlação media de 0.64 entre o EPI e as pessoas que responderam para o site Super User

regressao_super_user = lm(dados_super_user$responderam_prop~dados_super_user$EPI)
summary(regressao_super_user)
## 
## Call:
## lm(formula = dados_super_user$responderam_prop ~ dados_super_user$EPI)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.075052 -0.026155 -0.004809  0.029849  0.071932 
## 
## Coefficients:
##                        Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          -0.0236147  0.0538137  -0.439    0.664    
## dados_super_user$EPI  0.0047522  0.0009574   4.964 1.91e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03971 on 34 degrees of freedom
## Multiple R-squared:  0.4202, Adjusted R-squared:  0.4031 
## F-statistic: 24.64 on 1 and 34 DF,  p-value: 1.914e-05

responderam_super = 0,023 + 0,004 x EPI

Para cara unidade que cresce a fluencia em ingles do país no site super user cresce em media 0,4% da quantidade de pessoas que responderam para o site Super User

2.2 Compare o comportamento das pessoas de diferentes países nos dois sites comparando os resultados dos dois modelos.

Para o StackOverflow o impacto foi de 0,7% com desvio padrão de e para o SuperUser o impacto foi de 0,4%, ambos com 1% de significância

Teste de média da média do EPI

t.test(dados_super_user$EPI, dados_stack$EPI)
## 
##  Welch Two Sample t-test
## 
## data:  dados_super_user$EPI and dados_stack$EPI
## t = 0.7827, df = 76.694, p-value = 0.4362
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1.881590  4.318506
## sample estimates:
## mean of x mean of y 
##  55.78111  54.56265

Em média não existem evidências de diferença na média do EPI entre os usuários do stackOverflow e do SuperUser, conforme o Teste T

s <- function(d, i) {
    sumarizado = d %>% 
        slice(i) %>% 
        summarise(media_epi = mean(EPI))
    
    sumarizado %>% 
      pull(media_epi)
}

s(dados_super_user, 1:(nrow(dados_super_user))) # theta_chapeu
## [1] 55.78111
booted <- boot(data = dados_super_user, 
               statistic = s, 
               R = 2000)

ci_super_user = tidy(booted, 
              conf.level = .95,
              conf.method = "basic",
              conf.int = TRUE)

ci_super_user
## # A tibble: 1 x 5
##   statistic   bias std.error conf.low conf.high
##       <dbl>  <dbl>     <dbl>    <dbl>     <dbl>
## 1      55.8 0.0122      1.16     53.5      58.0
s <- function(d, i) {
    sumarizado = d %>% 
        slice(i) %>% 
        summarise(media_epi = mean(EPI))
    
    sumarizado %>% 
      pull(media_epi)
}

s(dados_stack, 1:(nrow(dados_stack))) # theta_chapeu
## [1] 54.56265
booted <- boot(data = dados_stack, 
               statistic = s, 
               R = 2000)

ci_stack = tidy(booted, 
              conf.level = .95,
              conf.method = "basic",
              conf.int = TRUE)

ci_stack
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1      54.6 -0.0494      1.04     52.5      56.7
plot_ics = function(d) {
    d %>%
        ggplot(aes(
            ymin = low,
            y = mid,
            ymax = high,
            x = metodo
        )) +
        geom_linerange() +
        geom_point(color = "coral", size = 3) +
        scale_y_continuous(limits = c(50, 60)) +
        labs(x = "", y = "Média do EPI") +
        coord_flip()
}
tribble(
    ~metodo, ~low, ~mid, ~high, 
    "StackOverflow", 52.63, 54.56, 56.54, 
    "SuperUser", 53.54, 55.78, 57.89) %>% 
    plot_ics()

Analisando o intervalo de confiança em média não existe diferença entre o EPI do site do Super e do Stack.

Analisando o IC da correlação

theta_math <- function(d, i) {
    r = d %>% 
        slice(i) %>% 
        summarise(r = cor(responderam_prop, EPI, method = "pearson")) %>%
        pull(r)
    r
}

ci_stack = boot(data = dados_stack,
           statistic = theta_math,
           R = 2000) %>%
           tidy(conf.level = .95,
                 conf.method = "bca",
                 conf.int = TRUE)
ci_stack
## # A tibble: 1 x 5
##   statistic    bias std.error conf.low conf.high
##       <dbl>   <dbl>     <dbl>    <dbl>     <dbl>
## 1     0.635 0.00258    0.0693    0.472     0.751
ci_stack %>% 
  ggplot(aes(
            ymin = conf.low,
            y = statistic,
            ymax = conf.high,
            x = "Corr. Pearson"
        )) +
        geom_linerange() +
        geom_point(color = "coral", size = 2) +
        scale_y_continuous(limits = c(0, 1)) +
        labs(x = "", y = "Correlação Stack EPI Responderam") +
        coord_flip()

theta_math <- function(d, i) {
    r = d %>% 
        slice(i) %>% 
        summarise(r = cor(responderam_prop, EPI, method = "pearson")) %>%
        pull(r)
    r
}

ci_super = boot(data = dados_super_user,
           statistic = theta_math,
           R = 2000) %>%
           tidy(conf.level = .95,
                 conf.method = "bca",
                 conf.int = TRUE)
ci_super
## # A tibble: 1 x 5
##   statistic     bias std.error conf.low conf.high
##       <dbl>    <dbl>     <dbl>    <dbl>     <dbl>
## 1     0.648 0.000635    0.0689    0.487     0.760
ci_super %>% 
  ggplot(aes(
            ymin = conf.low,
            y = statistic,
            ymax = conf.high,
            x = "Corr. Pearson"
        )) +
        geom_linerange() +
        geom_point(color = "coral", size = 2) +
        scale_y_continuous(limits = c(0, 1)) +
        labs(x = "", y = "Correlação Stack EPI Responderam") +
        coord_flip()

plot_ics = function(d) {
    d %>%
        ggplot(aes(
            ymin = low,
            y = mid,
            ymax = high,
            x = metodo
        )) +
        geom_linerange() +
        geom_point(color = "coral", size = 3) +
        scale_y_continuous(limits = c(0, 1)) +
        labs(x = "", y = "IC da Correlação") +
        coord_flip()
}

tribble(
    ~metodo, ~low, ~mid, ~high, 
    "Super Cor EPI Respon", 0.46, 0.63, 0.74, 
    "Stack Cor EPI Respon", 0.49, 0.64, 0.76) %>% 
    plot_ics()

Não há diferença entre as correlações deo EPI com o Super e o stack

3. Descreva a relação entre GNI (produto interno bruto per cápita) dos países e a taxa de pessoas daquele país que responderam alguma pergunta no StackOverflow.

dados_stack = dados %>% 
    filter(site == "StackOverflow") %>%
    filter(!is.na(GNI))  %>%
    filter(!is.na(responderam_prop))

dados_stack %>% 
    ggplot(aes(x=GNI, y=responderam_prop)) + 
    geom_point() + 
    geom_smooth()
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

cor(dados_stack$GNI, dados_stack$responderam_prop)
## [1] 0.5857416

Existe uma correlação média de 0,58 entre GNI e os que responderam

dados_stack = dados_stack %>% 
    select(GNI, responderam_prop) %>%
    mutate(log10_GNI =  log10(GNI))

dados_stack %>% 
    ggplot(aes(x=log10_GNI, y=responderam_prop)) + 
    geom_point() +
    geom_smooth(method="lm")
## `geom_smooth()` using formula 'y ~ x'

cor(dados_stack$log10_GNI, dados_stack$responderam_prop)
## [1] 0.6803346

Existe uma correlação média de 0,68 do log de GNI com a quantidade de pessoas que responderam

regressao_GNI_stack = lm(dados_stack$responderam_prop~dados_stack$log10_GNI)
summary(regressao_GNI_stack)
## 
## Call:
## lm(formula = dados_stack$responderam_prop ~ dados_stack$log10_GNI)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.224533 -0.032858  0.007685  0.044357  0.118479 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            0.04747    0.06388   0.743     0.46    
## dados_stack$log10_GNI  0.11401    0.01535   7.426 3.31e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.06233 on 64 degrees of freedom
## Multiple R-squared:  0.4629, Adjusted R-squared:  0.4545 
## F-statistic: 55.15 on 1 and 64 DF,  p-value: 3.311e-10

responderam = 0,04 + 0,11 x log10_GNI

Para cada uma unidade do log na base 10 do produto interno bruto que é aumentado em 11% a participcão dos respondentes aumentam em média.