Regressão linear usando Shell Bash + AWK
Publicado por Perfil removido (última atualização em 27/06/2016)
[ Hits: 3.092 ]
Ouvi falar do AWK enquanto estudava Programação Shell Linux, Júlio César; e de maneira bem cômica, ele explica um pouco dessa "Linguagem/Ferramenta/Tudo de bom". kkk
Então vi grande potencial para resolver alguns problemas que gastaria muito tempo, as vezes.
Bem, para quem faz alguma Análise de Dados, e desses dados necessite fazer regressão linear com cálculo das incertezas, vi que o AWK é excelente para fazer tal coisa.
E resolvi compartilhar com a comunidade esse pequeno trabalho, fiquem a vontade para compartilhar, melhorar e contribuir para o maior uso dessa fantástica ferramenta.
Então, basta fazer:
./linear_simples.sh "dados.dat"
por exemplo, e pronto, um arquivo com tudo. Ou quase tudo. ;)
#/bin/bash #---Regressao linear simples------------# # usando awk e shell # Autor: Marcos E. O. Sales # email: marcossales.eng@gmail.com # # feito:03/05/2016 # ultima atualizacao:04/05/2016 #---Regressao linear simples------------# #---(Utilidade)--------------------------------# #Fazer regressao atraves simples atravez # da reta y = a + b*x # atraves de uma entrada de dados. #-------------------------------------------------# # versao: 1.1 #==============================# #-------Definindo funcoes------------------------------------------------------# Uso() { sed -n '/^# ultima/,/^# versao:/ {/^# ultima/b; /^# versao:/b; 1,$p;}' $(basename $0) echo echo "Uso: $(basename "$0") ARQ.dat" echo "Onde ARQ.dat e um arquivo com os valores: Dados x Dados Y" echo -e "\nPara retornar um arquivo formatado com os dados,e com os parametros analizados" exit 0 } # Regressao() { clear sed '1d' "$Dados" |\ awk ' BEGIN { printf "%8s %13s %13s \n", "Dados X", "Dados Y", "sigma Y" } #colocar primeira linha { printf "%8e %13e %8e\n",$1, $2, $3 #printa dados formatados } #operacoes { Somax = Somax + $1 ; Somay = Somay + $2 Mediax = Somax / NR Mediay = Somay / NR somaquadx+=$1*$1 somaquady+=$2*$2 somaxy+=$1*$2 } { cov = ($1-Mediax)*($2-Mediay) desvx = sqrt(($1-Mediax)^2) desvy = sqrt(($2-Mediay)^2) delta = (NR*somaquadx-Somax^2) } END{ a = ((somaquadx*Somay)-(Somax*somaxy))/(delta) b = ((NR*somaxy) - (Somax*Somay))/(delta) sigmay = sqrt((1/(NR-2))*(($2-a-b*$1)^2)) sigmaa = sigmay*sqrt(somaquadx/delta) sigmab = sigmay*sqrt(NR/delta) r = cov/(desvx*desvy) printf "\n%7s\n%8s %7e\n%8s %10e\n %15s \n %1s %8e \n %8s %8e \n %1s %8e\n %8s %8e\n %8s %8e \n" , "\nParametros:\n", "Media X:", Mediax , "Media Y:", Mediay, "Regressao: y = b*x + a", "a:", a, "sigma a:",sigmaa,"b:",b,"sigma b:",sigmab, "Correlacao",r printf "\n%7s %8e\n%7s %8e \n%7s %8e\n", "covariancia:",cov, "desvio x",desvx, "desvio y", desvy}' |tee resultado.txt } #----Definindo o case----------------------------------------------------------# case $# in 0) Uso ;; 1) Dados="$1"; Regressao ;; *) echo -e "\033[01;31mNumero de parametros errados.\033[m" Uso ;; esac #--------------------------------------------------------------------------------------# # Fim do User #--------------------------------------------------------------------------------------#
Mostrar as partições existentes no HD
Pesquisa de grupos do sistema por nome ou GID em AWK
Script Para Formatação de Texto Com Cabeçalho, Rodapé e Campos de Dados Originados de Arquivo em AWK
Utilização de memória swap no Solaris ( swap memory utilization in Solaris )
Pesquisa de grupos do sistema por nome ou GID em AWK
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta