## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── 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
##
## Anexando pacote: 'modelr'
##
##
## O seguinte objeto é mascarado por 'package:broom':
##
## bootstrap
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,
mestrados = Dissertacoes,
doutorados = Teses,
tem_doutorado = tolower(`Tem doutorado`) == "sim",
mestrados_pprof = mestrados / docentes,
doutorados_pprof = doutorados / 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 | ▆▇▇▅▂ |
| mestrados | 0 | 1 | 75.79 | 63.23 | 0.00 | 39.00 | 58.00 | 103.00 | 433.00 | ▇▃▁▁▁ |
| doutorados | 0 | 1 | 14.96 | 30.98 | 0.00 | 0.00 | 0.00 | 14.00 | 152.00 | ▇▁▁▁▁ |
| mestrados_pprof | 0 | 1 | 3.66 | 1.81 | 0.00 | 2.57 | 3.58 | 4.88 | 8.19 | ▂▇▇▃▂ |
| doutorados_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:
Usei uma regressão linear simples para ver se o número de docentes permanentes está associado à produção de artigos (A1+A2+B1) do programa. O modelo producao = -41,27 + 4,81.docentes explica 81,5% da variação na produção (R² = 0,815). O efeito de docentes é significativo (b = [4,27; 5,36], IC de 95%): a cada docente permanente a mais, a produção do programa sobe em média 4,81 artigos no triênio avaliado.
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?
Isso mostra que programas maiores publicam mais artigos no total — o
que faz sentido, já que mais docentes significa mais gente pesquisando e
orientando. Acho que a relação é forte porque producao é
uma soma: cada docente contribui com uma quantidade parecida de artigos,
e a própria CAPES cobra produção por docente, então os programas tendem
a manter esse ritmo. Isso não diz, porém, se os docentes de programas
maiores publicam mais individualmente — é essa pergunta que motiva olhar
para produtividade mais à frente.
modelo2 = lm(producao ~ docentes + mestrados_pprof + doutorados_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 + mestrados + doutorados, 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),
# mestrados = seq_range(mestrados, 3),
mestrados = median(mestrados),
doutorados = seq_range(doutorados, 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.000…
## $ docentes <dbl> 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27.91667, 47…
## $ mestrados <int> 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,…
## $ doutorados <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, 224…
para_plotar_modelo %>%
ggplot(aes(x = docentes, y = pred)) +
geom_line(aes(group = doutorados, colour = doutorados)) +
geom_point(data = cacc, aes(y = producao, colour = doutorados))
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?
EXPLICAÇÃO:
No primeiro modelo
(docentes + mestrados_pprof + doutorados_pprof + tem_doutorado,
só programas com doutorado), tem_doutorado não varia dentro
desse grupo — todo mundo ali já tem doutorado — então esse coeficiente
não faz sentido. Dos outros três, só docentes (b = 4,39,
IC95% [3,29; 5,49]) tem relação clara com a produção.
mestrados_pprof não é significativo, e
doutorados_pprof (b = 16,11, IC95% [-1,87; 34,08]) fica no
limite (p = 0,077) — pode haver um efeito positivo de orientar mais
doutorandos, mas com pouca certeza, já que são só 34 programas.
O segundo modelo (docentes + mestrados + doutorados, com
os 73 programas) explica mais: producao = -14,37 + 3,50.docentes -
0,20.mestrados + 1,00.doutorados, com R² = 0,871 (contra 0,815 do modelo
1). docentes e doutorados têm efeito positivo
e significativo: cada docente soma cerca de 3,5 artigos, e cada tese
soma cerca de 1 artigo, no triênio. Já mestrados tem efeito
negativo (b = [-0,36; -0,03]): mais dissertações, controlando pelo
resto, está ligado a menos produção — talvez porque orientar
mestrando toma tempo do docente sem virar artigo de periódico com a
mesma frequência (às vezes vira artigo de conferência em vez disso).
Resumindo: sim, esse modelo explica mais que o modelo 1, e mostra que
“ter mais alunos” só ajuda a produção quando são alunos de
doutorado.
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?.
Escolhi três fatores para explicar produtividade:
docentes (tamanho do programa), tem_doutorado
(se o programa tem doutorado) e mestrados_pprof
(dissertações por docente). Nenhum dos três é combinação dos outros dois
— diferente de juntar producao, docentes e
produtividade, já que produtividade é só
producao dividida por docentes.
Só parte dos programas tem doutorado, e nesses casos
doutorados_pprof é sempre zero. Se eu usasse
doutorados_pprof para comparar todos os programas, esses
zeros esconderiam o efeito de ter ou não doutorado. Por isso usei
tem_doutorado no modelo com todos os programas, e deixei
doutorados_pprof para uma segunda análise, só com quem já
tem doutorado — onde esse valor realmente varia.
cacc %>%
ggplot(aes(x = tem_doutorado, y = produtividade)) +
geom_boxplot(fill = paleta[4])
cacc %>%
ggplot(aes(x = docentes, y = produtividade, colour = tem_doutorado)) +
geom_point()
cacc %>%
ggplot(aes(x = mestrados_pprof, y = produtividade, colour = tem_doutorado)) +
geom_point()
Programas com doutorado parecem bem mais produtivos por docente. O
tamanho do programa também parece ajudar, mas de forma mais fraca e
menos clara. mestrados_pprof não mostra nenhum padrão
visível com produtividade.
modelo3 = lm(produtividade ~ docentes + tem_doutorado + mestrados_pprof, data = cacc)
tidy(modelo3, conf.int = TRUE, conf.level = 0.95)
glance(modelo3)
para_plotar_modelo3 = cacc %>%
data_grid(docentes = seq_range(docentes, 10),
tem_doutorado,
mestrados_pprof = median(mestrados_pprof)) %>%
add_predictions(modelo3)
para_plotar_modelo3 %>%
ggplot(aes(x = docentes, y = pred, colour = tem_doutorado)) +
geom_line() +
geom_point(data = cacc, aes(y = produtividade, colour = tem_doutorado)) +
labs(y = "Produtividade (artigos / docente)")
Usei regressão múltipla para ver se docentes,
tem_doutorado e mestrados_pprof explicam a
produtividade. O modelo produtividade = 0,95 +
1,34.tem_doutoradoTRUE + 0,032.docentes + 0,037.mestrados_pprof explica
47,9% da variação (R² = 0,479). tem_doutorado tem o efeito
mais forte e significativo (b = [0,77; 1,91], IC de 95%): programas com
doutorado produzem, em média, 1,34 artigos a mais por docente do que
programas parecidos sem doutorado. docentes também tem
efeito positivo e significativo, mas pequeno (b = [0,009; 0,055]): cada
docente a mais soma 0,032 artigo/docente na produtividade — programas
maiores são um pouco mais produtivos por pessoa, não só no total. Já
mestrados_pprof não teve efeito significativo (b = [-0,09;
0,17], p = 0,58): não achei evidência de que orientar mais mestrandos
por docente, sozinho, mude a produtividade.
Para entender melhor o papel do doutorado, sem cair no problema dos
zeros que mencionei acima, ajustei um segundo modelo só com os programas
de cacc_md (que já têm doutorado). Troquei
tem_doutorado (que não varia mais nesse grupo) por
doutorados_pprof, o número de doutorandos por docente:
modelo4 = lm(produtividade ~ docentes + mestrados_pprof + doutorados_pprof, data = cacc_md)
tidy(modelo4, conf.int = TRUE, conf.level = 0.95)
glance(modelo4)
cacc_md %>%
ggplot(aes(x = doutorados_pprof, y = produtividade)) +
geom_point() +
geom_smooth(method = "lm", se = TRUE, colour = paleta[5])
## `geom_smooth()` using formula = 'y ~ x'
Nesse grupo menor (34 programas com doutorado), o modelo
produtividade = 2,44 + 0,006.docentes + 0,021.mestrados_pprof +
0,670.doutorados_pprof explica 28,5% da variação (R² = 0,285). Aqui
docentes e mestrados_pprof deixam de ter
efeito significativo — entre programas que já têm doutorado, tamanho e
carga de mestrado não fazem muita diferença na produtividade. Quem
explica a produtividade agora é doutorados_pprof (b =
[0,13; 1,21], p = 0,017): cada doutorando a mais por docente soma, em
média, 0,67 artigo/docente.
Juntando os dois modelos, o que mais separa a produtividade dos programas não é o tamanho nem quantos mestrandos cada docente orienta — é ter (e usar bem) o doutorado. Programas com doutorado produzem mais por docente; e, entre eles, quem orienta mais doutorandos produz ainda mais. Faz sentido: teses de doutorado costumam virar artigos em periódicos bons, enquanto dissertações de mestrado no Brasil viram, com mais frequência, trabalhos de conferência. Programas com doutorado também tendem a ter docentes mais experientes, com pesquisa e financiamento mais consolidados, o que já ajuda a produtividade por si só. O efeito do tamanho do programa, pequeno mas presente no primeiro modelo, some quando olho só para quem já tem doutorado — sugere que esse ganho vem de ter atingido o doutorado, não de continuar crescendo depois disso.