## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.1 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Attaching package: 'modelr'
##
##
## The following object is masked from 'package:broom':
##
## bootstrap
##
##
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
A CAPES é um órgão do MEC que tem a atribuição de acompanhar a pós-graduação na universidade brasileira. Uma das formas que ela encontrou de fazer isso e pela qual ela é bastante criticada é através de uma avaliação quantitativa a cada x anos (era 3, mudou para 4).
Usaremos dados da penúltima avaliação da CAPES:
cacc_tudo = read_projectdata()
glimpse(cacc_tudo)
## Rows: 73
## Columns: 31
## $ Instituição <chr> "UNIVERSIDADE FEDERAL DO AMAZONAS", "UNIV…
## $ Programa <chr> "INFORMÁTICA (12001015012P2)", "CIÊNCIA D…
## $ Nível <int> 5, 4, 3, 3, 3, 5, 4, 3, 3, 3, 5, 3, 3, 3,…
## $ Sigla <chr> "UFAM", "UFPA", "UFMA", "UEMA", "FUFPI", …
## $ `Tem doutorado` <chr> "Sim", "Sim", "Não", "Não", "Não", "Sim",…
## $ `Docentes colaboradores` <dbl> 0.25, 5.50, 3.00, 6.25, 1.75, 2.00, 1.00,…
## $ `Docentes permanentes` <dbl> 24.75, 14.00, 10.00, 14.00, 9.50, 20.75, …
## $ `Docentes visitantes` <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.75, 0.50,…
## $ `Resumos em conf` <int> 20, 23, 15, 5, 4, 10, 6, 136, 0, 24, 27, …
## $ `Resumos expandidos em conf` <int> 25, 24, 7, 10, 1, 68, 9, 13, 4, 6, 16, 5,…
## $ `Artigos em conf` <int> 390, 284, 115, 73, 150, 269, 179, 0, 120,…
## $ Dissertacoes <int> 108, 77, 50, 25, 31, 75, 60, 129, 45, 3, …
## $ Teses <int> 14, 0, 0, 0, 0, 24, 5, 0, 0, 0, 29, 0, 0,…
## $ periodicos_A1 <int> 15, 19, 5, 1, 7, 21, 21, 0, 3, 8, 44, 0, …
## $ periodicos_A2 <int> 19, 21, 11, 1, 4, 32, 13, 0, 9, 2, 23, 2,…
## $ periodicos_B1 <int> 19, 38, 7, 3, 6, 26, 16, 2, 6, 4, 32, 4, …
## $ periodicos_B2 <int> 1, 12, 2, 6, 0, 0, 11, 0, 0, 2, 1, 0, 0, …
## $ periodicos_B3 <int> 3, 16, 2, 2, 3, 16, 15, 0, 4, 6, 9, 0, 2,…
## $ periodicos_B4 <int> 0, 4, 0, 3, 3, 0, 1, 3, 1, 6, 0, 0, 4, 5,…
## $ periodicos_B5 <int> 10, 16, 8, 4, 12, 4, 16, 2, 6, 2, 11, 0, …
## $ periodicos_C <int> 9, 34, 12, 5, 2, 3, 11, 9, 5, 10, 16, 1, …
## $ periodicos_NA <int> 7, 15, 8, 11, 12, 6, 19, 31, 7, 14, 19, 0…
## $ per_comaluno_A1 <int> 4, 1, 0, 0, 1, 7, 5, 0, 1, 0, 10, 0, 0, 2…
## $ per_comaluno_A2 <int> 5, 5, 5, 0, 2, 15, 3, 0, 3, 0, 3, 0, 0, 1…
## $ per_comaluno_B1 <int> 4, 2, 5, 2, 2, 14, 6, 0, 2, 0, 17, 0, 1, …
## $ per_comaluno_B2 <int> 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,…
## $ per_comaluno_B3 <int> 2, 2, 0, 1, 0, 7, 9, 0, 2, 0, 4, 0, 0, 1,…
## $ per_comaluno_B4 <int> 0, 0, 0, 0, 2, 0, 1, 0, 1, 3, 0, 0, 2, 0,…
## $ per_comaluno_B5 <int> 5, 0, 4, 0, 8, 3, 6, 0, 4, 0, 4, 0, 2, 5,…
## $ per_comaluno_C <int> 6, 5, 3, 1, 2, 3, 7, 1, 2, 4, 8, 0, 11, 3…
## $ per_comaluno_NA <int> 6, 14, 2, 2, 9, 3, 6, 4, 5, 1, 10, 0, 17,…
Uma das maneiras de avaliar a produção dos docentes que a CAPES utiliza é quantificando a produção de artigos pelos docentes. Os artigos são categorizados em extratos ordenados (A1 é o mais alto), e separados entre artigos em conferências e periódicos. Usaremos para esse lab a produção em periódicos avaliados com A1, A2 e B1.
cacc = cacc_tudo %>%
transmute(
docentes = `Docentes permanentes`,
producao = (periodicos_A1 + periodicos_A2 + periodicos_B1),
produtividade = producao / docentes,
mestrandos = Dissertacoes,
doutorandos = Teses,
tem_doutorado = tolower(`Tem doutorado`) == "sim",
mestrandos_pprof = mestrandos / docentes,
doutorandos_pprof = doutorandos / docentes
)
cacc_md = cacc %>%
filter(tem_doutorado)
skimr::skim(cacc)
| Name | cacc |
| Number of rows | 73 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| logical | 1 |
| numeric | 7 |
| ________________________ | |
| Group variables | None |
Variable type: logical
| skim_variable | n_missing | complete_rate | mean | count |
|---|---|---|---|---|
| tem_doutorado | 0 | 1 | 0.47 | FAL: 39, TRU: 34 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| docentes | 0 | 1 | 20.63 | 12.27 | 8.25 | 11.25 | 16.75 | 25.75 | 67.25 | ▇▃▁▁▁ |
| producao | 0 | 1 | 58.03 | 65.44 | 0.00 | 18.00 | 42.00 | 67.00 | 355.00 | ▇▂▁▁▁ |
| produtividade | 0 | 1 | 2.36 | 1.37 | 0.00 | 1.40 | 2.27 | 3.20 | 5.66 | ▆▇▇▅▂ |
| mestrandos | 0 | 1 | 75.79 | 63.23 | 0.00 | 39.00 | 58.00 | 103.00 | 433.00 | ▇▃▁▁▁ |
| doutorandos | 0 | 1 | 14.96 | 30.98 | 0.00 | 0.00 | 0.00 | 14.00 | 152.00 | ▇▁▁▁▁ |
| mestrandos_pprof | 0 | 1 | 3.66 | 1.81 | 0.00 | 2.57 | 3.58 | 4.88 | 8.19 | ▂▇▇▃▂ |
| doutorandos_pprof | 0 | 1 | 0.43 | 0.73 | 0.00 | 0.00 | 0.00 | 0.57 | 2.69 | ▇▁▁▁▁ |
cacc %>%
ggplot(aes(x = docentes)) +
geom_histogram(bins = 15, fill = paleta[1])
cacc %>%
ggplot(aes(x = producao)) +
geom_histogram(bins = 15, fill = paleta[2])
cacc %>%
ggplot(aes(x = produtividade)) +
geom_histogram(bins = 15, fill = paleta[3])
Se quisermos modelar o efeito do tamanho do programa em termos de docentes (permanentes) na quantidade de artigos publicados, podemos usar regressão.
Importante: sempre queremos ver os dados antes de fazermos qualquer modelo ou sumário:
cacc %>%
ggplot(aes(x = docentes, y = producao)) +
geom_point()
Parece que existe uma relação. Vamos criar um modelo então:
modelo1 = lm(producao ~ docentes, data = cacc)
tidy(modelo1, conf.int = TRUE, conf.level = 0.95)
glance(modelo1)
Para visualizar o modelo:
cacc_augmented = cacc %>%
add_predictions(modelo1)
cacc_augmented %>%
ggplot(aes(x = docentes)) +
geom_line(aes(y = pred), colour = "brown") +
geom_point(aes(y = producao)) +
labs(y = "Produção do programa")
Se considerarmos que temos apenas uma amostra de todos os programas de pós em CC no Brasil, o que podemos inferir a partir desse modelo sobre a relação entre número de docentes permanentes e produção de artigos em programas de pós?
Normalmente reportaríamos o resultado da seguinte maneira, substituindo VarIndepX e todos os x’s e y’s pelos nomes e valores de fato:
Regressão múltipla foi utilizada para analisar se VarIndep1 e VarIndep2 tem uma associação significativa com VarDep. Os resultados da regressão indicam que um modelo com os 2 preditores no formato VarDep = XXX.VarIndep1 + YYY.VarIndep2 explicam XX,XX% da variância da variável de resposta (R2 = XX,XX). VarIndep1, medida como/em [unidade ou o que é o 0 e o que é 1] tem uma relação significativa com o erro (b = [yy,yy; zz,zz], IC com 95%), assim como VarIndep2 medida como [unidade ou o que é o 0 e o que é 1] (b = [yy,yy; zz,zz], IC com 95%). O aumento de 1 unidade de VarIndep1 produz uma mudança de xxx em VarDep, enquanto um aumento…
Produza aqui a sua versão desse texto, portanto:
Regressão simples foi utilizada para analisar se número de docentes tem uma associação significativa com produção. Os resultados da regressão indicam que um modelo com o preditor no formato produção = -41.27 + 4.81*docentes explicam 81,46% da variância da variável de resposta (R2 = 0,8146). Número de docentes, medida em unidade, tem uma relação significativa com o erro (b = [4.27; 5.36], IC com 95%). O aumento de 1 unidade de número de docentes produz uma mudança de 4,81x em produção.
Dito isso, o que significa a relação que você encontrou na prática para entendermos os programas de pós graduação no Brasil? E algum palpite de por que a relação que encontramos é forte?
A relação mostra que quanto maior o número de docentes por PPG, maior é a produção de artigos publicados. Faz sentido essa relação ser forte, pois quanto maior o número de docentes, maior será o número de mestrandos e/ou doutorandos produzindo pesquisa e, consequentemente, produzindo mais artigos.
modelo2 = lm(producao ~ docentes + mestrandos_pprof + doutorandos_pprof + tem_doutorado,
data = cacc_md)
tidy(modelo2, conf.int = TRUE, conf.level = 0.95)
glance(modelo2)
E se considerarmos também o número de alunos?
modelo2 = lm(producao ~ docentes + mestrandos + doutorandos, data = cacc)
tidy(modelo2, conf.int = TRUE, conf.level = 0.95)
glance(modelo2)
Visualizar o modelo com muitas variáveis independentes fica mais difícil
para_plotar_modelo = cacc %>%
data_grid(producao = seq_range(producao, 10), # Crie um vetor de 10 valores no range
docentes = seq_range(docentes, 4),
# mestrandos = seq_range(mestrandos, 3),
mestrandos = median(mestrandos),
doutorandos = seq_range(doutorandos, 3)) %>%
add_predictions(modelo2)
glimpse(para_plotar_modelo)
## Rows: 120
## Columns: 5
## $ producao <dbl> 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00…
## $ docentes <dbl> 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27.91667, 4…
## $ mestrandos <int> 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58…
## $ doutorandos <dbl> 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152…
## $ pred <dbl> 3.199123, 79.257725, 155.316327, 72.026777, 148.085378, 22…
para_plotar_modelo %>%
ggplot(aes(x = docentes, y = pred)) +
geom_line(aes(group = doutorandos, colour = doutorandos)) +
geom_point(data = cacc, aes(y = producao, colour = doutorandos))
Considerando agora esses três fatores, o que podemos dizer sobre como cada um deles se relaciona com a produção de um programa de pós em CC? E sobre o modelo? Ele explica mais que o modelo 1?
Regressão múltipla foi utilizada para analisar se docentes, mestrandos_pprof e doutorandos_pprof tem uma associação significativa com produção. Os resultados da regressão indicam que um modelo com os 3 preditores no formato produção = -39.47 + 4.9 * docentes +0.03 * mestrandos_pprof + 16.11 * doutorandos explicam 81,62% da variância da variável de resposta (R2 = 0,8162). Docentes, medida em unidade, tem uma relação significativa com o erro (b = [3.29; 5.49], IC com 95%), assim como mestrandos_pprof, medida em unidade, (b = [-7.09; +7.15], IC com 95%) e doutorandos_pprof, medida em unidade, (b = [-1.87; 34.08], IC com 95%). O aumento de 1 unidade de docentes produz uma mudança de 3,5x em produção, enquanto um aumento de 1 unidade de mestrandos_pprof provoca uma redução de 0,2x em produção e, por fim, um aumento de 1 unidade de doutorandos_pprof produz um aumento de 1x em produção.
Regressão múltipla foi utilizada para analisar se docentes, mestrandos e doutorandos tem uma associação significativa com produção. Os resultados da regressão indicam que um modelo com os 3 preditores no formato produção = -14.37 + 3.5 * docentes -0.2 * mestrandos +1 * doutorandos explicam 87,10% da variância da variável de resposta (R2 = 0,871). Docentes, medida em unidade, tem uma relação significativa com o erro (b = [2.58; 4.42], IC com 95%), assim como mestrandos, medida em unidade, (b = [-0.36; -0.03], IC com 95%) e doutorandos, medida em unidade, (b = [0.63; 1.37], IC com 95%). O aumento de 1 unidade de docentes produz uma mudança de 3,5x em produção, enquanto um aumento de 1 unidade de mestrandos provoca uma redução de 0,2x em produção e, por fim, um aumento de 1 unidade de doutorandos produz um aumento de 1x em produção.
O modelo produção ~ docentes + mestrandos + doutorandos explica mais a variável produção que os outros modelos (87,10% vs 81,62% e 81,46%). Interpretand o modelo, um aumento no número de docentes e de doutorandos impacta diretamente em um número maior de publicações, enquanto que mais mestrandos impacta negativamente no número de publicações. Isso pode ser explicado pelo fato que doutorandos, por terem mais tempo, publicam mais.
Diferente de medirmos produção (total produzido), é medirmos produtividade (produzido / utilizado). Abaixo focaremos nessa análise. Para isso crie um modelo que investiga como um conjunto de fatores que você julga que são relevantes se relacionam com a produtividade dos programas. Crie um modelo que avalie como pelo menos 3 fatores se relacionam com a produtividade de um programa. Pode reutilizar fatores que já definimos e analizamos para produção. Mas cuidado para não incluir fatores que sejam função linear de outros já incluídos (ex: incluir A, B e um tercero C=A+B)
Produza abaixo o modelo e um texto que comente (i) o modelo, tal como os que fizemos antes, e (ii) as implicações - o que aprendemos sobre como funcionam programas de pós no brasil?.
Primeiro, a variável tem_doutorando é transformada de booleana para binária (0 se falso ou 1 se verdadeiro). Depois, consideramos o conjunto inicial de variáveis possíveis para o modelo como: tem_doutorando, doutorandos, mestrandos, doutorandos_pprof e mestrandos_pprof. Como produção e docentes são usadas para definir a produtividade, elas não são elegíveis para o modelo.
# Converte tem_doutorando para uma variável binária
cacc = cacc %>%
mutate(tem_doutorado = as.numeric(tem_doutorado))
# Possíveis variáveis para o modelo
cacc_reduced = cacc %>%
select(tem_doutorado, doutorandos, mestrandos, doutorandos_pprof, mestrandos_pprof)
Para definirmos um conjunto de variáveis para o modelo, primeiro podemos verificar a correlação entre as variáveis do conjunto inicial. Considerando a correlação de Spearman, pois os dados não seguem uma distribuição normal.
ggpairs(cacc_reduced, upper = list(continuous = wrap("cor", method = "spearman")))
#### Modelo
Considerando as correlações acima e após vários testes, o melhor modelo é produtividade ~ tem_doutorado + mestrandos + doutorandos. A variável tem_doutorando apesar de ter uma correlação alta com doutorandos, adicinou mais 15% de explicação no modelo (35,61% vs 51,5%).
modelo3 = lm(produtividade ~ tem_doutorado + mestrandos + doutorandos, data = cacc)
tidy(modelo3, conf.int = TRUE, conf.level = 0.95)
glance(modelo3)
Regressão múltipla foi utilizada para analisar se tem_doutorando, mestrandos e doutorandos tem uma associação significativa com produtividade. Os resultados da regressão indicam que um modelo com os 3 preditores no formato produtividade = 1.67 + 1.29 * tem_doutorando - 0,002 * mestrandos + 0,02 * doutorandos explicam 51,50% da variância da variável de resposta (R2 = 0,515). Tem_doutorando (binária, onde 0 é falso e 1 é verdadeiro), tem uma relação significativa com o erro (b = [0.74; 1.81], IC com 95%), assim como mestrandos, medida em unidade, (b = [-0.008; +0.003], IC com 95%) e doutorandos, medida em unidade, (b = [0.006; 0,03], IC com 95%). O aumento de 1 unidade de tem_doutorando produz uma mudança de 1,29x em produtividade, enquanto um aumento de 1 unidade de mestrandos provoca uma redução de 0,002x em produtividade e, por fim, um aumento de 1 unidade de doutorandos produz um aumento de 0,02x em produtividade.
Assim como no modelo de regressão múltipla pra produção, a produtividade é diretamente proporcional ao número de doutorandos e inversamente proporcional ao número de mestrandos (embora por valores bem pequenos).