Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 206

 
Quantum:

Facto interessante

As definições dos valores da densidade de distribuição gama na tradução russa de

Johnson N.L., Kotz S., Balakrishnan N. Univariate distribuições contínuas. parte 1 e a versão anterior em inglês são diferentes:



mas a versão inglesa tem uma gralha suspeita devido a caracteres diferentes.

Não é uma gralha. Se se der ao trabalho de olhar para vários tutoriais gama diferentes... Verá que o apoio definido de forma diferente é... Em algum lugar com zero e em algum lugar sem zero.
 
Alexey Burnakov:
Isto não é um erro de impressão. Se se der ao trabalho de procurar em vários tutoriais gama diferentes... Vais ver que o helpdesk é definido de forma diferente... Em algum lugar com zero e em algum lugar sem zero.

Você não se preocupa em olhar para esses mesmos materiais e citá-los, ao contrário de @Quantum.

E você até faz referências ao Excel e ao Python, para não dar um exemplo claro.

Até agora você é o único a praticar a sagacidade.

Não te esqueças de citar a resposta do R, se a tiveres, claro.

 

Como é que os criadores de R explicam os seus resultados:

dgamma(0,0.5,1)=inf

pgamma(0,0.5,1)=0

se tiverem um ponto 0 incluído (como visto na definição), dá densidade infinita a x=0, e então ao integrar em pgamma(x,0.5,1) o infinito é considerado como zero, como se não existisse.

 
Quantum:

Como os desenvolvedores R vão explicar seus resultados:

Boa pergunta, mas porque a fazes aqui no fórum? Segundo Renat, você tem uma equipe inteira de cientistas lá analisando algoritmos R, pergunte a eles, e depois nos diga. Compreender o código fonte de R é responsabilidade direta da sua equipe, se você quiser fazer uma porta completa.

Parece-me agora que toda a sua "análise de algoritmos R" é fazer funções com os mesmos parâmetros que em R, com implementação por manuais universitários sem entrar em detalhes. E então mal-entendidos como chamar "0^0=1" um erro ocorre por causa disso.
Com a tendência atual você acabará com funções com interface parecida com R que se comportam de forma diferente sob certas condições devido a diferentes implementações. E se alguém quiser transferir o seu código de R para mql, finalmente terá resultados diferentes, cansar-se-á de procurar o porquê dos resultados serem diferentes, e desistirá de tudo isso. Os testes unitários revelarão apenas uma pequena fracção de tais diferenças, porque cobrirão apenas alguns dados comuns não problemáticos.

É uma abordagem muito estranha copiar a interface do R, fazer sua própria implementação de funções sem mesmo estudar o código fonte do R, verificar os resultados por wolfram. O que queres conseguir com esta abordagem?
O que você faz eu posso chamar de "biblioteca estatística auto-escrita mql, com interface copiada de R, e em situações não especificadas adaptadas à wolfram". Todas as outras palavras sobre R em https://www.mql5.com/ru/articles/2742 são apenas marketnig, não tendo nada a ver com R. Desapontamento.

 
Quantum:

e então ao integrar em pgamma(x,0.5,1) o infinito é considerado como zero, como se não existisse.

Vamos dar um exemplo mais simples:
x=1*10^(-90)
O número é muito pequeno, não zero, e não há incertezas.
> dgamma(1*10^(-90), 0.5, 1)
[1] 5.641896e+44
> pgamma(1*10^(-90), 0.5, 1)
[1] 1.128379e-45

Tungsténio, o resultado é o mesmo:
PDF[GammaDistribution[0.5,1], 1*10^(-90)]
5.6419×10^44
CDF[GammaDistribution[0.5,1], 1*10^(-90)]
1.12838×10^-45

Agora, parafraseando a sua pergunta, sem qualquer infinidade nas fórmulas:
Como integrar dgamma, que retorna grandes números como 5,641896e+44, para acabar com um número muito pequeno1,128379e-45?
A resposta é não.* Integrar dgamma() não é usado para calcular pgamma(), existem outras fórmulas, e o infinito de dgamma() não é usado em cálculos.

Eu entendo o cálculo de pgamma(0, 0.5, 1) neste caso como - Se você pegar um conjunto infinito de números [0;Inf), e selecionar aleatoriamente um deles, qual é a chance de selecionar um número <=0 ? A resposta é 1/Inf , ou 0. Que corresponde ao resultado de pgamma(). Corrija-me se algo está errado, não sou muito bom a trabalhar com infinitos e limites ao nível da intuição e da lógica.

