Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 206

 
Quantum:

Dato interesante

Las definiciones de los valores de densidad de la distribución gamma en la traducción al ruso de

Johnson N.L., Kotz S., Balakrishnan N. Univariate continuous distributions. part 1 and the earlier English version are different:



pero la versión inglesa tiene una supuesta errata debido a los diferentes caracteres.

No es una errata. Si te tomas la molestia de mirar varios tutoriales de gamificación... Verá que el apoyo definido de forma diferente es... En algún lugar con cero y en algún lugar sin cero.
 
Alexey Burnakov:
Esto no es un error de imprenta. Si te molestas en buscar entre varios materiales de formación sobre gamificación... Verá que el servicio de asistencia está definido de forma diferente... En algún lugar con cero y en algún lugar sin cero.

No te molestas en mirar estos mismos materiales y citarlos, a diferencia de @Quantum.

E incluso haces referencias a Excel y Python para no dar un ejemplo claro.

Hasta ahora eres el único que practica el ingenio.

No olvides citar la respuesta de R, si la obtienes, por supuesto.

 

¿Cómo explican los desarrolladores de R sus resultados?

dgamma(0,0.5,1)=inf

pgamma(0,0.5,1)=0

si tienen un punto 0 incluido (como se ve en la definición), da una densidad infinita en x=0, y entonces al integrar en pgamma(x,0,5,1) el infinito se considera como cero, como si no existiera.

 
Quantum:

Cómo explicarán los desarrolladores de R sus resultados:

Buena pregunta, pero ¿por qué la haces aquí en el foro? Según Renat, tienes todo un equipo de científicos trabajando en algoritmos de R, pregúntales y cuéntanoslo después. Entender el código fuente de R es responsabilidad directa de su equipo, si quiere hacer un port completo.

Ahora me parece que todo tu "análisis de los algoritmos de R" es hacer funciones con los mismos parámetros que en R, con implementación por libros de texto universitarios sin entrar en detalles. Y luego se producen malentendidos como llamar a "0^0=1" un error por ello.
Con la tendencia actual, acabará teniendo funciones con una interfaz similar a la de R que se comportan de forma diferente en determinadas condiciones debido a las diferentes implementaciones. Y si alguien quiere transferir su código de R a mql, finalmente obtendrá resultados diferentes, se cansará de buscar por qué los resultados son diferentes, y abandonará todo. Las pruebas unitarias sólo revelarán una pequeña fracción de esas diferencias, porque sólo cubrirán algunos datos comunes no problemáticos.

Es un enfoque muy extraño copiar la interfaz de R, hacer su propia implementación de funciones sin siquiera estudiar el código fuente de R, comprobar los resultados por wolfram. ¿Qué quieres conseguir con este enfoque?
Lo que estás haciendo puedo llamarlo "biblioteca estadística autoescrita mql, con interfaz copiada de R, y en situaciones no especificadas adaptada a wolfram". Todas las demás palabras sobre R en https://www.mql5.com/ru/articles/2742 son sólo marketnig, no tienen nada que ver con R. Decepción.

 
Quantum:

y luego al integrar en pgamma(x,0,5,1) el infinito se considera como cero, como si no existiera.

Pongamos un ejemplo más sencillo:
x=1*10^(-90)
La cifra es muy pequeña, no es cero, y no hay incertidumbres.
> dgamma(1*10^(-90), 0.5, 1)
[1] 5.641896e+44
> pgamma(1*10^(-90), 0.5, 1)
[1] 1.128379e-45

Tungsteno, el resultado es el mismo:
PDF[GammaDistribution[0.5,1], 1*10^(-90)]
5.6419×10^44
CDF[GammaDistribution[0.5,1], 1*10^(-90)]
1.12838×10^-45

Ahora, parafraseando tu pregunta, sin infinitos en las fórmulas:
¿Cómo se puede integrar dgamma, que devuelve números grandes como 5,641896e+44, para terminar con un número muy pequeño1,128379e-45?
La respuesta es de ninguna manera.* La integración de dgamma() no se utiliza para calcular pgamma(), hay otras fórmulas, y el infinito de dgamma() no se utiliza en los cálculos.

Entiendo el cálculo de pgamma(0, 0,5, 1) en este caso como - Si se toma un conjunto infinito de números [0;Inf), y se selecciona al azar uno de ellos, ¿cuál es la probabilidad de seleccionar un número <=0 ? La respuesta es 1/Inf , o 0. Que corresponde al resultado de pgamma(). Corrígeme si algo está mal, no soy muy bueno trabajando con infinitos y límites a nivel de intuición y lógica.

*Aquí tropecé, subestimando la velocidad a la que el resultado de dgamma() disminuye a medida que x disminuye. por favor, ignora esa afirmación.

 
Dr.Trader:

