Sumário


1 Objetivo

O objetivo do relatório é descrever brevente a respeito da implementação da fução Coeficiente de Variação (CV) no R, utilizando o pacote Leem.

2 Apresentação do relatório

Diante do objetivo do relatório, será apresentado nas próximas subseções, os pontos a serem discutidos.

3 Coeficiente de Variação

3.1 Descrição

O Coeficiente de Variação trata-se de uma medida relativa de dispersão, bastante útil para a comparação em termos relativos do grau de concentração em torno da média de séries distintas, onde seu resultado é expresso em porcentagem. Essa medida é dada por:

\(CV = 100 * σ/μ\)

A importância dessa função está relacionada ao fato de que o desvio-padrão é relativo à média. Dessa forma, como duas distribuições podem ter médias diferentes, o desvio destas distribuições não é comparável. Logo, o Coeficiente de Variação se torna muito útil para comparação entre amostras.

3.2 Cálculo do CV no R

O R pode calcular o coeficiente de variação da seguinte forma:

#Sintaxe:
> 100*sd(dados)/mean(dados)

#Exemplo: 
> x <-c(10,11,9,10,10,9,11)
> CV = 100*sd(x)/mean(x)
> CV
[1] 8.164966 #em torno de 8%

Contudo, também podemos realizar esse procedimento através de uma função. Sendo assim, alguns argumentos podem ser empregados para garantir a proteção da função e a manipualção dos dados de entrada, conforme o resultado que se deseja obter. São eles:

  • rouding: Determina o modo de arredondamento. Se nenhum parâmetro for fornecido, o modo de arredondamento do contexto atual será usado;

  • na.rm: Parâmetro usado por várias funções de dataframe para remover NA (quando a informação em uma certa célula da tabela não é fornecida). Quando na.rm é TRUE, a função ignora quaisquer valores NA. No entanto, quando na.rm for FALSE, ele retornará NA do cálculo que está sendo feito;

  • grouped: Forma especial de dataframe que permite criar um objeto de dados agrupados a partir de dois tipos de argumentos;

  • details: Fornece uma lista de cada variável e cada linha com a exibição do número de valores ausentes associados.

Dessa forma, podemos declarar a função como:

cv <- function (x, rounding = 2, na.rm = FALSE, details = FALSE, grouped = TRUE)

Desenvolvendo a função:

{
  if (class(x) != "leem") 
    stop("Use the 'new_leem()' function to create an object of class leem!", 
         call. = FALSE)
  if (class(x) == "leem" & is.null(attr(x, "table"))) x <- tabfreq(x)
  if (attr(x, "variable") == "discrete") {
    numchar <- is.numeric(x$estat$raw_data)
    if (numchar) {
      cvar <- round(100 * sd(x = x$estat$raw_data, na.rm = na.rm)/mean(x = x$estat$raw_data, na.rm = na.rm), digits = rounding)
      resume <- list(cv = cvar, table = x$tabela, rawdata = x$estat$raw_data)
      
      if (details) {
        return(resume)
      }
      else {
        return(cvar)
      }
    }
    else {
      stop("Measure not used for this data type!", 
           call. = FALSE, domain = "R-leem")
    }
  }
  
  if (attr(x, "variable") == "continuous") {
    if (grouped == TRUE) {
  cvar <- 100*(sdev(x)/mean(x))
  resume <- list(cv = cvar, table = x$tabela, rawdata = x$estat$raw_data)
  
  if (details) {
    return(resume)
  }
  else {
    return(cvar)
  }
    } else {
      
      cvar <- round(100*sd(x = x$estat$raw_data, na.rm = na.rm)/mean(x = x$estat$raw_data, na.rm = na.rm),
                       digits = rounding)
      resume <- list(sdeviation = cvar, table = x$tabela,
                     rawdata = x$estat$raw_data)
      if (details) {
        return(resume)
      }
      else {
        return(cvar)
      }
    }
  }
}

Para avaliar o funcionamento da mesma, podemos utilizar:

set.seed(10)
x <- rnorm(36, 100, 50)
x <- new_leem(x, variable = 2)
cv(x)

O resultado obtido foi de 59.29991, o que significa que a dispersão dos dados com relação a média é de cerca de 59%.