Aluno: Luiz Sergio Pompeu Alves Filho
Matrícula: 0126015835-35M
## ── 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)
## # A tibble: 2 × 7
## term estimate std.error statistic p.value conf.low conf.high
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -41.3 6.53 -6.32 2.01e- 8 -54.3 -28.3
## 2 docentes 4.81 0.273 17.7 1.09e-27 4.27 5.36
glance(modelo1)
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.815 0.812 28.4 312. 1.09e-27 1 -347. 700. 706.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
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 linear simples foi utilizada para analisar se o número de docentes permanentes tem uma associação significativa com a produção total de artigos do programa. Os resultados indicam que o modelo explica uma parcela significativa da variância da variável de resposta (\(R^2 = 0.815\)). O número de docentes permanentes (medido em quantidade de professores) apresenta uma relação positiva e estatisticamente significativa com a produção (\(b = 4{,}81\), IC \(95\% = [4{,}27; 5{,}36]\), \(p < 0{,}001\)). O aumento de 1 docente permanente no programa está associado a um aumento médio estimado de \(4{,}81\) artigos nos extratos A1, A2 e B1 no período analisado.
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?
O resultado indica que cada docente permanente adicional está associado ao aumento médio de 4,81 artigos (Qualis A1, A2 e B1) no período de 3 anos avaliado pela CAPES. Isso mostra que a capacidade bruta de produção científica de um programa de Ciência da Computação no Brasil escala de forma diretamente proporcional ao tamanho da sua equipe de professores.Existe também um detalhe prático revelado pelo intercepto de -41,27: teoricamente, um programa com zero professores teria uma produção negativa, o que é impossível no mundo real. Na prática, esse valor negativo sugere a existência de um limiar mínimo de escala: um programa precisa de um corpo docente base (em torno de 8 a 9 professores permanentes, já que \(41,27 / 4,81 \approx 8,58\)) para conseguir engrenar e gerar produção constante nos veículos avaliados pela CAPES.
modelo2 = lm(producao ~ docentes + mestrados_pprof + doutorados_pprof + tem_doutorado,
data = cacc_md)
tidy(modelo2, conf.int = TRUE, conf.level = 0.95)
## # A tibble: 5 × 7
## term estimate std.error statistic p.value conf.low conf.high
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -39.5 17.7 -2.23 3.35e-2 -75.7 -3.29
## 2 docentes 4.39 0.539 8.14 4.38e-9 3.29 5.49
## 3 mestrados_pprof 0.0318 3.49 0.00913 9.93e-1 -7.09 7.15
## 4 doutorados_pprof 16.1 8.80 1.83 7.72e-2 -1.87 34.1
## 5 tem_doutoradoTRUE NA NA NA NA NA NA
glance(modelo2)
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.816 0.798 34.1 44.4 3.75e-11 3 -166. 342. 350.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
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)
## # A tibble: 4 × 7
## term estimate std.error statistic p.value conf.low conf.high
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -14.4 7.45 -1.93 5.81e- 2 -29.2 0.504
## 2 docentes 3.50 0.460 7.61 1.02e-10 2.58 4.42
## 3 mestrados -0.195 0.0816 -2.39 1.96e- 2 -0.358 -0.0322
## 4 doutorados 1.00 0.183 5.47 6.87e- 7 0.636 1.37
glance(modelo2)
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.871 0.865 24.0 155. 1.42e-30 3 -334. 677. 689.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
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?
Regressão múltipla foi utilizada para analisar se o número de docentes permanentes, de dissertações de mestrado e de teses de doutorado têm uma associação significativa com a produção total de artigos do programa. Os resultados indicam que o modelo explica uma parcela significativa da variância da variável de resposta (\(R^2 = 0{,}871\)).
O número de docentes permanentes apresenta uma relação positiva e estatisticamente significativa com a produção (\(b = 3{,}50\), IC \(95\% = [2{,}58; 4{,}42]\), \(p < 0{,}001\)), onde o aumento de 1 docente está associado a um aumento médio estimado de \(3{,}50\) artigos nos extratos A1, A2 e B1. O número de teses de doutorado também apresenta uma relação positiva e estatisticamente significativa (\(b = 1{,}00\), IC \(95\% = [0{,}64; 1{,}37]\), \(p < 0{,}001\)), associando cada tese concluída a um aumento médio de \(1{,}00\) artigo. Por sua vez, o número de dissertações de mestrado apresenta uma relação negativa e estatisticamente significativa (\(b = -0{,}19\), IC \(95\% = [-0{,}36; -0{,}03]\), \(p = 0{,}020\)), onde cada dissertação concluída está associada a uma redução média estimada de \(0{,}19\) artigos.
O resultado indica que o modelo multivariado é mais explicativo que o modelo simples (\(R^2 = 0{,}871\) contra \(0{,}815\)), demonstrando que a formação discente — sobretudo no nível de doutorado — complementa a capacidade produtiva do corpo docente. Isso mostra que o corpo docente permanece como o pilar estrutural do programa, mas a maturidade das pesquisas conduzidas por doutorandos atua como um catalisador direto para publicações nos veículos de alto impacto da CAPES. Existe também um detalhe prático revelado pelo coeficiente levemente negativo das dissertações de mestrado: em programas de tamanho equivalente, a concentração excessiva de energia em orientações de ciclos curtos (mestrados de 2 anos) impõe um custo de oportunidade à equipe, resultando em uma produção ligeiramente inferior nos extratos superiores quando comparada a programas com foco em doutorados.
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?.
modelo_produtividade = lm(produtividade ~ mestrados_pprof + doutorados_pprof + docentes, data = cacc)
tidy(modelo_produtividade, conf.int = TRUE, conf.level = 0.95)
## # A tibble: 4 × 7
## term estimate std.error statistic p.value conf.low conf.high
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 1.44 0.366 3.92 0.000203 0.706 2.17
## 2 mestrados_pprof 0.00982 0.0685 0.143 0.886 -0.127 0.146
## 3 doutorados_pprof 0.932 0.235 3.97 0.000173 0.464 1.40
## 4 docentes 0.0239 0.0140 1.71 0.0920 -0.00400 0.0517
glance(modelo_produtividade)
## # A tibble: 1 × 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.440 0.416 1.05 18.1 0.00000000922 3 -105. 220. 231.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
Regressão múltipla foi utilizada para analisar se a taxa de dissertações de mestrado por docente, a taxa de teses de doutorado por docente e o tamanho do corpo docente têm uma associação significativa com a produtividade de artigos do programa. Os resultados indicam que o modelo explica 44,01% da variância da produtividade (\(R^2 = 0{,}440\)). A taxa de teses de doutorado por docente apresentou uma relação positiva e estatisticamente significativa (\(b = 0{,}93\), IC \(95\% = [0{,}46; 1{,}40]\), \(p < 0{,}001\)), onde o aumento de 1 tese por professor está associado a um incremento médio de 0,93 artigos por docente. Em contrapartida, nem a taxa de dissertações de mestrado por docente (\(b = 0{,}01\), IC \(95\% = [-0{,}13; 0{,}15]\), \(p = 0{,}886\)) nem o número total de docentes permanentes (\(b = 0{,}02\), IC \(95\% = [-0{,}004; 0{,}052]\), \(p = 0{,}092\)) apresentaram relações estatisticamente significativas.
Esses achados revelam aspectos fundamentais sobre o funcionamento dos programas de Ciência da Computação no Brasil. Fica evidente que os doutorandos são o verdadeiro motor da eficiência docente, pois a orientação de teses de doutorado é a única variável individualmente capaz de alavancar a taxa individual de publicações em veículos de alto impacto. Além disso, a perda de significância da variável docentes demonstra uma distinção clara entre escala e eficiência: contratar mais professores aumenta o volume absoluto de publicações do programa, mas não torna cada professor individualmente mais produtivo. Por fim, a neutralidade do mestrado na taxa de produtividade indica que esse nível atua majoritariamente como formação de base e transição acadêmica, enquanto a produção científica de ponta se consolida de fato durante o ciclo do doutorado.