library(ggplot2)
<- seq(0, 4, by = 0.01)
x <- x^2 - 5*x + 6
y <- data.frame(x = x, y = y)
dados
ggplot(dados, aes(x = x, y = y)) +
geom_line(color = "red") +
geom_hline(yintercept = 0) +
labs(x = "x", y = "f(x)") +
theme(panel.background = element_blank(),
axis.line = element_line())+
scale_x_continuous(expand = c(0, 0))
Tarefa 1
1.Gráfico de Funções
Figura 1.1 - Gráfico da função \(f(x)=x^2-5x+6\), \(x \ ε \ [0,4]\)
Figura 1.2 Gráfico da função \(f(x)= \text{densidade da N(0,1)}\) e \(\text{Distribuição Acumulada da N(0,1)}\)
library(ggplot2)
<- seq(-4, 4, by = 0.1)
x <- dnorm(x, mean = 0, sd = 1)
densidade <- pnorm(x, mean = 0, sd = 1)
distribuicao <- data.frame(x = x, densidade = densidade, distribuicao = distribuicao)
dados
ggplot(data = dados) +
geom_line(aes(x = x, y = densidade, color = "Densidade")) +
geom_line(aes(x = x, y = distribuicao, color = "Distribuição Acumulada")) +
labs(x = "x", y = "f(x)") +
scale_color_manual(values = c("Densidade" = "red",
"Distribuição Acumulada" = "blue")) +
theme(panel.background = element_blank(),
axis.line = element_line(),
legend.title = element_blank(),
legend.position = "bottom") +
scale_y_continuous(expand = c(0, 0))
Figura 1.3. Gráfico da função \(f(x)=\frac{1}{1+\exp(-D \cdot a \cdot (x-b))}\), com \(a=1.5\), \(b=1\), para \(D=1\) e \(D=1.7\)
library(ggplot2)
<- 1.5
a <- 1
b <- seq(-4, 4, by = 0.1)
x
<- 1 / (1 + exp(-1 * a * (x - b)))
f_D1 <- 1 / (1 + exp(-1.7 * a * (x - b)))
f_D17 <- data.frame(
dados x = rep(x, 2),
y = c(f_D1, f_D17),
D = factor(rep(c("D=1", "D=1.7"), each = length(x))))
ggplot(dados, aes(x = x, y = y, color = D)) +
geom_line() + labs(x = "x", y = "f(x)") +
scale_color_manual(values = c("D=1" = "red", "D=1.7" = "blue")) +
theme(panel.background = element_blank(),
axis.line = element_line(),
legend.title = element_blank(),
legend.position = "bottom") +
scale_y_continuous(expand = c(0, 0))
Figura 1.4. Comparando a função de distribuição \(N(0,1)\) com a função \(f(x)=\frac{1}{1+\exp(-D \cdot a \cdot (x-b))}\), com \(a=1.5\), \(b=1\), para \(D=1.7\).
library(ggplot2)
<- 1.5
a <- 1
b <- seq(-4, 4, by = 0.1)
x
<- pnorm(x, mean = 0, sd = 1)
distribuicao_normal <- 1 / (1 + exp(-1.7 * a * (x - b)))
f_D17
<- data.frame(
dados x = rep(x, 2),
y = c(distribuicao_normal, f_D17),
Funcao = factor(rep(c("Distribuição N(0,1)", "Função D=1.7"),
each = length(x))))
ggplot(dados, aes(x = x, y = y, color = Funcao)) +
geom_line() + labs(x = "x", y = "f(x)") +
scale_color_manual(values = c("Distribuição N(0,1)" = "red",
"Função D=1.7" = "blue")) +
theme(panel.background = element_blank(), axis.line = element_line(),
legend.title = element_blank(), legend.position = "bottom") +
scale_y_continuous(expand = c(0, 0))
Figura 1.5. Gráfico da função \(f(x)=c + \frac{1-c}{1+\exp(-D \cdot a \cdot (x-b))}\), com \(a=1.5\), \(b=1\), \(c=0.2\), \(D=1.7\)“,
library(ggplot2)
<- 1.5
a <- 1
b <- 0.2
c <- 1.7
D <- seq(-4, 4, by = 0.1)
x
<- c + (1 - c) / (1 + exp(-D * a * (x - b)))
f_x <- data.frame(x = x, y = f_x)
dados
ggplot(dados, aes(x = x, y = y)) +
geom_line(color = "red") + labs(x = "x", y = "f(x)") +
theme(panel.background = element_blank(), axis.line = element_line()) +
scale_y_continuous(expand = c(0, 0))
Figura 1.6. Gráfico da função densidade da N(0,1) refletida \((-f(x))\) junto com 3 funções logísticas com parâmetros \(\zeta = (a, b, c)\) dados por (1 ,.5, 0.2), (1, 1.5, 0.2) e (2, 1.5, 0.2)
library(ggplot2)
<- seq(-3, 3, by = 0.1)
x <- -dnorm(x, mean = 0, sd = 1)
densidade_refletida
<- 0.2 + (1 - 0.2) / (1 + exp(-1 * (x - 0.5)))
logistica1 <- 0.2 + (1 - 0.2) / (1 + exp(-1 * (x - 1.5)))
logistica2 <- 0.2 + (1 - 0.2) / (1 + exp(-2 * (x - 1.5)))
logistica3
<- data.frame(
dados x = rep(x, 4),
y = c(densidade_refletida, logistica1, logistica2, logistica3),
Funcao = factor(rep(c("Densidade Refletida N(0,1)",
"Logística 1",
"Logística 2",
"Logística 3"), each = length(x))))
ggplot(dados, aes(x = x, y = y, color = Funcao)) +
geom_line() +
labs(x = "Habilidade (θ)", y = "Probabilidade de Resposta Correta") +
scale_color_manual(values = c("Densidade Refletida N(0,1)" = "blue",
"Logística 1" = "red",
"Logística 2" = "green",
"Logística 3" = "purple")) +
theme(panel.background = element_blank(), axis.line = element_line(),
legend.title = element_blank(), legend.position = "bottom") +
geom_hline(yintercept = 0) +
geom_vline(xintercept = 0) +
scale_x_continuous(limits = c(-3, 3), expand = c(0, 0))
2.Geração de Dados Simulados
Figura 2.1 Histograma da Distribuição Gerada de uma \(v.a.\) \(X \sim U(0,1).\)
library(ggplot2)
set.seed(123)
<- runif(1000, min = 0, max = 1)
valores <- data.frame(valores = valores)
dados
ggplot(dados, aes(x = valores)) +
geom_histogram(bins = 20, fill = "#059",color = "#000") +
labs(x = "Valores", y = "Frequência") +
theme(panel.background = element_blank(),
axis.line = element_line())+
scale_y_continuous(limits = c(0, 80), expand = c(0, 0))
Figura 2.2 Distribuição Gerada de uma v.a. \(X \sim Bernoulli(0.3)\).
library(ggplot2)
set.seed(123)
<- 0.3
p <- 1000
n <- rbinom(n, size = 1, prob = p)
valores
<- p
media_teorica <- p * (1 - p)
variancia_teorica
<- mean(valores)
media_empirica <- var(valores)
variancia_empirica
cat("Média teórica: ", media_teorica, "\n")
Média teórica: 0.3
cat("Média empírica: ", media_empirica, "\n")
Média empírica: 0.295
cat("Variância teórica: ", variancia_teorica, "\n")
Variância teórica: 0.21
cat("Variância empírica: ", variancia_empirica, "\n")
Variância empírica: 0.2081832
Figura2.3. Distribuição Gerada de uma v.a. \(Bin(10, 0.5)\).
library(ggplot2)
set.seed(123)
<- 10
n_trials <- 0.5
p <- 1000
n_samples
<- rbinom(n_samples, size = n_trials, prob = p)
valores
<- mean(valores)
media_empirica <- var(valores)
variancia_empirica
<- n_trials * p
media_teorica <- n_trials * p * (1 - p)
variancia_teorica
cat("Média teórica: ", media_teorica, "\n")
Média teórica: 5
cat("Média empírica: ", media_empirica, "\n")
Média empírica: 4.975
cat("Variância teórica: ", variancia_teorica, "\n")
Variância teórica: 2.5
cat("Variância empírica: ", variancia_empirica, "\n")
Variância empírica: 2.556932
2.4. Distribuição Gerada de uma v.a. \(N(0, 1)\).
library(ggplot2)
set.seed(123)
<- 1000
n_samples <- 0
media <- 1
desvio_padrao <- rnorm(n_samples, mean = media, sd = desvio_padrao)
valores
<- media
media_teorica <- desvio_padrao^2
variancia_teorica
<- mean(valores)
media_empirica <- var(valores)
variancia_empirica
cat("Média teórica: ", media_teorica, "\n")
Média teórica: 0
cat("Média empírica: ", media_empirica, "\n")
Média empírica: 0.01612787
cat("Variância teórica: ", variancia_teorica, "\n")
Variância teórica: 1
cat("Variância empírica: ", variancia_empirica, "\n")
Variância empírica: 0.9834589
3.Simulando dados de avaliação
3.1. Gerando o \(n=1000\) valores de uma \(N(0,1)\) representando as habilidades dos indivíduos (x) na coluna A do Excel
library(openxlsx)
<- 1000
n <- 1.5
a <- -0.5
b set.seed(123)
<- rnorm(n, mean = 0, sd = 1)
habilidades <- 1 / (1 + exp(-(a * habilidades + b)))
probabilidades <- rbinom(n, size = 1, prob = probabilidades)
respostas
<- data.frame(
dados Habilidade = habilidades,
Probabilidade = probabilidades,
Resposta = respostas)
write.xlsx(dados, file = "C:/Users/Cassia Correa/OneDrive/Estatistica/Estatistica Educacional/simulacao_dados.xlsx", rowNames = FALSE)
4.Otimização: obtenção do máximo de uma função
4.1- Valor que maximiza a densidade de uma N(0,1)
4.2- \(P(U = x) = p^x (1 - p)^{1 - x}\) e uma amostra \((x_1, \ldots, x_{10}) = (0, 1, 0, 0, 1, 0, 0, 0, 1, 0)\) apos a construção da função de verossimilhança (produto das probabilidades). Usado Suplemento Solver para obter o valor de \(p\) que maximiza a verossimilhança.
5.Gerenciamento de Bases de Dados no EXCEL
Realizado o gerenciamento de um banco de dados no Excel utilizando macro VBA. Durante esse processo, geramos um código que contém as respostas correspondentes às alternativas escolhidas pelos participantes do ENEM 2017, no caderno azul, referentes às questões de matemática. O arquivo está no formato de texto formatado, com os valores separados por espaços
6.Gerenciamento de Bases de Dados no R
library(readxl)
library(ggplot2)
<- read_excel("ENEM2017MT.xlsx")
respostas <- read.csv("ENEM2017MT_infoitem.csv",
gabarito sep = ";", stringsAsFactors = FALSE)
<- gabarito$GABARITO[1:45]
gabarito_MT
<- data.frame(
respostas_split do.call(rbind, strsplit(substr(respostas$TX_RESPOSTAS_MT, 1, 45), "")))
colnames(respostas_split) <- paste0("Q", 1:45)
<- respostas_split
respostas_dicotomizadas for (i in 1:45) {
<- ifelse(
respostas_dicotomizadas[[i]] == gabarito_MT[i], 1, 0)}
respostas_split[[i]]
<- cbind(NU_INSCRICAO = respostas$NU_INSCRICAO, respostas_dicotomizadas)
respostas_dicotomizadas $SCORE <- rowSums(respostas_dicotomizadas[2:46])
respostas_dicotomizadas
<- apply(
respostas_formatadas 1:46], 1,function(row) {
respostas_dicotomizadas[, paste(substr(row[1], 1, 12), paste(row[-1], collapse = ""), sep = " ")})
cat(head(respostas_formatadas, 12), sep = "\n")
170000007404 000001100000101000100111000010100000000100000
170005101416 000010000000000010010010001000100100000100010
170000098218 101011000011101011011010001111001000011100100
170005205041 100011011111001011010111111111000011011101111
170005203958 100111000100100000001111000010000010100110010
170000162158 111111111011100111011110011111101110101100110
170000147521 101011110111101111111110011000101111101111111
170000182413 100011000010000000000011110010100001001000000
170001874145 100011000001101001110011001010101010011100110
170003535712 111001111011000111111111001010100000000100000
170001904052 101101000101000110000000001101000101010000100
170003745189 100011000001000111000010111000000110100110001
ggplot(respostas_dicotomizadas, aes(x = SCORE)) +
geom_histogram(binwidth = 1, color = "black", fill = "lightblue") +
labs(title = "Distribuição dos Escores (Número de Acertos)",
x = "Número de Acertos",
y = "Frequência") +
theme(panel.background = element_blank(),
axis.line = element_line()) +
scale_y_continuous(expand = c(0, 0))
<- colMeans(respostas_dicotomizadas[2:46])
proporcao_acertos ggplot(data.frame(Proporcao = proporcao_acertos), aes(x = Proporcao)) +
geom_histogram(binwidth = 0.05, color = "black", fill = "lightgreen") +
labs(title = "Distribuição das Proporções de Acertos por Item",
x = "Proporção de Acertos",
y = "Frequência") +
theme(panel.background = element_blank(),
axis.line = element_line()) +
scale_y_continuous(expand = c(0, 0))
7.Gráfico da Proporção de acerto por escore para os 5 primeiros itens.
library(readxl)
library(ggplot2)
<- read_excel("ENEM2017MT.xlsx")
respostas <- read.csv("ENEM2017MT_infoitem.csv",
gabarito sep = ";", stringsAsFactors = FALSE)
<- gabarito$GABARITO[1:45]
gabarito_MT <- data.frame(
respostas_split do.call(rbind, strsplit(substr(respostas$TX_RESPOSTAS_MT, 1, 45), "")))
colnames(respostas_split) <- paste0("Q", 1:45)
<- respostas_split
respostas_dicotomizadas for (i in 1:45) {
<- ifelse(
respostas_dicotomizadas[[i]] == gabarito_MT[i], 1, 0)}
respostas_split[[i]]
$SCORE <- rowSums(respostas_dicotomizadas)
respostas_dicotomizadas
<- lapply(1:5, function(i) {
proporcao_por_escore tapply(respostas_dicotomizadas[[i]], respostas_dicotomizadas$SCORE, mean)})
<- data.frame(
df_plot Escore = rep(as.numeric(names(proporcao_por_escore[[1]])), 5),
Proporcao = unlist(proporcao_por_escore),
Item = rep(1:5, each = length(proporcao_por_escore[[1]])))
ggplot(df_plot, aes(
x = Escore, y = Proporcao, color = factor(Item), label = Item)) +
geom_line() + geom_text(size = 3) +
labs(x = "Escore", y = "Proporção de Acertos", color = "Item") +
theme(panel.background = element_blank(),
axis.line = element_line()) +
scale_y_continuous(limits = c(0, 1))
8.Histograma Por Área do Conhecimento.
library(readr)
library(ggplot2)
library(rlang)
<- read.csv("ITENS_PROVA_2017.csv", sep = ";", encoding = "latin1")
itens_prova <- read.csv("ENEM2017.csv", sep = ",", encoding = "latin1")
enem_data <- enem_data[, c("NU_NOTA_LC", "TX_RESPOSTAS_LC", "TX_GABARITO_LC")]
lc_data
<- c("NU_NOTA_CN", "NU_NOTA_CH", "NU_NOTA_LC", "NU_NOTA_MT")
areas
for (area in areas) {
<- ggplot(enem_data, aes(x = !!sym(area))) +
p geom_histogram(binwidth = 20, fill = "#005090",
color = "black", alpha = 0.7) +
labs(title = paste("Histograma das Notas em", gsub("NU_NOTA_", "", area)),
x = "Nota", y = "Frequência") +
theme(panel.background = element_blank(), axis.line = element_line()) +
scale_y_continuous(limits = c(0, 12000), expand = c(0, 0))
print(p)}