Buena pregunta, pero ¿por qué la haces aquí en el foro? Según Renat, tienes a todo un equipo de científicos allí analizando algoritmos de R, pregúntales y luego dinos. Entender el código fuente de R es responsabilidad directa de su equipo, si quiere hacer un port completo.

Ahora me parece que todo tu "análisis de los algoritmos de R" es hacer funciones con los mismos parámetros que en R, con implementación usando libros de texto universitarios sin entrar en detalles. Y luego se producen malentendidos como llamar a "0^0=1" un error por ello.
Con la tendencia actual, acabará teniendo funciones con una interfaz similar a la de R que se comportan de forma diferente bajo ciertas condiciones debido a las diferentes implementaciones. Y si alguien quiere transferir su código de R a mql, finalmente obtendrá resultados diferentes, se cansará de buscar por qué los resultados son diferentes, y lo dejará todo. Las pruebas unitarias sólo revelarán una pequeña fracción de esas diferencias, porque sólo cubrirán algunos datos comunes no problemáticos.

Es un enfoque muy extraño copiar la interfaz de R, hacer su propia implementación de funciones sin siquiera estudiar el código fuente de R, comprobar los resultados por wolfram. ¿Qué quieres conseguir con este enfoque?
Lo que estás haciendo puedo llamarlo "biblioteca estadística autoescrita mql, con interfaz copiada de R, y en situaciones no especificadas adaptada a wolfram". Todas las demás palabras sobre R en https://www.mql5.com/ru/articles/2742 son sólo marketnig, no tienen nada que ver con R. Decepcionante.

Sobre R nos hemos engañado, incluido yo. Por supuesto, podemos culpar de este engaño a las metacitas, pero la verdad es otra.

Las personas que usan R pueden recordar la historia de la promoción de R a su Olimpo. Totalmente arrancado de S en 1993, todo el sistema R fue ampliamente conocido en círculos estrechos durante otros 10 años. Y sólo después de 10 años desde su creación, con 20 años de historia con S, desde el comienzo de la década de los noventa comenzó un ascenso gradual y se abrió camino en el top ten hace cinco años y hoy sólo tiene un competidor, python. Hoy en día R es un sistema enorme que representa el estándar en estadística.

De ahí la conclusión: los análogos de R dentro de la MKL son imposibles.

¿A qué nos enfrentamos?

Estamos ante un proceso de desarrollo muy positivo para MKL5 en cuanto a funciones matemáticas. Si metaquotes consigue reponer el conjunto de funciones matemáticas con análogos de funciones del paquete R de stats, este proceso sólo debería ser bienvenido. Dicho esto, es una muy buena opción tomar R en lugar de cualquier otro paquete matemático como el original para la imitación. Pero esto no es una importación de funciones de R - son funciones recién escritas que son análogas, y que pueden o no coincidir con el original. Pero el hecho de no coincidir no quita en absoluto la importancia de la labor iniciada por las metacitas. Y la gente que decida portar código de R a MKL5 debe recordar que es otra implementación relativa a R con sus propios matices, sus propios errores, su propio entorno de lenguaje.

Por lo tanto, no es necesario comparar nada. MKL5 se está ampliando con funciones estadísticas y eso está bien. Si se añade el método de trazado, será una revolución en las herramientas gráficas de MKL5.

PS

Y tú, yo y muchos otros usuarios de R no estaremos decepcionados sólo en un caso: el terminal será reescrito y su lenguaje de programación será R.

 

Ya ha aparecido la primera versión de la balsa:https://www.mql5.com/ru/forum/97153/page10#comment_3831485

Tendrá que soportar los errores en R; la creencia en la infalibilidad es una mala compañera. También hemos desmontado el mito sobre la velocidad de los cálculos en R. El código allí está escrito con una franqueza y descuido.

El error que supone el uso de la AS 243 es indiscutible y está probado por nuestros estudios de calidad de los resultados y confirmado por materiales de terceros.

Ahora sólo argumentas sobre el cero, pero también tienes que rendirte aquí. Ya te esfuerzas en desviarte del tema sugiriendo otros puntos.

Una vez más, hemos hecho un trabajo de calidad, hemos tratado el tema y hemos cubierto todo con pruebas.

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

En el lenguaje R, que -correctamente- proviene de S y existe desde hace al menos 15 años, si no 20, personas con títulos avanzados proporcionan los códigos para cada función estadística. Catedráticos, profesores asociados en los departamentos de estadística, en muchos sentidos, en las universidades americanas. Sus cálculos no sólo se aceptan estúpidamente en los commits porque lo hicieron gratis, sino que van acompañados de publicaciones científicas en revistas revisadas por pares. Y esto se aplica a cualquier función y paquete menos importante. Por ejemplo, cuando utilizo una función para encontrar la potencia de una prueba, tengo que introducir un argumento para el tamaño del efecto. Y en la documentación he leído que la desviación estándar agrupada se cuenta así. Voy a Internet, busco al autor del método, leo sobre él... Y discuto los resultados de la aplicación de esta función.

