Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 206
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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.
e então ao integrar em pgamma(x,0.5,1) o infinito é considerado como zero, como se não existisse.
x=1*10^(-90)
O número é muito pequeno, não zero, e não há incertezas.
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.
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.
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.
Значение вероятности гамма-распределения в точке x=0 считается верно (gamma_cdf=0), но значение плотности гамма-распределения (функция dgamma() в R) в точке x=0 должно быть равно 0 (а показывает gamma_pdf=1) по определению плотности вероятности гамма-распределения.
Для функций ChiSquare и Noncentral ChiSquare плотность вероятности в точке x=0 также вычисляется с ошибкой:
В точке 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.