Para todos os exercícios a seguir não se esqueça de:
Faça o que se pede sem usar as funções max()ou which.max() do R.
(a). No computador implemente o algoritmo visto em sala de aula que recebe como entrada um vetor v e retorna o seu valor máximo.
maximo = function(v){
if(class(v)!="numeric" )
stop("Não são números reais")
n = length(v)
max = v[1]
for (i in 2:n) {
if( v[i] > max ){
max = v[i]
}
i = i + 1
}
return(max)
}
v = c(4,8,0.7,999,3)
maximo(v)## [1] 999
(b). Em seu caderno escreva um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna a posição onde se encontra o máximo. Nesse item não é para usar o computador.
#Entrada: v = array com os dados.
#Saída: valor da posição do máximo em v.
#1. Defina n como o tamanho do vetor v;
#2. Faça max = v[1];
#3. Faça p = 1;
#4. Inicie i = 2;
#5. Se v[i] > max , p = i;
#6. Incremente i: i = i + 1;
#7. Se i <= n, volta para a linha 4;
#8. Retorne p.(c). Agora, novamente no computador, implemente uma nova função que executa o pseudo-código elaborado no item b. Não use o mesmo nome da função implementada no item a.
posicao_max = function(v){
if(class(v)!="numeric" )
stop("Não são números reais")
n = length(v)
max = v[1]
p = 1
for (i in 2:n) {
if( v[i] > max){
p = i
}
i = i + 1
}
return(p)
}
v = c(4,8,0.7,8,999,3)
posicao_max(v)## [1] 5
## [1] 5
Faça o que se pede sem usar as funções max()ou which.max()´` do R.
(a). Primeiro escreva em seu caderno um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna o valor mínimo guardado em v. Nesse item não é para usar o computador.
#Entrada: v = array com os dados.
#Saída: valor minimo em v.
#1. Defina n como o tamanho do vetor v;
#2. Faça min = v[1];
#3. Inicie i = 2;
#4. Se v[i] < min , min = v[i];
#5. Incremente i: i = i + 1;
#6. Se i <= n, volta para a linha 4;
#7. Retorne max.(b). Agora no computador implemente uma função que executa o pseudo-código elaborado do item a.
minimo = function(v){
if(class(v)!="numeric" )
stop("Não são números reais")
n = length(v)
min = v[1]
for (i in 2:n) {
if( v[i] < min ){
min = v[i]
}
i = i + 1
}
return(min)
}
v = c(4,8,0.7,999,3)
minimo(v)## [1] 0.7
(c). De volta ao caderno escreva um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna a posição onde se encontra o mínimo. Nesse item não é para usar o computador.
#Entrada: v = array com os dados.
#Saída: valor da posição do minimo em v.
#1. Defina n como o tamanho do vetor v;
#2. Faça min = v[1];
#3. Faça p = 1;
#4. Inicie i = 2;
#5. Se v[i] < min , p = i;
#6. Incremente i: i = i + 1;
#7. Se i <= n, volta para a linha 4;
#8. Retorne p.(d). Novamente no computador implemente no uma nova função que executa o pseudo-código elaborado no item c. Não use o mesmo nome da função implementada no item a.
posicao_min = function(v){
if(class(v)!="numeric" )
stop("Não são números reais")
n = length(v)
min = v[1]
p = 1
for (i in 2:n) {
if( v[i] < min ){
p = i
}
i = i + 1
}
return(p)
}
v = c(0.7, 999, 0, 1)
posicao_min(v)## [1] 3
## [1] 3
A amplitude de um conjunto \(A\) é definida por \(max(A)−min(A)\).
(a). Primeiro escreva no caderno um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna a sua amplitude. Considere que você já fez as funções que retornam o máximo e o mínimo de v(itens anteriores). Não é para usar o computador ainda.
#Entrada: v = array com os dados.
#Saída: valor da amplitude em v.
#1. Faça min = maximo(v);
#2. Faça min = maximo(v);
#3. Faça amplitude = max - min;
#4. Retorne abs(amplitude).(b). Agora no computador implemente o passo-a-passo feito do item a. Dentro da sua função chame as funções implementadas nos Exercício 1 e 2.
amplitude = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
max = maximo(v)
min = minimo(v)
amplitude = max - min
return(abs(amplitude))
}
v = c(99,74,12,5)
amplitude(v)## [1] 94
Faça o que se pede sem usar as funções mean() e sum() do R. No computador implemente o algoritmo visto em sala de aula que recebe como entrada um vetor v e retorna a média amostral dos valores em v. Obs: Se quiser use a função mean() apenas para comparação.
media = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
soma = 0
for (i in 1:n){
soma = soma + v[i]
i = i + 1
}
media = soma/n
return(media)
}
v = c(2,4,7,6,6,6.5,8)
media(v)## [1] 5.642857
## [1] 5.642857
Faça o que se pede sem usar a função median() do R. Para ordenar o vetor de entrada use a função sort() do R. No computador implemente o algoritmo visto em sala de aula que recebe como entrada um vetor v e retorna a mediana de v. Obs: Se quiser use a função median() apenas para comparação.
mediana = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
v_o = sort(v)
if( n%%2 != 0){
mediana = v_o[ (n+1)/2 ]
} else{ mediana = ( v_o[n/2] + v_o[ (n/2)+1 ] )/2
}
return(mediana)
}
v = c(2,4,4.2,7.2,6,6.5)
mediana(v)## [1] 5.1
## [1] 5.1
Faça o que se pede sem usar a função quantile() do R. Para ordenar o vetor de entrada use a função sort() do R.
(a). No computador implemente o pseudo-código visto em sala de aula, baseado no Método 1, que recebe como entrada um vetor v e retorna um array com os valores dos três quartis.
quartil_1 = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
v_o = sort(v)
if(n%%2==0){
k = n/2 ; j = k + 1
}else{ k = (n-1)/2 ; j = k + 2}
v_1 = v[1:k]
v_2 = v[j:n]
q_1 = mediana(v_1)
q_2 = mediana(v)
q_3 = mediana(v_2)
q = c(q_1,q_2,q_3)
return(q)
}
v = c(35,32,33,20,37,39,40,55,90)
quartil_1(v)## [1] 32.5 37.0 47.5
(b). No caderno escreva um pseudo-código que calcula os três quartis a partir do Método 2.
#Entrada: v = array com os dados.
#Saída: um array com os 3 quartis dos valores de v.
#1. Defina n como o tamanho do vetor v;
#2. Defina v_o como o vetor v ordenado;
#3. Defina m como a mediana do vetor v;
#4. Defina A1 e A2 como vetores numéricos;
#5. Faça p1 = 1 e p2 = 1
#6. Inicie i = 1;
#7. Se v_o[i] <= m, A1[p1] = v_o[i];
#8. Incremente p1: p1 = p1 + 1;
#9. Se v_o[i] >= m, A2[p2] = v_o[i];
#10. Incremente p2: p2 = p2 + 1;
#11. q_1 = mediana de A1;
#12. q_2 = mediana de v;
#13. q_3 = mediana de A2;
#14. Retorna o vetor (q_1, q_2, q_3).(c). No computador implemente o pseudo-código escrito no item acima.
quartil_2 = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
v_o = sort(v)
m = mediana(v)
A1 = numeric(0); A2 = numeric(0)
p1 = 1; p2 = 1
for (i in 1:n){
if(v_o[i] <= m){
A1[p1] = v_o[i]
p1 = p1 + 1
}
if(v_o[i] >= m){
A2[p2] = v_o[i]
p2 = p2 + 1
}
}
q_1 = mediana(A1)
q_2 = m
q_3 = mediana(A2)
q = c(q_1,q_2,q_3)
return(q)
}
v = c(35,32,33,20,37,39,40,55,90)
quartil_2(v)## [1] 33 37 40
## 0% 25% 50% 75% 100%
## 20 33 37 40 90
A distânica interquartílica de um conjunto \(A\) é definida por \(q3−q1\), onde \(q1\) e \(q3\) são, respectivamentes, o primeiro e terceiro quartil.
(a). Primeiro escreva no caderno um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna a sua Distância Interquartílica. Considere que você já sabe calcular os quartis de v. Não é para usar o computador ainda.
#Entrada: v = array com os dados.
#Saída: valor da distânica interquartílica em v.
#1. Defina q1 como primeiro quartil do vetor v;
#2. Defina q3 como terceiro quartil do vetor v;
#3. Faça inter = abs(q3 - q1) ;
#4. Retorne inter.(b). Agora no computador implemente o passo-a-passo feito do item a. Dentro da sua função chame a função implementadas no Exercício 6.
interquartil = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
q1 = quartil_1(v)[1]
q3 = quartil_1(v)[3]
inter = abs(q3 - q1)
return(inter)
}
v = c(35,32,33,20,37,39,40,55,90)
interquartil(v)## [1] 15
Faça o que se pede sem usar as funções sd(), mean() e sum() do R. No computador implemente o algoritmo visto em sala de aula que recebe como entrada um vetor v e retorna a sua variância amostral. Para simplificar use a função implementada no Exercício 4. Obs: Se quiser use a função sd() apenas para comparação.
var_amostral = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
m = media(v)
soma = 0
i = 1
while(i<=n){
soma = soma + (v[i] - m)^2
i = i + 1
}
s2 = soma/(n-1)
return(s2)
}
v = c(35,32,33,20,37,39,40,55,90)
var_amostral(v)## [1] 403
## [1] 403
O Desvio Médio de um conjunto de dados \(A={a1,…,an}\) é definido pela expressão abaixo, onde \(m\) é a média amostral de \(A\). \[\hbox{dm } = \frac{\sum_{i=1}^n |a_i - m|}{n}\].
(a). Primeiro escreva no caderno um pseudo-código para o algoritmo que recebe como entrada um vetor v e retorna o seu Desvio Médio. Não é para usar o computador ainda. Considere que você já sabe calcular a média amostral de v.
#Entrada: v = array com os dados.
#Saída: valor do desvio médio em v.
#1. Defina n como o tamanho do vetor v;
#2. Defina m como a média amostral do vetor v;
#3. Inicie soma = 0;
#4. Inicie i=1;
#5. Incremente a variável soma: soma = soma + abs(v[i] - m);
#6. Incremente i: i = i + 1;
#7. Se i <= n, volta para a linha 5;
#8. Faça dm = soma/n;
#9. Retorne dm.(b). Agora no computador implemente o pseudo-código feito do item a.
desvio_medio = function(v){
if( class(v) != "numeric")
stop("Não são números reais")
n = length(v)
m = media(v)
soma = 0
i = 1
while(i<=n){
soma = soma + abs(v[i] - m)
i = i + 1
}
dm = soma/(n)
return(dm)
}
v = c(35,32,33,20,37,39,40,55,90)
desvio_medio(v)## [1] 13.40741
Faça o que se pede sem usar as funções mean(), sum() ou qualquer outra pronta do R.
(a). Implemente o algoritmo visto em sala de aula que recebe como entrada dois vetores v e w e retorna a covariância amostral entre eles. Para simplificar use a função implementada no Exercício 4.
cov_amostral = function(v,w){
if( class(v) != "numeric" | class(w) != "numeric")
stop("Não são números reais")
n = length(v); k = length(w)
if( n!=k)
stop("Amostras de tamanhos diferentes")
m_v = media(v)
m_w = media(w)
soma = 0
i = 1
while(i<=n){
soma = soma + (v[i] - m_v)*(w[i] - m_w)
i = i + 1
}
cov = soma/(n-1)
return(cov)
}
v = c(25,42,53,10,7,19,85,57,81)
w = c(35,32,33,20,37,39,40,55,90)
cov_amostral(v,w)## [1] 368.5833
## [1] 368.5833
(b). Desafio: vamos generalizar o item a. Implemente uma função que recebe como entrada uma matriz de dados. Considere que cada coluna dessa matriz representa um vetor de dados. A função implementada deve retornar a matriz de covariância amostral entre os vetores coluna dessa matriz. Lembre-se que a matriz de covariância é definida pela matriz cuja posição \((i,j)\) guarda a covariância da variável \(i\) com a \(j\).Nesse item pode (e deve) chamar a função implementada no item a.
matriz_cov = function(m){
n = length(m[1,])
matriz = matrix(nrow = n,ncol = n)
for (i in 1:n) {
for (j in 1:n) {
matriz[i,j] = round(cov_amostral(m[,i],m[,j]),2)
}
}
return(matriz)
}
v = c(6,9,7,3,9,2,2,6,4,4,6,1,1,2,7,4)
m = matrix(v, nrow = 4)
matriz_cov(m)## [,1] [,2] [,3] [,4]
## [1,] 6.25 -4.92 3.75 -0.83
## [2,] -4.92 11.58 -3.08 -5.17
## [3,] 3.75 -3.08 4.25 1.83
## [4,] -0.83 -5.17 1.83 7.00
Para o próximo exercício considere A1 = c(6,9,7,3,9,2,2,6), A2 = c(4,4,6,1,1,2,7,4) e A3 = c(1,9,5,7,2,4,2,1,9,4).
Usando as funções que você implementou nos exercícios anteriores faça as contas que se pede. Tente fazer cada item usando apenas uma linha de comando no R.
(a). Qual a amplitude do conjunto \(A1\)?
## [1] 7
(b). Qual a média amostral do conjunto \(A3\)?
## [1] 4.4
(c). Qual a variância amostral do conjunto \(A2\)?
## [1] 4.839286
(d). Se A4 for definido pela união dos conjuntos \(A1\) e \(A2\), qual a média de \(A4\)?
## [1] 4.5625
(e). Qual a mediana de \(A4\)?
## [1] 4
(f). Qual o desvio médio de \(A4\)?
## [1] 2.257812
(g). Quais os quartis de \(A3\)?
## [1] 5 4 4
(h). Qual a distância interquartílica de \(A3\)?
## [1] 1
(i). Qual a covariância entre \(A1\) e \(A2\)? É possível fazer essa conta?
## [1] -0.5
Resposta: Sim.
(j). Qual a covariância entre \(A1\) e \(A3\)? É possível fazer essa conta?
Resposta: Não, pois os conjuntos A1 e A3 tem tamanhos distintos.