*onde tropecei, subestimando a taxa na qual o resultado de dgamma() diminui como x diminui. por favor ignore essa afirmação.

 
Dr. Trader:

Boa pergunta, mas porque a fazes aqui no fórum? Segundo Renat, você tem uma equipe inteira de cientistas trabalhando em algoritmos R, pergunte a eles e nos fale sobre isso mais tarde. Compreender o código fonte de R é responsabilidade direta da sua equipe, se você quiser fazer uma porta completa.

Agora parece-me que toda a sua "análise de algoritmos R" é fazer funções com os mesmos parâmetros que em R, com implementação usando livros de texto universitários sem entrar em detalhes. E então mal-entendidos como chamar "0^0=1" um erro ocorre por causa disso.
Com a tendência atual você acabará com funções com interface parecida com R que se comportam de forma diferente sob certas condições devido a diferentes implementações. E se alguém quiser transferir o seu código de R para mql, finalmente terá resultados diferentes, cansar-se-á de procurar o porquê dos resultados serem diferentes, e desistirá de tudo isso. Os testes unitários revelarão apenas uma pequena fracção de tais diferenças, porque cobrirão apenas alguns dados comuns não problemáticos.

É uma abordagem muito estranha copiar a interface do R, fazer sua própria implementação de funções sem mesmo estudar o código fonte do R, verificar os resultados por wolfram. O que queres conseguir com esta abordagem?
O que você está fazendo eu posso chamar de "biblioteca estatística auto-escrita mql, com interface copiada de R, e em situações não especificadas adaptadas à wolfram". Todas as outras palavras sobre R em https://www.mql5.com/ru/articles/2742 são apenas marketnig, não tendo nada a ver com R. Decepcionante.

Sobre R, nós nos enganamos, incluindo eu. É claro que podemos culpar esta ilusão com meta-cotações, mas a verdade é diferente.

As pessoas que usam R podem recordar a história da promoção de R ao seu Olympus. Totalmente arrancado de S em 1993, todo o sistema R foi amplamente conhecido em círculos estreitos por mais 10 anos. E só depois de 10 anos desde o seu início, com 20 anos de história com S, desde o início da década de noughties começou uma subida gradual e chegou ao topo há cinco anos e hoje tem apenas um concorrente, python. Hoje o R é um enorme sistema que representa o padrão nas estatísticas.

Daí a conclusão: os análogos de R dentro da MKL são impossíveis.

Com o que estamos a lidar?

Estamos lidando com um processo de desenvolvimento muito positivo para o MKL5 em termos de funções matemáticas. Se as metaquotas conseguem repor o conjunto de funções matemáticas com análogos de funções do pacote stats R, este processo só deve ser bem-vindo. Dito isto, é uma escolha muito boa tomar R ao invés de qualquer outro pacote matemático como o original para imitação. Mas isto não é uma importação de funções de R - estas são funções escritas recentemente que são análogas e que podem ou não coincidir com o original. Mas a não correspondência não diminui em nada a importância do trabalho iniciado pelas metaquotas. E as pessoas que decidem portar código de R para MKL5 devem se lembrar que é outra implementação relativa a R com suas próprias nuances, seus próprios bugs, seu próprio ambiente de linguagem.

Portanto, não há necessidade de comparar nada. O MKL5 está sendo ampliado com funções estatísticas e isso é bom. Se o método de gráfico for adicionado a isto, será uma revolução nas ferramentas gráficas do MKL5.

PS

E você, eu e muitos outros usuários de R não ficaremos desapontados apenas em um caso: o terminal será reescrito e sua linguagem de programação será R.

 

A primeira versão da jangada já apareceu:https://www.mql5.com/ru/forum/97153/page10#comment_3831485

Você terá que suportar erros em R; a crença na infalibilidade é um mau companheiro. Também desmascarámos o mito sobre a velocidade dos cálculos em R. O código ali está escrito com uma simplicidade e descuido.

O erro usando o AS 243 é indiscutível e comprovado por nossos estudos de qualidade de resultados e confirmado por materiais de terceiros.

Agora só estão a discutir sobre zero, mas também vão ter de desistir aqui. Você já está se esforçando para se afastar do ponto sugerindo outros pontos.

Mais uma vez, fizemos um trabalho de qualidade, lidamos com o tema e cobrimos tudo com testes.

Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее"
Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее"
  • www.mql5.com
Опубликована статья Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее: Автор: MetaQuotes Software Corp...
 