dgamma se basa en el código de la distribución binomial proporcionado por Catherine Loader. Su artículo para este método es del año 2000. No dude en leerlo.

Y ahora la pregunta de MQL - escribes tus algoritmos, está claro que estás tomando prestado casi todo. En raras ocasiones dices que el algoritmo no es lo suficientemente preciso, pero hay otro algoritmo descrito en esta revista y lo utilizaremos. ¿Y los demás algoritmos? ¿Escribes en la documentación que los tomas prestados? No creo que vayas a reinventar el cálculo de la probabilidad en la distribución binomial...

¿Hay alguna referencia como esa en su referencia?

pwr.t2n.test {pwr} R Documentación

Cálculos de potencia para pruebas t de dos muestras (diferentes tamaños)


Descripción


Calcule la potencia de las pruebas o determine los parámetros para obtener la potencia objetivo (similar a como lo hace power.t.test).


Uso


pwr.t2n.test(n1 = NULL, n2= NULL, d = NULL, nivel sig = 0.05, potencia = NULL,

alternativa = c("dos.caras",

"menor", "mayor"))

Argumentos


n1

Número de observaciones en la primera muestra

n2

Número de observaciones en la segunda muestra

d

Tamaño del efecto

Nivel de sig.

Nivel de significación (probabilidad de error tipo I)

poder

Potencia de la prueba (1 menos la probabilidad de error de tipo II)

alternativa

una cadena de caracteres que especifica la hipótesis alternativa, debe ser una de "dos caras" (por defecto), "mayor" o "menor

Detalles


Exactamente uno de los parámetros 'd','n1','n2','power' y 'sig.level' debe pasarse como NULL, y ese parámetro se determina a partir de los demás. Obsérvese que el último tiene un valor por defecto no NULL, por lo que debe pasarse explícitamente NULL si se quiere calcular.


Valor


Objeto de la clase ''power.htest'', una lista de los argumentos (incluyendo el calculado) aumentada con elementos 'method' y 'note'.


Nota


'uniroot' se utiliza para resolver la ecuación de potencia para incógnitas, por lo que puede ver errores de la misma, sobre todo acerca de la incapacidad para poner entre paréntesis la raíz cuando se dan argumentos no válidos.


Autor(es)


Stephane Champely <champely@univ-lyon1.fr> pero esto es una mera copia del trabajo de Peter Dalgaard (power.t.test)


Referencias


Cohen, J. (1988). Statistical power analysis for the behavioral sciences (2ª ed.). Hillsdale,NJ: Lawrence Erlbaum.

Y si tomas prestado un código, sin citar la fuente del código y el autor del método, tu trabajo es un plagio. Y cómo se verá en la comunidad estadística, si algún Quantum publica un artículo disimulado sobre una función de densidad incorrecta derivada del trabajo de Catherine, es una gran pregunta. No creo que lo hagan...

Para la familia de funciones gamma:

GammaDist {stats} Documentación de R

La distribución Gamma


Descripción


Densidad, función de distribución, función cuantil y generación aleatoria para la distribución Gamma con parámetros forma y escala.


Uso


dgamma(x, shape, rate = 1, scale = 1/rate, log = FALSE)

pgamma(q, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,

log.p = FALSE)

qgamma(p, shape, rate = 1, scale = 1/rate, lower.tail = TRUE,

log.p = FALSE)

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

Argumentos


x, q

vector de cuantiles.

p

vector de probabilidades.

n

número de observaciones. Si length(n) > 1, la longitud se toma como el número requerido.

tasa

Una forma alternativa de especificar la escala.

forma, escala

parámetros de forma y escala. Debe ser positivo, con una escala estricta.

log, log.p

lógico; si es TRUE, las probabilidades/densidades p se devuelven como log(p).

cola.inferior

lógico; si es TRUE (por defecto), las probabilidades son P[X ≤ x], en caso contrario, P[X > x].

Detalles


Si se omite la escala, asume el valor por defecto de 1.


La distribución Gamma con parámetros forma = a y escala = s tiene densidad


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


para x ≥ 0, a > 0 y s > 0. (Aquí Gamma(a) es la función implementada por gamma() de R y definida en su ayuda. Nótese que a = 0 corresponde a la distribución trivial con toda la masa en el punto 0).


La media y la varianza son E(X) = a*s y Var(X) = a*s^2.


El riesgo acumulado H(t) = - log(1 - F(t)) es


