O desvio padrão caracteriza a dispersão entre os dados em determinada população ou amostra. Esse índice de variação mede a dispersão em torno da média.
Pode ser encontrado simplesmente tirando a raiz quadrada do valor da variância.
Dados NÃO agrupados
Fórmula para amostras:
$$
\large \begin{matrix} s = \sqrt{\dfrac{\sum_{i=1}^{n}(x_{i}-\bar{x})^2}{n-1}}\\
\small ou \\
\large s = \sqrt{\dfrac{\sum_{i=1}^{n}(x_{i}-\bar{x})^2}{\sum_{i=1}^{n}f_{i}-1}} \end{matrix}
$$
Fórmula para populações:
$$
\large \begin{matrix} \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(x_{i}-\mu)^2}{N}}\\
\small ou \\
\large \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(x_{i}-\mu)^2}{\sum_{i=1}^{N}f_{i}}} \end{matrix}
$$
Sendo:
- $s$: desvio padrão da amostra
- $\sigma$: desvio padrão da população
- $x_{i}$: cada dado da série de dados
- $\bar{x}$ ou $\mu$: média aritmética do conjunto de dados
- $n – 1$: total de elementos da amostra (Correção de Bessel)
- $N$: total de elementos da população
Python :
# Amostras
s = (sum(list(map(lambda x: ((x - m)**2), val))) / (len(val) - 1))**0.5
# Populações
s = (sum(list(map(lambda x: ((x - m)**2), val))) / len(val))**0.5
Julia :
# Amostras
s = sum(((val .- m).^2) / (length(val)-1))^0.5
# Populações
s = sum(((val .- m).^2) / length(val))^0.5
Libs:
Interpretação do desvio padrão ( Regra Empírica )
O intervalo ($\bar{x}$ ± $s$) ou ($\mu$ ± $\sigma$) contém entre 60% e 80% de todas as observações. A porcentagem aproxima de 70% para distribuições aproximadamente simétricas, chegando a 90% para distribuições fortemente simétricas.
O intervalo ($\bar{x}$ ± $2s$) ou ($\mu$ ± $2 \sigma$) contém aproximadamente 95% das observações para distribuições simétricas e aproximadamente 100% para distribuições com assimetria elevada.
O intervalo ($\bar{x}$ ± $3s$) ou ($\mu$ ± $3 \sigma$) contém aproximadamente 100% das observações, para distribuições simétricas.
Exemplo
Determine o valor do desvio padrão do conjunto de dados Z = {1, 18, 27, 35, 43, 52, 69}. Considere esse conjunto como uma população e como a amostra de uma população.
Python
''' Sem o uso de bibliotecas '''
lista = [1, 18, 27, 35, 43, 52, 69]
# encontrando a media
m = sum(lista) / len(lista)
# Calculando o desvio padrão amostral
s1 = (sum(list(map(lambda x: (x - m)**2, lista))) / (len(lista) - 1))**0.5
# Calculando o desvio padrão populacional
s2 = (sum(list(map(lambda x: (x - m)**2, lista))) / len(lista))**0.5
print(f'Desvio padrão amostral: {s1}')
print(f'Desvio padrão populacional: {s2}')
''' Usando o Numpy '''
import numpy as np
lista = [1, 18, 27, 35, 43, 52, 69]
# Calculando o desvio padrão amostral
s1 = np.std(lista, ddof=1)
# Calculando o desvio padrão populacional
s2 = np.std(lista)
print(f'Desvio padrão amostral: {s1}')
print(f'Desvio padrão populacional: {s2}')
Julia
" Sem o uso de bibliotecas "
val = [1, 18, 27, 35, 43, 52, 69]
# encontrando a media
m = sum(val) / length(val)
# Calculando o desvio padrão amostral
s1 = sum((val .- m).^2 / (length(val)-1))^0.5
# Calculando o desvio padrão populacional
s2 = sum((val .- m).^2 / length(val))^0.5
Dados agrupados SEM intervalos de classe
Fórmula para amostras:
$$
\large \begin{matrix} s = \sqrt{\dfrac{\sum_{i=1}^{n}(x_{i}-\bar{x})^2 \cdot f_{i}}{n-1}}\\
\small ou \\
\large s = \sqrt{\dfrac{\sum_{i=1}^{n}(x_{i}-\bar{x})^2 \cdot f_{i}}{\sum_{i=1}^{n}f_{i}-1}} \end{matrix}
$$
Fórmula para populações:
$$
\large \begin{matrix} \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(x_{i}-\mu)^2 \cdot f_{i}}{N}}\\
\small ou \\
\large \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(x_{i}-\mu)^2 \cdot f_{i}}{\sum_{i=1}^{N}f_{i}}} \end{matrix}
$$
Sendo:
- $s$: desvio padrão da amostra
- $\sigma$: desvio padrão da população
- $x_{i}$: cada dado da série de dados
- $\bar{x}$ ou $\mu$: média aritmética do conjunto de dados
- $f_{i}$: frequência simples da classe do dado da série
- $n – 1$: total de elementos da amostra (Correção de Bessel)
- $N$: total de elementos da população
Python :
''' Amostras '''
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), val, freq))) / sum(freq)
# Calculando o desvio padrão amostral
s = (sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / (sum(freq) - 1))**0.5
''' Populações '''
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), val, freq))) / sum(freq)
# Calculando o desvio padrão populacional
s = (sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / sum(freq))**0.5
Julia :
""" Amostras """
# Encontrando a media
m = sum(val .* freq) / sum(freq)
# Calculando o desvio padrão amostral
s = sum(((val .- m).^2) .*freq / (sum(freq)-1))^0.5
""" Populações """
# Encontrando a media
m = sum(val .* freq) / sum(freq)
# Calculando o desvio padrão populacional
s = sum(((val .- m).^2) .*freq / sum(freq))^0.5
Libs:
Exemplo
A tabela a seguir se refere à distribuição de frequências das notas dos alunos da turma “A” da disciplina de Estatística e Probabilidade, já trabalhada anteriormente.
Considerando esses dados como uma amostra e como uma população, calcule o desvio padrão.
Notas | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|
Frequências | 1 | 4 | 6 | 9 | 10 | 9 | 5 | 6 |
Python
val = [3, 4, 5, 6, 7, 8, 9, 10]
freq = [1, 4, 6, 9, 10, 9, 5, 6]
m = sum(list(map(lambda x, f: (x * f), val, freq))) / sum(freq)
s1 = (sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / (sum(freq)-1))**0.5
s2 = (sum(list(map(lambda x, f: ((x - m)**2) * f, val, freq))) / sum(freq))**0.5
print(f'Desvio padrão amostral: {s1}')
print(f'Desvio padrão populacional: {s2}')
''' Usando o Numpy '''
import numpy as np
dicio = {3: 1, 4: 4, 5: 6, 6: 9, 7: 10, 8: 9, 9: 5, 10: 6}
# Convertendo os valores do dicionário em uma lista com todos os valores
lista = [k for k, v in dicio.items() for _ in range(v)]
s1 = np.std(lista, ddof=1) # desvio padrão amostral
s2 = np.std(lista) # desvio padrão populacional
print(f'Desvio padrão amostral: {s1}')
print(f'Desvio padrão populacional: {s2}')
Julia
val = [3, 4, 5, 6, 7, 8, 9, 10]
freq = [1, 4, 6, 9, 10, 9, 5, 6]
m = sum(val .* freq) / sum(freq)
s1 = sum(((val .-m).^2) .*freq / (sum(freq)-1))^0.5
s2 = sum(((val .-m).^2) .*freq / sum(freq))^0.5
Dados agrupados COM intervalos de classe
Fórmula para amostras:
$$
\large \begin{matrix} s = \sqrt{\dfrac{\sum_{i=1}^{n}(pm_{i}-\bar{x})^2 \cdot f_{i}}{n-1}}
\small ou \\
\large s = \sqrt{\dfrac{\sum_{i=1}^{n}(pm_{i}-\bar{x})^2 \cdot f_{i}}{\sum_{i=1}^{n}f_{i}-1}} \end{matrix}
$$
Fórmula para populações:
$$
\large \begin{matrix} \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(pm_{i}-\mu)^2 \cdot f_{i}}{N}}
\small ou \\
\large \sigma = \sqrt{\dfrac{\sum_{i=1}^{N}(pm_{i}-\mu)^2 \cdot f_{i}}{\sum_{i=1}^{N}f_{i}}} \end{matrix}
$$
Sendo:
- $s$: desvio padrão da amostra
- $\sigma$: desvio padrão da população
- $pm_{i}$: valor médio de cada intervalo de classe, da série de dados
- $\bar{x}$ ou $\mu$: média aritmética do conjunto de valores médios
- $f_{i}$: frequência de cada intervalo de classe
- $n – 1$: total de elementos da amostra (Correção de Bessel)
- $N$: total de elementos da população
Python :
''' Amostras '''
# Lista de valores com valor médio de cada dado dos intervalos de classe
pm = list(map(lambda x: (float(x.split(' - ')[0]) + float(x.split(' - ')[1])) / 2, dicio.keys()))
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), pm, freq))) / sum(freq)
# Calculando o desvio padrão amostral
s = (sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / (sum(freq) - 1))**0.5
''' Populações '''
# Lista de valores com valor médio de cada dado dos intervalos de classe
pm = list(map(lambda x: (float(x.split(' - ')[0]) + float(x.split(' - ')[1])) / 2, dicio.keys()))
# Encontrando a media
m = sum(list(map(lambda x, f: (x * f), pm, freq))) / sum(freq)
# Calculando o desvio padrão populacional
s = (sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / sum(freq))**0.5
Julia :
""" Amostras """
# 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]
# Separar pontos médios (pm) e frequências (freq) em vetores alinhados
pm = [pair[1] for pair in pm_freq_pairs]
freq = [pair[2] for pair in pm_freq_pairs]
# Cálculos do desvio padrão amostral (s1) e populacional (s2)
# Calculando a Média ponderada
m = sum(pm .* freq) / sum(freq)
# Calculando o Desvio padrão amostral
s = sqrt(sum(((pm .- m) .^ 2) .* freq) / (sum(freq) - 1))
""" Populações """
# 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]
# Separar pontos médios (pm) e frequências (freq) em vetores alinhados
pm = [pair[1] for pair in pm_freq_pairs]
freq = [pair[2] for pair in pm_freq_pairs]
# Cálculos do desvio padrão amostral (s1) e populacional (s2)
# Calculando a Média ponderada
m = sum(pm .* freq) / sum(freq)
# Calculando o Desvio padrão populacional
s = sqrt(sum(((pm .- m) .^ 2) .* freq) / sum(freq))
Exemplo
Notas | Frequências |
---|---|
59.0 – 61.5 | 3 |
61.5 – 64.0 | 5 |
64.0 – 66.5 | 5 |
66.5 – 69.0 | 7 |
69.0 – 71.5 | 9 |
71.5 – 74.0 | 11 |
74.0 – 76.5 | 8 |
76.5 – 79.0 | 7 |
79.0 – 81.5 | 5 |
81.5 – 84.0 | 6 |
84.0 – 86.5 | 4 |
A tabela ao lado mostra o resultado da pesagem de 70 pessoas adultas que utilizaram em um mesmo dia a balança de uma farmácia.
Determine o valor do desvio padrão e realize os cálculos considerando a distribuição de frequências como uma amostra e como uma população.
Python
dicio = {'59.0 - 61.5':3,'61.5 - 64.0':5,'64.0 - 66.5':5,'66.5 - 69.0':7,
'69.0 - 71.5':9,'71.5 - 74.0':11,'74.0 - 76.5':8,'76.5 - 79.0':7,
'79.0 - 81.5':5,'81.5 - 84.0':6,'84.0 - 86.5':4}
# lista de valores com ponto média dos intervalos de classe
pm = list(map(lambda x: (float(x.split(' - ')[0]) + float(x.split(' - ')[1])) / 2, dicio.keys()))
# lista de frequências
freq = list(dicio.values())
m = sum(list(map(lambda x, f: (x * f), pm, freq))) / sum(freq)
s1 = (sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / (sum(freq)-1))**0.5
s2 = (sum(list(map(lambda x, f: ((x - m)**2) * f, pm, freq))) / sum(freq))**0.5
print(f'Desvio padrão amostral: {s1}')
print(f'Desvio padrão populacional: {s2}')
Julia
dicionario = Dict("59.0 - 61.5"=>3,"61.5 - 64.0"=>5,"64.0 - 66.5"=>5,"66.5 - 69.0"=>7,"69.0 - 71.5"=>9,"71.5 - 74.0"=>11, "74.0 - 76.5"=>8,"76.5 - 79.0"=>7,"79.0 - 81.5"=>5,"81.5 - 84.0"=>6,"84.0 - 86.5"=>4)
# 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]
pm = [pair[1] for pair in pm_freq_pairs]
freq = [pair[2] for pair in pm_freq_pairs]
m = sum(pm .* freq) / sum(freq)
s1 = sqrt(sum(((pm .- m) .^ 2) .* freq) / (sum(freq) - 1))
s2 = sqrt(sum(((pm .- m) .^ 2) .* freq) / sum(freq))
println("Desvio padrão amostral: $(s1)")
println("Desvio padrão populacional: $(s2)")
Deixe um comentário