Na língua R, que - corretamente - vem de S e existe há pelo menos 15 anos, se não 20, as pessoas com diplomas avançados fornecem os códigos para cada função estatística. Professores, professores associados nos departamentos de estatística, de várias maneiras, nas universidades americanas. Seus cálculos não são apenas estupidamente aceitos em compromissos porque o fizeram de graça, mas são acompanhados por publicações científicas em periódicos revisados por pares. E isto aplica-se a qualquer função e pacote menos importante. E isto é importante! Por exemplo, quando eu uso uma função para encontrar o poder de um teste, eu tenho que entrar com um argumento para o tamanho do efeito. E na documentação li que o desvio padrão combinado é contado desta forma. Eu vou à internet, encontro o autor do método, leio sobre ele... E eu discuto sobre os resultados da aplicação desta função.

O dgamma é baseado no código de distribuição binomial fornecido por Catherine Loader. O artigo dela para este método é do ano 2000. Esteja à vontade para lê-lo.

E agora a questão do MQL - você escreve seus algoritmos, é claro que você está tomando emprestado quase todos eles. Em casos raros você diz que o algoritmo não é suficientemente preciso, mas há outro algoritmo descrito nesta revista e nós o usaremos. E quanto aos outros algoritmos? Você escreve na documentação que os está emprestando? Acho que não vais reinventar o cálculo da probabilidade na distribuição binomial...

Há alguma referência como essa na sua referência?

pwr.t2n.test {pwr} R Documentação

Cálculos de potência para duas amostras (tamanhos diferentes) de testes t


Descrição


Calcular a potência dos testes ou determinar parâmetros para obter a potência alvo (semelhante ao power.t.test).


Utilização


pwr.t2n.test(n1 = NULL, n2= NULL, d = NULL, sig.level = 0.05, potência = NULL,

alternativa = c("two.sided",

"menos", "maior"))

Argumentos


n1

Número de observações na primeira amostra

n2

Número de observações na segunda amostra

d

Tamanho do efeito

nível sig.level

Nível de significância (probabilidade de erro Tipo I)

energia

Potência do teste (1 menos a probabilidade de erro Tipo II)

alternativa

uma cadeia de caracteres especificando a hipótese alternativa, deve ser uma de "dois.sided" (padrão), "maior" ou "menor".

Detalhes


Exatamente um dos parâmetros 'd', 'n1', 'n2', 'power' e 'sig.level' deve ser passado como NULL, e esse parâmetro é determinado a partir dos outros. Repare que o último tem um padrão não-NULL, portanto NULL deve ser explicitamente passado se você quiser calculá-lo.


Valor


Objeto da classe ''power.htest'', uma lista dos argumentos (incluindo o computado) aumentada com elementos 'método' e 'nota'.


Nota


O 'uniroot' é usado para resolver equações de poder para desconhecidos, de modo que você pode ver erros a partir dele, notavelmente sobre a incapacidade de colocar a raiz entre parênteses quando argumentos inválidos são dados.


Autor(es)


Stephane Champely <champely@univ-lyon1.fr> mas esta é uma mera cópia da obra de Peter Dalgaard (power.t.test)


Referências


Cohen, J. (1988). Análise do poder estatístico para as ciências comportamentais (2ª ed.). Hillsdale,NJ: Lawrence Erlbaum.

E se você pegar emprestado o código, sem citar a fonte do código e o autor do método, seu trabalho é plágio. E como será visto por você na comunidade estatística, se alguns Quantum publicarem um artigo de divulgação sobre a função de densidade incorreta derivada do trabalho de Catherine, é uma grande questão. Eu não acho que eles vão...

Para a família gama de funções:

GammaDist {stats} R Documentação

A Distribuição Gama


Descrição


Densidade, função de distribuição, função de quantil e geração aleatória para a distribuição Gama com parâmetros de forma e escala.


Utilização


dgamma(x, forma, taxa = 1, escala = 1/ taxa, log = FALSO)

pgamma(q, forma, taxa = 1, escala = 1/ taxa, inferior.cauda = VERDADEIRO,

log.p = FALSO)

qgamma(p, forma, taxa = 1, escala = 1/ taxa, inferior.cauda = VERDADEIRO,

log.p = FALSO)

rgamma(n, forma, taxa = 1, escala = 1/ taxa)

Argumentos


x, q

vector de quantis.

p

vector de probabilidades.

n

número de observações. Se comprimento(n) > 1, o comprimento é tomado para ser o número necessário.

