Exercícios do Capítulo 4

maximo = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  max = v[1]
  n = length(v)
  for(i in 2:n){
    if(v[i] > max) {
      max = v[i]
    }
  }
  return(max)
}

maximo(c(1,2,4,3,12,1,2,12,4,56,1,2,3))
## [1] 56
# 1. Defina n como o tamanho do vetor v;
# 2. Faça pos_max = 1; 
# 3. Inicie i = 2;
# 4. Se v[i] > v[pos_max] , pos_max = i ;
# 5. Incremente i: i = i + 1;
# 6. Se i <= n, volta para a linha 4;
# 7. Retorne max.
pos_maximo = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  pos_max = 1
  n = length(v)
  for(i in 2:n){
    if(v[i] > v[pos_max]) {
      pos_max = i
    }
  }
  return(pos_max)
}

pos_maximo(c(1,2,4,3,12,1,2,12,4,56,1,2,3))
## [1] 10
# 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 min.
minimo = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  min = v[1]
  n = length(v)
  for(i in 2:n){
    if(v[i] < min) {
      min = v[i]
    }
  }
  return(min)
}

minimo(c(0,4,2,1,21,-2,4,5,-1,1,2))
## [1] -2
# 1. Defina n como o tamanho do vetor v;
# 2. Faça pos_min = 1; 
# 3. Inicie i = 2;
# 4. Se v[i] < v[pos_min] , pos_min = i ;
# 5. Incremente i: i = i + 1;
# 6. Se i <= n, volta para a linha 4;
# 7. Retorne pos_min.
pos_minimo = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  pos_min = 1
  n = length(v)
  for(i in 2:n){
    if(v[i] < v[pos_min]) {
      pos_min = i
    }
  }
  return(pos_min)
}

pos_minimo(c(0,4,2,1,21,-2,4,5,-1,1,2))
## [1] 6
# 1. Defina o máximo do vetor v como max;
# 3. max = maximo(v);
# 4. Defina o mínimo do vetor v como min;
# 5. min = minimo(v);
# 6. Retorne max - min;
amplitude = function(v){
  return(maximo(v) - minimo(v))
}
amplitude(c(1,2,4,2,1,5,6,7,2,1,3,4,5,10,2,3,2,1))
## [1] 9
media = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  n = length(v)
  soma = 0
  for(i in 1:n){
    soma = soma + v[i]
  }
  media = soma/n
  return(media)
}
media(1:10)
## [1] 5.5
mean(1:10)
## [1] 5.5
mediana = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  n = length(v)
  v_o = sort(v)
  if(n%%2 == 1){
    mediana = v_o[(n+1)/2]
  }else{
    mediana = (v_o[n/2] + v_o[(n/2)+1])/2
  }
  return(mediana)
}

mediana(1:10)
## [1] 5.5
median(1:10)
## [1] 5.5
quartis_1 = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  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_o[1:k]
  v_2 = v_o[j:n]
  q_1 = mediana(v_1)
  q_2 = mediana(v)
  q_3 = mediana(v_2)
  return(c(q_1,q_2,q_3))
}
quartis_1(1:11)
## [1] 3 6 9
# 1. Defina n como o tamanho do vetor v;
# 2. Defina v_o como o vetor v ordenado;
# 3. Sendo n par, defina k = n/2 e j=k+1;
# 4. Sendo n ímpar, defina k = (n-1)/2 + 1 e j=k;
# 5. Defina v_1 como um vetor com os elementos de v_o das posições de 1 até k;
# 6. Defina v_2 como um vetor com os elementos de v_o das posições de j até n;
# 7. q_1 = mediana de v_1;
# 8. q_2 = mediana de v;
# 9. q_3 = mediana de v_2;
# 10. Retorna o vetor (q_1, q_2, q_3).
quartis_2 = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  n = length(v)
  v_o = sort(v)
  if(n%%2 == 0){
    k = n/2
    j = k+1
  }else{
    k = (n-1)/2 +1
    j = k
  }
  v_1 = v_o[1:k]
  v_2 = v_o[j:n]
  q_1 = mediana(v_1)
  q_2 = mediana(v)
  q_3 = mediana(v_2)
  return(c(q_1,q_2,q_3))
}
quartis_2(1:11)
## [1] 3.5 6.0 8.5
# 1. Defina os quartis de v por quart;
# 3. quart = quartis_1(v);
# 6. Retorne quart[3] - quart[1]
dist_quart = function(v){
  quart = quartis_1(v)
  return(quart[3] - quart[1])
}

dist_quart(1:11)
## [1] 6
variancia_amostra = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  n = length(v)
  m = media(v)
  soma = 0
  for(i in 1:n){
    soma = soma + (v[i] - m)^2
  }
  s2 = soma/(n-1)
  return(s2)
}
variancia_amostra(1:20)
## [1] 35
sd(1:20)^2
## [1] 35
# 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.
desvio_medio = function(v){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  n = length(v)
  m = media(v)
  soma = 0
  for(i in 1:n){
    soma = soma + abs(v[i] - m)
  }
  dm = soma/n
  return(dm)
}
desvio_medio(1:20)
## [1] 5
cov_amostral = function(v,w){
  if(!is.numeric(v)) stop("Vetor v precisa ser numérico!")
  if(!is.numeric(w)) stop("Vetor w precisa ser numérico!")
  n = length(v)
  k = length(w)
  if(n != k) stop("Vetores com dimensões diferentes")
  m_v = media(v)
  m_w = media(w)
  soma = 0
  for(i in 1:n){
    soma = soma + (v[i]-m_v)*(w[i]-m_w)
  }
  cov = soma/(n-1)
  return(cov)
}
cov_amostral(1:10,11:20)
## [1] 9.166667
cov(1:10,11:20)
## [1] 9.166667
cov_amostral2 = function(A){
  n_cola = ncol(A)
  n_rowa = nrow(A)
  M = matrix(0, nrow =  n_rowa, ncol = n_cola)
  for(i in 1:n_rowa){
    for(j in 1:n_cola){
      M[i,j] = cov_amostral(A[,i],A[,j])
    }
  }
  return(M)
}
M = matrix(c(1,4,3,5,7,3,2,6,6),nrow = 3)
cov_amostral2(M)
##          [,1] [,2]     [,3]
## [1,] 2.333333    1 3.333333
## [2,] 1.000000    4 0.000000
## [3,] 3.333333    0 5.333333
cov(M)
##          [,1] [,2]     [,3]
## [1,] 2.333333    1 3.333333
## [2,] 1.000000    4 0.000000
## [3,] 3.333333    0 5.333333
A1 =  c(6,9,7,3,9,2,2,6); A2 = c(4,4,6,1,1,2,7,4) ; A3 = c(1,9,5,7,2,4,2,1,9,4)
amplitude(A1)
## [1] 7
media(A3)
## [1] 4.4
variancia_amostra(A2)
## [1] 4.839286
A4 = c(A1,A2)
media(A4)
## [1] 4.5625
mediana(A4)
## [1] 4
desvio_medio(A4)
## [1] 2.257812
quartis_1(A3)
## [1] 2 4 7
dist_quart(A3)
## [1] 5
cov_amostral(A1,A2)
## [1] -0.5
cov_amostral(A1,A3)
## Error in cov_amostral(A1, A3): Vetores com dimensões diferentes