No ficheiro de dados econ.xlsx encontra informação relativa a dados económicos dos Estados Unidos providenciados pela empresa FRED. Este conjunto de dados possui as seguintes variáveis: tempo (Data do registo); gcp (gastos de consumo pessoal, em biliões de dólares); pop (população total); tpp (taxa de poupança pessoal); ddesemp (duração mediana do desemprego, em semanas); ndesemp (número de desempregados, em milhares).
Considere as variáveis \(X_1=\) gcp e \(X_2=\) tpp para os anos superiores ou iguais a 1975. Com recurso ao pacote ggplot
produza um único gráfico que lhe permita fazer uma análise da evolução dessas duas variáveis para esses anos.
Uma vez que as variáveis podem não ter a mesma escala, antes de construir o gráfico proceda do seguinte modo:
Selecione os dados a usar.
Faça a seguinte transformação aos dados associados a cada variável \[X_k: z_{ik}=\frac{x_{ik}-{\bar{x}_k}}{s_{x_k}},\quad i=1,2,\dots,n,\] onde \(n\) é a dimensão da amostra, \({\bar{x}_k}\) e \(s_{x_k}\) correspondem, respectivamente, à média e desvio-padrão da amostra associada à variável \(X_k\).
Submeta um ficheiro em formato PDF, com uma única página A4, que inclua:
O código em R
.
Nota: no código devem também constar os comandos para leitura e seleção dos dados do ficheiro.
O gráfico que achar mais adequado para analisar a evolução dessas variáveis nesse período de tempo.
library(ggplot2)
theme_set(theme_light())
# vars <- c("gcp", "pop")
# ano <- 2000
econ <- readxl::read_excel("econ.xlsx", sheet = "IndicadoresEcon")
econ$tempo <- as.Date(econ$tempo, format = "%d-%m-%Y")
ss <- subset(econ, tempo >= as.Date(paste0(ano, "-1-1")))
ss$gcp <- scale(ss$gcp)
ss$pop <- scale(ss$pop)
colmy <- c("GCP"="darkred", "Pop." = "steelblue")
graf <- ggplot(ss, aes(x = tempo))+
geom_line(aes(y = gcp, color = "GCP")) +
geom_line(aes(y = pop, color = "Pop.")) +
ggtitle("Evolução das variáveis Gasto Consumo Pessoal e População (padronizadas)
\nentre **** e 2015") +
labs(x = "Anos", y = "Valores Padronizados", color = "Variáveis") +
scale_color_manual(values = colmy)
graf + theme(plot.title = element_text(color = "blue", size = 10, face = "bold.italic"))
O ficheiro TIME_USE_24092022.csv contém uma compilação de dados enviados por diversos países para a OCDE (Organização para a Cooperação e Desenvolvimento Económico) sobre o tempo médio diário (em minutos) despendido pelas pessoas entre os 15 e os 64 anos em diferentes tipos de ocupações.
Leia o ficheiro de dados no R
e elimine todos os registos referentes à África do Sul (dados incompletos).
Submeta um ficheiro em formato PDF com uma única página A4, que inclua, num único gráfico, dois diagramas de extremos e quantis que permitam comparar os tempos médios diários registados para Homens em duas ocupações distintas: Cuidados pessoais e Trabalho não remunerado.
Nota: o código apresentado deve incluir os comandos para leitura e seleção dos dados do ficheiro.
library(ggplot2)
theme_set(theme_light())
# ocupacoes <- c("Lazer", "Trabalho remunerado ou estudo")
# grupo <- "Mulheres" # por exemplo
url <- 'https://web.tecnico.ulisboa.pt/~paulo.soares/pe/projeto/TIME_USE_24092022.csv'
tempo <- read.csv(url)
tempo <- subset(tempo, País != 'África do Sul')
dados <- subset(tempo, Sexo == grupo & Ocupação %in% ocupacoes)
ggplot(dados) +
geom_boxplot(aes(Ocupação, Tempo)) +
labs(title = paste0("Uso do tempo diário em vários países ", "(", grupo,")"),
y = "Tempo médio (minutos)")
O ficheiro GENDER_EMP_19032023152556091.txt contém uma compilação de dados sobre emprego enviados por diversos países para a OCDE (Organização para a Cooperação e Desenvolvimento Económico).
Com recurso ao pacote ggplot
produza um único gráfico de barras que permita comparar os valores da variável EMP5 (Share of employed in part-time employment, by sex and age group) entre homens e mulheres nos grupos etários 15–24, 25–54 e 55–64, registados em 2005 no seguinte país: Türkiye.
Por simplicidade, mantenha todo o texto no gráfico em Inglês.
Submeta um ficheiro em formato PDF com uma única página A4, que inclua:
O código em R
, que deve incluir os comandos para leitura e seleção dos dados do ficheiro.
O gráfico produzido.
library(ggplot2)
# url <- 'https://web.tecnico.ulisboa.pt/~paulo.soares/pe/projeto/GENDER_EMP_19032023152556091.txt'
# gender <- read.delim(url, check.names = FALSE)
# pais <- "Portugal"
# ano <- 2010
# variavel <- "EMP1" # por exemplo
classes <- c("1524", "2554", "5564")
data <- subset(gender, Country == pais & IND == variavel & SEX != 'ALL_PERSONS' & AGE %in% classes &
TIME == ano)
var_desc <- data$Indicator[1]
ggplot(data) +
geom_col(aes(`Age Group`, Value, fill = SEX), position = "dodge") +
labs(title = paste("Employment in", pais, "in", ano),
subtitle = paste0(var_desc, " (", variavel, ")"),
y = paste(variavel, "(%)")) +
theme_linedraw()
Fixando a semente em 2300, gere uma amostra de dimensão \(k = 1040\) proveniente de uma distribuição Exponencial de parâmetro \(\lambda = 19\). Os valores gerados correspondem aos tempos entre acontecimentos sucessivos.
Considere agora a soma sucessiva destas observações, i.e., se \(x_i\) designar o \(i\)-ésimo valor gerado, então \(s_j=\sum_{i=1}^jx_i\) é o instante de ocorrência do \(j\)-ésimo acontecimento. Seja \(T=\lceil s_{1040} \rceil\) o menor número inteiro maior ou igual ao instante de ocorrência do último acontecimento.
Divida o intervalo \(]0,T]\) em intervalos de amplitude unitária e contabilize o número de acontecimentos que ocorreram em cada um desses subintervalos.
Calcule a média do número de acontecimentos por subintervalo e de seguida calcule o desvio absoluto entre este valor e o valor esperado (teórico) do número de acontecimentos num subintervalo. Indique este desvio arredondado a 4 casas decimais.
# seed <- 971
# lambda <- 12.0
# k <- 5000
set.seed(seed)
inter <- rexp(k, lambda)
arr <- cumsum(inter)
Tk <- ceiling(arr[k])
res <- abs(lambda - mean(table(cut(arr, breaks = 0:Tk))))
O desvio pedido é igual a 0.4286.
Ensaios de Bernoulli independentes, cada um dos quais com probabilidade de sucesso \(0.4\), são sucessivamente realizados. Seja \(X\) o número de insucessos até ao primeiro ensaio que resulta em sucesso. A distribuição da variável aleatória \(X\) é conhecida por distribuição geométrica de parâmetro \(p = 0.4\), cuja função (massa) de probabilidade é dada por:
\[ f_X(x) = \begin{cases} (1-p)^x \,p, &x=0,1,2,\ldots \\ 0, &\text{caso contrário.} \end{cases} \]
Podemos gerar valores de uma distribuição geométrica a partir de uma distribuição uniforme contínua usando o método de transformação inversa. Nesse sentido, requer-se a execução dos seguintes passos:
Simula-se um valor, \(u\), proveniente de uma distribuição uniforme no intervalo \(]0,1[\).
Se \(F_X(x-1) < u \leq F_X(x)\), aceita-se \(x\) como um valor simulado de \(X\), onde \(F_X(x)\) é a função de distribuição de \(X\).
Fixando a semente em \(1139\), implemente este método de simulação estocástica repetindo os passos anteriores até obter uma amostra de dimensão \(n = 1081\).
Indique a proporção de valores simulados que são superiores à soma da média com o desvio padrão amostrais, de entre os que são superiores à respetiva média amostral. Apresente o resultado com 4 casas decimais.
# seed <- 971 #por exemplo
# p <- 0.15
# n <- 901
set.seed(seed)
u <- runif(n)
x <- ceiling(log(1 - u) / log(1 - p)) - 1
q1 <- sum(x > mean(x) + sd(x))
q2 <- sum(x > mean(x))
res <- q1 / q2
A proporção pedida é igual a 0.3627.
Considere a variável aleatória \(X\) que representa o primeiro algarismo de um número inteiro escrito em base decimal. Admita que \(X\) possui distribuição de Benford, com função de probabilidade dada por: \[P(X=x)=\log_{10}\left(1+\frac{1}{x}\right), \quad x \in \{1,2,\ldots,9\}.\]
Calcule a probabilidade de \(X\) ser igual a \(5\) ou \(9\).
Obtenha a fração de potências de dois no intervalo \(\left[2^{7}, 2^{27}\right]\) cujo primeiro algarismo é igual a \(5\) ou \(9\).
Calcule o desvio absoluto entre os valores calculados em 1. e 2.
Indique este desvio arredondado a 4 casas decimais.
# 1. P(X=a) + P(X=b)
# a <- 2
# b <- 9 # por exemplo
sumprob <- log10(1 + 1 / a) + log10(1 + 1 / b)
sumprob
## [1] 0.1249387
# 2. Fração pedida
# c <- 1
# d <- 15 # por exemplo
powers = 2 ^ (c:d)
first.digits <- as.numeric(substr(powers, 1, 1))
fraction <- (sum(first.digits == a) / (d - c + 1) + sum(first.digits == b) / ( d - c + 1))
fraction
## [1] 0.0952381
# 3. Desvio absoluto pedido
res <- abs(sumprob - fraction)
O desvio pedido é igual a 0.0297.
Fixando a semente em \(1519\), simule \(m=1008\) amostras de dimensão \(n=12\) de uma população normal de média nula e variância unitária. Para cada uma das amostras, calcule a soma dos quadrados dos valores observados.
Indique a diferença em valor absoluto (arredondado a 4 casas decimais), entre o quantil de probabilidade \(0.3\) da amostra das somas dos quadrados dos valores observados e o quantil correspondente à distribuição teórica da soma de quadrados de variáveis normais reduzidas independentes.
Nota: Use a função quantile
com a opção type=2
.
set.seed(seed)
chi <- vector(length = m)
for (i in 1:m){
amostra <- rnorm(n)
chi[i] <- sum(amostra^2)
}
res <- round(abs(quantile(chi, a, names = FALSE, type = 2) - qchisq(a, n)), 4)
A diferença pedida é igual a 0.1079.
Considere uma variável aleatória com distribuição de Cauchy, com parâmetros de localização e escala iguais a \(0.4\) e \(1.6\), respectivamente.
Usando o R
e fixando a semente em \(1725\), gere uma amostra de dimensão \(n=115\) desta população.
Represente num único gráfico:
Os valores gerados ordenados por ordem crescente versus os quantis de probabilidade \(i/(115+1)\), \(i=1,\ldots,115\) desta população.
Os valores gerados ordenados por ordem crescente versus os quantis de probabilidade \(i/(115+1)\), \(i=1,\ldots, 115\) de uma população normal com valor esperado \(\mu = 1.9\) e variância \(\sigma^2 = 1.8\).
A recta bissectriz dos quadrantes ímpares.
Submeta um ficheiro em formato PDF, com uma única página A4, que inclua:
O código em R
.
O gráfico produzido.
# seed <- 1435 # por exemplo
# n <- 100
# mu0 <- 1
# sigma2 <- 2
# loc <- 0
# scale <- 1
set.seed(seed)
x <- sort(rcauchy(n, location = loc, scale = scale))
y1 <- qcauchy((1:n) / (n + 1), location = loc, scale = scale)
y2 <- qnorm((1:n) / (n + 1), mean = mu0, sd = sqrt(sigma2))
plot(x, y1, pch = 1, xlab = "Amostra ordenada",
ylab = "Quantis de probabilidade", main = "Gráfico Q-Q")
points(x, y2, pch = 3, col = 2)
abline(a = 0, b = 1, col = 4)
legend(x = "bottomright", legend = c("Cauchy", "normal"),
cex = 0.7, lwd = c(2,2), pch = c(2, 3), col = c(1, 2))
Para a construção de intervalos de confiança para o parâmetro \(p\) de uma distribuição de Bernoulli podemos recorrer à variável fulcral \[Z_1=\frac{\bar{X}-p}{\sqrt{\frac{p(1-p)}{n}}}\stackrel{a}{\sim}N(0,1)\] obtida pela aplicação do teorema do limite central a uma amostra aleatória de tamanho \(n\) suficientemente grande da referida população. Duas variantes são possíveis:
Método 1
Usando \(Z_1\), não é difícl mostrar que os limites do intervalo de confiança são as soluções da seguinte equação do segundo grau em \(p\): \[\bar{X}^2-2p\bar{X}+p^2-z^2\frac{p(1-p)}{n}=0,\] em que \(\bar{X}\) representa a média amostral e \(z=\phi^{-1}\left(\frac{1+\gamma}{2}\right)\), para um nível de confiança aproximado \(\gamma\in]0,1[\).
Método 2
Uma segunda aproximação conduz à variável fulcral \[Z_2=\frac{\bar{X}-p}{\sqrt{\frac{\bar{X}(1-\bar{X})}{n}}}\stackrel{a}{\sim}N(0,1)\] que permite a construção de intervalos de confiança de uma forma mais simples e habitual.
Com o objetivo de comparar os dois métodos e, em particular, avaliar a adequação da segunda aproximação, implemente os seguintes passos no R
:
Fixe a semente em \(1568\) e para cada valor de \(n\in\{30, 50, 100, 200, 300, 500, 1000\}\):
gere \(k = 2500\) amostras de tamanho \(n\) de uma distribuição de Bernoulli com parâmetro \(p = 0.3\);
para cada amostra gerada, calcule a diferença entre os comprimentos dos intervalos de confiança construídos pelo Método 2 e pelo Método 1, com um nível de confiança aproximado \(\gamma = 0.97\).
calcule a média das \(k = 2500\) diferenças anteriores.
Construa um gráfico que ilustre a variação das diferenças médias em função do tamanho da amostra.
Submeta um ficheiro em formato PDF, com uma única página A4, que inclua:
O código em R
.
O gráfico pedido.
Comentários sobre os resultados obtidos.
Método 1
As raízes da equação do segundo grau são \[\frac{\left(2\bar{X}+\frac{z^2}{n}\right)\pm \sqrt{\left(2\bar{X}+\frac{z^2}{n}\right)^2-4\bar{X}^2\left(1+\frac{z^2}{n}\right)}}{2\left(1+\frac{z^2}{n}\right)}\] e o comprimento do intervalo de confiança é igual a \(\frac{ \sqrt{\left(2\bar{X}+\frac{z^2}{n}\right)^2-4\bar{X}^2\left(1+\frac{z^2}{n}\right)}}{\left(1+\frac{z^2}{n}\right)}\).
Método 2
O intervalo de confiança tem a expressão \(\left[\bar{X}-z\sqrt{\frac{\bar{X}(1-\bar{X})}{n}}, \bar{X}+z\sqrt{\frac{\bar{X}(1-\bar{X})}{n}}\right]\) e um comprimento igual a \(2z\sqrt{\frac{\bar{X}(1-\bar{X})}{n}}\).
Nota: nas expressões anteriores, \(z\) representa um quantil adequado da distribuição normal reduzida.
# seed <- 435 # por exemplo
# k <- 2000
# p <- 0.5
# gama <- 0.95
library(ggplot2)
set.seed(seed)
tam <- c(30, 50, 100, 200, 300, 500, 1000)
z <- qnorm((1 + gama) / 2)
c1 <- vector(length = k)
c2 <- vector(length = k)
res <- data.frame()
for(n in tam) {
for(i in 1:k) {
amostra <- rbinom(n, 1, p)
media <- mean(amostra)
c1[i] <- sqrt((2 * media + z^2 / n)^2 - 4 * media^2 * (1 + z^2 / n)) / (1 + z^2 / n)
c2[i] <- 2 * z * sqrt(media * (1 - media) / n)
}
res <- rbind(res, c(n, mean(c2 - c1)))
}
names(res) <- c("n", "d")
ggplot(res) +
geom_line(aes(n, d), color = "lightblue") +
geom_point(aes(n, d), color = "magenta") +
labs(title = "Comparação de dois métodos de construção de IC\npara o parâmetro de uma população de Bernoulli",
x = 'Tamanho da amostra',
y = 'Diferença média dos comprimentos dos IC') +
theme_linedraw()
Considere uma variável aleatória \(X\) com distribuição Normal de valor esperado \(\mu\) desconhecido e variância \(\sigma^2=15.2\). Construa um teste de hipóteses \(H_0:\mu= 77.3\) contra \(H_1:\mu\neq77.3\), ao nível de significância de \(\alpha = 0.06\).
Com recurso ao R
e fixando a semente em \(1180\), gere
\(m=200\) amostras de dimensão \(n=26\) dessa variável, admitindo que \(\mu = 78.3\). Aplique o teste de hipóteses que construiu para cada amostra gerada, e use o conjunto de resultados para obter uma estimativa da probabilidade do teste conduzir à não rejeição de \(H_0\). Indique o resultado com 3 casas decimais.
# seed <- 337 # por exemplo
# n <- 32
# m <- 250
# m0 <- 29.6
# m1 <- 31
# sigma2 <- 4
# alpha <- 0.03
set.seed(seed)
quant <- qnorm(1 - alpha / 2)
res <- 0
for (i in 1:m){
amostra <- rnorm(n, mean = m1, sd = sqrt(sigma2))
valorabs <- abs(sqrt(n) * (mean(amostra) - m0) / sqrt(sigma2))
res <- res + (valorabs <= quant)
}
res <- res / m
A estimativa da probabilidade do teste conduzir à não rejeição de \(H_0:\mu = 77.3\) quando o valor esperado da variável aleatória é \(\mu = 78.3\) é 0.755.