tarifa

Uma forma alternativa de especificar a escala.

forma, escala

parâmetros de forma e escala. Deve ser positivo, estritamente em escala.

log, log.p

lógico; se VERDADEIRO, as probabilidades/densensidades p são retornadas como log(p).

lower.tail

lógico; se Verdadeiro (padrão), as probabilidades são P[X ≤ x], caso contrário, P[X > x].

Detalhes


Se a escala for omitida, ela assume o valor padrão de 1.


A distribuição Gama com parâmetros forma = a e escala = s tem densidade


f(x)= 1/(s^a Gama(a)) x^(a-1) e^-(x/s)


para x ≥ 0, a > 0 e s > 0. (Aqui Gamma(a) é a função implementada pela gamma() de R e definida na sua ajuda. Note que a = 0 corresponde à distribuição trivial com toda a massa no ponto 0).


A média e a variância são E(X) = a*s e Var(X) = a*s^2.


O perigo acumulado H(t) = - log(1 - F(t)) é


-pgamma(t, ..., inferior = FALSO, log = VERDADEIRO)

Note que para valores pequenos de forma (e escala moderada) uma grande parte da massa da distribuição Gama está em valores de x tão próximos de zero que serão representados como zero na aritmética do computador. Portanto, o rgamma pode muito bem retornar valores que serão representados como zero. (Isto também acontecerá para valores de escala muito grandes, uma vez que a geração real é feita para a escala = 1).


Valor


dgamma dá a densidade, pgamma dá a função de distribuição, qgamma dá a função de quantil, e rgamma gera desvios aleatórios.


Argumentos inválidos resultarão no valor de retorno NaN, com um aviso.


O comprimento do resultado é determinado por n para rgamma, e é o máximo dos comprimentos dos argumentos numéricos para as outras funções.


Os argumentos numéricos, além de n, são reciclados ao longo do resultado. Apenas os primeiros elementos dos argumentos lógicos são utilizados.


Nota


