O Desvio médio, desvio médio absoluto ou desvio absoluto de um elemento, de um conjunto de dados, é a diferença absoluta entre este elemento e um ponto dado. Comparado com o Desvio Padrão, o Desvio Médio é mais simples de calcular e menos influenciado por outliers, tornando-o útil em conjuntos de dados com valores extremos.
Características
- O desvio médio representa a distância média entre os valores individuais de um conjunto e sua média.
- É sempre não negativo.
- Quanto menor o valor do desvio médio, mais próximos os dados estão da média. Valores maiores indicam maior dispersão.
Dados NÃO agrupados
Fórmula:
$$\large D_{m} = \frac{\sum_{i=1}^{n} | x_{i}-\bar{x} |}{n}$$
Sendo:
- $Dm:$ desvio-médio
- $| |:$ módulo, absoluto (transforma todos os números em positivos)
- $x_{i}:$ cada dado da série de dados
- $\bar{x}:$ média aritmética do conjunto de dados
- $n:$ total de elementos da amostra ou população
Python:
# Total de elementos do conjunto de dados
n = len(lista)
# Calculando a média (m)
m = int(sum(lista)/len(lista))
# Encontrando o desvio médio (Dm)
Dm = sum(list(map(lambda x: abs(x - m), values)))/n
Julia:
# Total de elementos do conjunto de dados
n = length(valor)
# Calculando a média (m)
m = sum(valor) / n
# Encontrando o desvio médio (Dm)
Dm = sum(abs.(valor .- m)) / n
Libs:
Exemplos
Python
''' Utilizando somente o Python'''
lista = [2, 3, 6, 8, 11]
n = len(lista)
m = int(sum(lista)/len(lista))
Dm = sum(list(map(lambda x: abs(x - m) , lista)))/n
print(Dm)
''' Utilizando o Numpy'''
import numpy as np
lista = [2, 3, 6, 8, 11]
Dm = np.mean(np.absolute(lista - np.mean(lista)))
print(Dm)
''' Utilizando o Pandas'''
import pandas as pd
lista = [2, 3, 6, 8, 11]
# Descobrindo os valores da média e a quantidade de elementos total
n = len(lista)
m = int(sum(lista)/len(lista))
# Criando o dataframe
df = pd.DataFrame(lista, columns=['num'])
# Aplicando a fórmula
Dm = df.num.apply(lambda x: abs(x - m)).sum() / n
print(Dm)
Julia
valor = [2, 3, 6, 8, 11]
n = length(valor)
m = sum(valor) / n
Dm = sum(abs.(valor .- m)) / n
Dados agrupados SEM intervalos de classe
Fórmula:
$$\large D_{m} = \frac{\sum_{i=1}^{n} (| x_{1}-\bar{x} | \cdot f_{i})}{n}$$
Sendo:
- $D_{m}:$ desvio-médio
- $| |:$ módulo, absoluto (transforma todos os números em positivos)
- $x_{i}:$ cada dado da série de dados
- $f_{i}:$ cada frequência da série de dados
- $\bar{x}:$ média aritmética do conjunto de dados e suas frequências
- $n:$ total de elementos da frequência
Python :
# Total de frequências
n = sum(freq)
# Calculando a média (m)
m = sum(list(map(lambda x, y: x * y, num, freq)))/n
# Encontrando o desvio médio (Dm)
Dm = sum(list(map(lambda x, y: abs(x - m)*y, num, freq)))/nv
Julia:
# Total de frequências
n = sum(freq)
# Calculando a média (m)
m = sum(valor .* freq) / n
# Encontrando o desvio médio (Dm)
Dm = sum(abs.(valor .- m) .* freq) / n
Exemplos
Calcule o desvio médio para a distribuição de frequências de idades a seguir:
Idades | Frequências |
---|---|
2 | 4 |
3 | 5 |
4 | 9 |
5 | 6 |
Total | 24 |
Python
''' Utilizando somente o Python '''
num = [2, 3, 4, 5]
freq = [4, 5, 9, 6]
# Encontrando o número de elementos total (n) e a média (m)
n = sum(freq)
m = sum(list(map(lambda x, y: x * y, num, freq))) / n
# Encontrando o desvio médio
Dm = sum(list(map(lambda x, y: abs(x - m) * y, num, freq))) / n
''' Convertendo o resultado em um valor temporal '''
# Como o resultado foi abaixo de 1, consideremos que o tempo é menor que 1 ano
# Descobrindo os meses
meses = 12 * Dm
resto_meses = meses - int(meses)
# Descobrindo os dias
dias = 30 * resto_meses
resto_dias = dias - int(dias)
# Descobrindo as horas
horas = 24 * resto_dias
print(f'Desvio médio: {Dm}')
print(f'Resposta: {int(meses)} meses, {int(dias)} dias e {int(horas)} horas')
''' Utilizando o Pandas '''
import pandas as pd
dicio = {2: 4, 3: 5, 4: 9, 5: 6}
df = pd.DataFrame(dicio.items(), columns=['Idades', 'Frequências'])
# Encontrando o número de elementos total (n)
n = sum(df['Frequências'])
# Encontrando a média (m)
m = sum(df['Idades'] * df['Frequências']) / n
# Acrescentando as colunas com o módulo de xi - m e o módulo multiplicado pela frequência de cada valor
df['|xi - m|'] = list(abs(df['Idades'] - m))
df['|xi - m| * fi'] = df['|xi - m|'] * df['Frequências']
# Encontrando o desvio médio
Dm = df['|xi - m| * fi'].sum() / n
print(Dm)
''' Utilizando o Numpy '''
import numpy as np
dicio = {2: 4, 3: 5, 4: 9, 5: 6}
lista = list(k for k, v in dicio.items() for _ in range(v))
Dm = np.mean(np.absolute(lista - np.mean(lista)))
print(Dm)
Julia
valor = [2, 3, 4, 5]
freq = [4, 5, 9, 6]
# Total de frequências
n = sum(freq)
# Calculando a média (m)
m = sum(valor .* freq) / n
# Encontrando o desvio médio (Dm)
Dm = sum(abs.(valor .- m) .* freq) / n
# Descobrindo os meses
meses = 12 * Dm
resto_meses = meses - trunc(Int, meses)
# Descobrindo os dias
dias = 30 * resto_meses
resto_dias = dias - trunc(Int, dias)
# Descobrindo as horas
horas = 24 * resto_dias
println("Desvio médio: $Dm")
println("Resposta: $(trunc(Int, meses)) meses, $(trunc(Int, dias)) dias e $(trunc(Int, horas)) horas")
# RESPOSTAS:
# Desvio médio: 0.8645833333333334
# Resposta: 10 meses, 11 dias e 6 horas
Dados agrupados COM intervalos de classe
Fórmula:
$$\large D_{m} = \frac{\sum_{i=1}^{n} (| x_{i}-\bar{x} | \cdot f_{i})}{n}$$
Sendo:
- $D_{m}:$ desvio-médio
- $| |:$ módulo, absoluto (transforma todos os números em positivos)
- $x_{i}:$ cada dado da série de dados
- $f_{i}:$ cada frequência da série de dados
- $\bar{x}:$ média aritmética do conjunto de dados e suas frequências
- $n$: total de elementos da frequência
Python :
# Encontrando o ponto médio (a média) de cada intervalo de classe
pm = list((float(k.split( ' - ' )[0])+ float(k.split( ' - ' )[1])) / 2 for k in list(dicionario.keys()))
# Criando uma lista de frequências
freq = list(dicionario.values())
# Total de frequências
n = sum(freq)
# Calculando a média (m)
m = sum(list(map(lambda x, y: abs(x*y), pm, freq)))/n
# Encontrando o desvio médio
Dm = sum(list(map(lambda x, y: abs(x - m)*y, pm, freq)))/n
Julia:
# Encontrando o ponto médio (a média) de cada intervalo de classe
pm = [(parse(Float64, split(interval, " - ")[1]) + parse(Float64, split(interval, " - ")[2])) / 2 for (interval, freq) in dicionario]
# Encontrando as frequências
freq = values(dicionario)
# Total de frequências
n = sum(freq)
# Calculando a média (m)
m = sum(valor .* freq) / n
# Encontrando o desvio médio (Dm)
Dm = sum(abs.(valor .- m) .* freq) / n
Exemplos
Determine o valor do desvio médio da distribuição de idades com intervalos de classe a seguir.
Idades | Frequências |
---|---|
10 – 15 | 5 |
15 – 20 | 10 |
20 – 25 | 15 |
25 – 30 | 15 |
30 – 35 | 20 |
35 – 40 | 10 |
Total | 75 |
Python
''' Utilizando somente o Python '''
dicio = {'10 - 15': 5, '15 - 20': 10, '20 - 25': 15, '25 - 30': 15, '30 - 35': 20, '35 - 40': 10}
# Encontrando o ponto médio
pm = list(map(lambda x: (int(x.split(' - ')[0]) + int(x.split(' - ')[1])) / 2, dicio.keys()))
# Lista de frequências
freq = list(dicio.values())
# Total de frequências (n) e a média (m)
n = sum(freq)
m = sum(list(map(lambda x, y: abs(x*y), pm, freq)))/n
# Encontrando o desvio médio
Dm = sum(list(map(lambda x, y: abs(x - m)*y, pm, freq)))/n
''' Convertendo o resultado em um valor temporal '''
# Como o resultado foi acima de 1, sabemos que o tempo é maior que 1 ano.
# Descobrindo os anos
anos = int(Dm)
resto_a = Dm - anos
# Descobrindo os meses
meses = int(12 * resto_a)
resto_m = 12 * resto_a - meses
# Descobrindo os dias
dias = int(30 * resto_m)
print(f'Desvio médio: {Dm}')
print(f'Resposta: {int(anos)} anos, {int(meses)} mês e {int(dias)} dias')
Julia
dicionario = Dict("10 - 15"=>5, "15 - 20"=>10, "20 - 25"=>15, "25 - 30"=>15, "30 - 35"=> 20, "35 - 40"=>10)
# Ponto médio de cada intervalo (mantendo a correspondência com a ordem das frequências)
pm_freq_pairs = [(parse(Float64, split(interval, " - ")[1]) + parse(Float64, split(interval, " - ")[2])) / 2 => freq for (interval, freq) in dicionario]
# Separando os pontos médios (as médias) de cada intervalo de classe
pm = [pair[1] for pair in pm_freq_pairs]
# Separando os valores das frequências
freq = [pair[2] for pair in pm_freq_pairs]
# Total de frequências (n) e a média (m)
n = sum(freq)
m = sum(pm .* freq) / n
# Encontrando o desvio médio
Dm = sum(abs.(pm .- m) .* freq) / n
# Descobrindo os meses
anos = trunc(Int, Dm)
resto_a = Dm - anos
# Descobrindo os meses
meses = trunc(Int, 12 * resto_a)
resto_m = 12 * resto_a - meses
# Descobrindo os dias
dias = trunc(Int, 30 * resto_m)
println("Desvio médio: $Dm")
println("Resposta: $(trunc(Int, anos)) anos, $(trunc(Int, meses)) mês e $(trunc(Int, dias)) dias")
# RESPOSTAS:
# Desvio médio: 6.133333333333334
# Resposta: 6 anos, 1 mês e 18 dias
Deixe um comentário