-pgamma(t, ..., lower = FALSE, log = TRUE)

Obsérvese que para valores pequeños de la forma (y escala moderada) una gran parte de la masa de la distribución Gamma está en valores de x tan cercanos a cero que se representarán como cero en la aritmética del ordenador. Por lo tanto, rgamma puede devolver valores que se representarán como cero. (Esto también ocurrirá para valores muy grandes de la escala, ya que la generación real se hace para escala = 1).


Valor


dgamma da la densidad, pgamma da la función de distribución, qgamma da la función de cuantiles y rgamma genera desviaciones aleatorias.


Los argumentos no válidos darán como resultado el valor de retorno NaN, con una advertencia.


La longitud del resultado está determinada por n para rgamma, y es el máximo de las longitudes de los argumentos numéricos para las otras funciones.


Los argumentos numéricos distintos de n se reciclan a la longitud del resultado. Sólo se utilizan los primeros elementos de los argumentos lógicos.


Nota


La parametrización de S (Becker et al (1988) fue a través de la forma y la tasa: S no tenía ningún parámetro de escala. En R 2.x.y la escala tenía prioridad sobre la tasa, pero ahora es un error suministrar ambas.


pgamma está estrechamente relacionada con la función gamma incompleta. Según la definición de Abramowitz y Stegun 6.5.1 (y de las "Recetas Numéricas") es


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


P(a, x) es pgamma(x, a). Otros autores (por ejemplo Karl Pearson en sus tablas de 1922) omiten el factor de normalización, definiendo la función gamma incompleta γ(a,x) como gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt, es decir, pgamma(x, a) * gamma(a). Otros utilizan la función gamma incompleta "superior",


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


que puede calcularse mediante pgamma(x, a, lower = FALSE) * gamma(a).


Nótese, sin embargo, que pgamma(x, a, ...) requiere actualmente a > 0, mientras que la función gamma incompleta se define también para a negativo. En ese caso, puede utilizar gamma_inc(a,x) (para Γ(a,x)) del paquete gsl.


Véase también https://en.wikipedia.org/wiki/Incomplete_gamma_function, o http://dlmf.nist.gov/8.2#i.


Fuente


dgamma se calcula mediante la densidad de Poisson, utilizando el código aportado por Catherine Loader (véase dbinom).


pgamma utiliza un algoritmo no publicado (y no documentado) "principalmente por Morten Welinder".


qgamma se basa en una traducción a C de


Lo mejor, D. J. y D. E. Roberts (1975). Algoritmo AS91. Puntos porcentuales de la distribución chi-cuadrado. Estadística aplicada, 24, 385-388.


más un paso final de Newton para mejorar la aproximación.


rgamma para forma >= 1 utiliza


Ahrens, J. H. y Dieter, U. (1982). Generación de variantes gamma mediante una técnica de rechazo modificada. Communications of the ACM, 25, 47-54,


y para 0 < shape < 1 utiliza


Ahrens, J. H. y Dieter, U. (1974). Métodos informáticos para el muestreo de las distribuciones gamma, beta, Poisson y binomial. Computing, 12, 223-246.


Referencias


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


Shea, B. L. (1988) Algorithm AS 239, Chi-cuadrado e integral Gamma incompleta, Applied Statistics (JRSS C) 37, 466-473.


Abramowitz, M. y Stegun, I. A. (1972) Manual de funciones matemáticas. Nueva York: Dover. Capítulo 6: Funciones gamma y afines.


Biblioteca digital de funciones matemáticas del NIST. http://dlmf.nist.gov/, sección 8.2.


Así que, queridos, portar código es una tarea de distinto nivel en conjunto que montar ese código en una matriz de los escritos de los científicos estadísticos.

 

Esta parte es un 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).

Debería llamarse - diferencias en las convenciones al calcular las funciones de densidad en el punto extremo para distribuciones unidireccionales. Y explicar para los estadísticos - y por qué se adhieren a otras convenciones y no a nivel de 3er año (porque Wolfram piensa así).

Ahora bien, esta es la única articulación encontrada que es relevante para la sección de derecho:

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

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

 

Te digo que te esfuerzas por alejarte de una discusión concreta.

Al menos has reconocido un problema. Se olvidó de admitir que tenemos expertos que son capaces de comprobar, entender y encontrar una solución mejor.

Alexey, espera la respuesta de R. Y fíjate que has dejado de responder a las preguntas de @Quantum. Te conduce deliberadamente hacia un objetivo conocido.

Hasta ahora tenemos Mathematica + Wolfram Alpha + Mathlab + MQL5 por nuestra parte, mientras que la tuya tiene el opsorced R. Que el código está escrito de forma chapucera y nada pulida como cabría esperar de un proyecto de hace 20 años.