A parametrização S (Becker et al (1988) foi via forma e taxa: S não tinha parâmetro de escala. Na escala de R 2.x.y teve precedência sobre a taxa, mas agora é um erro fornecer ambos.


O pgamma está intimamente relacionado com a função gama incompleta. Como definido por Abramowitz e Stegun 6.5.1 (e por 'Receitas Numéricas'), isto é


P(a,x) = 1/Gamma(a) integral_0^x t^(a-1) exp(-t) dt


P(a, x) é pgamma(x, a). Outros autores (por exemplo Karl Pearson em suas tabelas de 1922) omitem o fator normalizador, definindo a função gama incompleta γ(a,x) como gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt, ou seja, pgamma(x, a) * gamma(a). Outros ainda usam a função gama 'superior' incompleta,


Gama(a,x) = integral_x^Inf t^(a-1) exp(-t) dt,


que pode ser calculado por pgamma(x, a, lower = FALSE) * gamma(a).


Note no entanto que pgamma(x, a, ...) atualmente requer um > 0, enquanto a função gama incompleta também é definida para negativo a. Nesse caso, você pode usar gamma_inc(a,x) (para Γ(a,x)) a partir do pacote gsl.


Veja também https://en.wikipedia.org/wiki/Incomplete_gamma_function, ou http://dlmf.nist.gov/8.2#i.


Fonte


O dgamma é calculado através da densidade de Poisson, usando código contribuído por Catherine Loader (ver dbinom).


pgamma usa um algoritmo não publicado (e não documentado de outra forma) "principalmente por Morten Welinder".


qgamma é baseado em uma tradução em C de


O melhor, D. J. e D. E. Roberts (1975). Algoritmo AS91. Pontos percentuais da distribuição do qui-quadrado. Estatística Aplicada, 24, 385-388.


mais um passo final de Newton para melhorar a aproximação.


rgamma para forma >= 1 usos


Ahrens, J. H. e Dieter, U. (1982). A geração de variações gama por uma técnica de rejeição modificada. Comunicações do ACM, 25, 47-54,


e para 0 < forma < 1 usos


Ahrens, J. H. e Dieter, U. (1974). Métodos computacionais para amostragem a partir de distribuições gama, beta, Poisson e binomial. Informática, 12, 223-246.


Referências


Becker, R. A., Chambers, J. M. e Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.


Shea, B. L. (1988) Algoritmo AS 239, Chi-squared e incompleto Gamma integral, Estatística Aplicada (JRSS C) 37, 466-473.


Abramowitz, M. e Stegun, eu. A. (1972) Handbook of Mathematical Functions (Manual de Funções Matemáticas). Nova Iorque: Dover. Capítulo 6: Gama e Funções Relacionadas.


Biblioteca Digital de Funções Matemáticas do NIST. http://dlmf.nist.gov/, seção 8.2.


Então, queridos, portar código é uma tarefa de nível completamente diferente da montagem desse código em uma série de escritos de cientistas estatísticos.

 

Esta parte é um disparate científico:

6. Обнаруженные ошибки расчетов в R

В процессе тестирования расчетов в R была обнаружена ошибка расчета функции плотности для распределений Gamma, и ChiSquare и Noncentral ChiSquare в точке x=0.

> n <- 5
> k <- seq(0,1,by=1/n)
> gamma_pdf<-dgamma(k, 1,1, log = FALSE)
> gamma_cdf<-pgamma(k, 1,1, log = FALSE)
> k
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> gamma_pdf
[1] 1.0000000 0.8187308 0.6703200 0.5488116 0.4493290 0.3678794
> gamma_cdf
[1] 0.0000000 0.1812692 0.3296800 0.4511884 0.5506710 0.6321206

Значение вероятности гамма-распределения в точке x=0 считается верно (gamma_cdf=0), но значение плотности гамма-распределения (функция dgamma() в R) в точке x=0 должно быть равно 0 (а показывает gamma_pdf=1) по определению плотности вероятности гамма-распределения.

Для функций ChiSquare и Noncentral ChiSquare плотность вероятности в точке x=0 также вычисляется с ошибкой:

> n <- 5
> k <- seq(0,1,by=1/n)
> chisquare_pdf<-dchisq(k,2,log = FALSE)
> chisquare_cdf<-pchisq(k,2,log = FALSE)
> k
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> chisquare_pdf
[1] 0.5000000 0.4524187 0.4093654 0.3704091 0.3351600 0.3032653
> chisquare_cdf
[1] 0.00000000 0.09516258 0.18126925 0.25918178 0.32967995 0.39346934
> n <- 5
> k <- seq(0,1,by=1/n)
> nchisquare_pdf<-dchisq(k,2,1,log = FALSE)
> nchisquare_cdf<-pchisq(k,2,1,log = FALSE)
> k
[1] 0.0 0.2 0.4 0.6 0.8 1.0
> nchisquare_pdf
[1] 0.3032653 0.2882986 0.2737496 0.2596492 0.2460204 0.2328798
> nchisquare_cdf
[1] 0.00000000 0.05914973 0.11534730 0.16867948 0.21923842 0.26712020

В точке x=0 функция dchisq()  выдает ненулевые значения 0.5 и 0.3032653, при этом функция pchisq() вероятности вычисляет правильно (они равны 0).

Deve ser chamado - diferenças nas convenções ao calcular as funções de densidade no ponto extremo para distribuições unidirecionais. E explique para os estatísticos - e porque você se ater a outras convenções e não ao nível do 3º ano (porque a Wolfram pensa assim).

Agora esta é a única junta encontrada que é relevante para a seção sobre direito:

Для расчета вероятности нецентрального T-распределения Стьюдента в языке R используется алгоритм AS 243, предложенный Lenth [6]. Достоинством этого метода является быстрый рекуррентный расчет членов бесконечного ряда с неполной бета-функций. Но в статье [7] было показано, что из-за ошибки оценки точности при суммировании членов ряда данный алгоритм приводит к ошибкам (таблица 3 в статье [7]), особенно для больших значений параметра нецентральности delta. Авторы статьи [7] предложили скорректированный алгоритм рекуррентного расчета вероятности нецентрального T-распределения.

У нас в в статистической библиотеке MQL5 используется правильный алгоритм для расчета вероятностей из статьи [7] , что дает точные результаты.

 

Estou a dizer-te, estás a esforçar-te tanto para te afastares de uma discussão concreta.

Pelo menos você reconheceu um problema. Esqueceu-se de admitir que temos especialistas que são capazes de verificar, compreender e encontrar uma solução melhor.

Alexey, espera por uma resposta do R. E repara como deixaste de responder às perguntas do @Quantum. Ele está deliberadamente a conduzir-te em direcção a um objectivo conhecido.

Até agora, do nosso lado está o Mathematica + Wolfram Alpha + Mathlab + MQL5, enquanto do seu lado está o opsorced R. Que código está escrito de forma descuidada e nada polido como seria de esperar de um projecto com 20 anos de idade.