Alguém tem uma função de regressão Theil-Sen escrita em T-SQL?
Encontrei um escrito em Perl , mas não consigo recodificá-lo em SQL.
Alguém tem uma função de regressão Theil-Sen escrita em T-SQL?
Encontrei um escrito em Perl , mas não consigo recodificá-lo em SQL.
Eu estava mentindo quando disse que não consigo recodificá-lo em SQL. Eu era muito preguiçoso. Aqui está o código com um exemplo de uso.
O código é baseado em uma biblioteca TheiSen perl, usando QuickMedian . Vamos definir um novo tipo de tabela para passar facilmente nossos dados para o procedimento.
Observe a coluna ID, que é importante aqui, pois nossa solução usa a instrução CROSS APPLY para obter a interpretação correta do loop interno encontrado em TheilSen.pm.
Também precisaremos de um novo tipo de dados para armazenar uma matriz de valores de tipo real.
Aqui está a função f_QuickMedian , retornando mediana para determinado array. O crédito por este vai para Itzik Ben-Gan .
E o Estimador p_TheilSen :
Exemplo:
Retorna:
Apenas para comparação, a versão perl retorna os seguintes valores para o mesmo conjunto de dados:
Eu uso o estimador TheilSen para calcular a métrica DaysToFill para sistemas de arquivos. Apreciar!
Verifiquei também T-SQL, Oracle e servidores em geral (muito complexos para serem escritos em SQL puro).
No entanto, você pode estar interessado nisso (um pacote científico/estatístico para Python). O algoritmo é implementado lá também e em Python. Python é uma linguagem que os humanos têm pelo menos alguma chance de entender, ao contrário do Perl.
Sua pergunta me intrigou e eu procurei. Existem bibliotecas C e C++ que contêm esse algoritmo - e também está disponível em alguns pacotes R. E a postagem de @srutzky também parece interessante.
+1 para uma pergunta interessante BTW - e bem-vindo ao fórum :-)
Isso provavelmente seria uma boa opção para fazer algo no SQLCLR, semelhante à seguinte Pergunta/Resposta (também aqui no DBA.SE):
Existe uma implementação do SQL Server do problema de substring comum mais longa?
Quando tiver tempo mais tarde, verei como isso seria viável.