L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 206

 
Quantum:

Fait intéressant

Les définitions des valeurs de densité de la distribution gamma dans la traduction russe de

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



mais la version anglaise comporte une faute de frappe présumée en raison de caractères différents.

Ce n'est pas une faute de frappe. Si vous prenez la peine de regarder plusieurs tutoriels sur le gamma... Vous verrez qu'un soutien défini différemment est... Quelque part avec zéro et quelque part sans zéro.
 
Alexey Burnakov:
Il ne s'agit pas d'une erreur d'impression. Si vous prenez la peine de regarder plusieurs tutoriels sur le gamma... Vous verrez que le service d'assistance est défini différemment... Quelque part avec zéro et quelque part sans zéro.

Vous ne prenez pas la peine de consulter ces documents et de les citer, contrairement à @Quantum.

Et vous faites même des références à Excel et Python pour ne pas donner un exemple clair.

Jusqu'à présent, vous êtes le seul à pratiquer l'esprit.

N'oubliez pas de citer la réponse de R, si vous l'obtenez, bien sûr.

 

Comment les développeurs de R expliquent-ils leurs résultats ?

dgamma(0,0.5,1)=inf

pgamma(0,0.5,1)=0

s'ils ont un point 0 inclus (comme vu dans la définition), donne une densité infinie à x=0, et ensuite lors de l'intégration dans pgamma(x,0.5,1) l'infini est considéré comme zéro, comme s'il n'existait pas.

 
Quantum:

Comment les développeurs de R expliqueront leurs résultats :

Bonne question, mais pourquoi la poser ici sur le forum ? Selon Renat, vous avez là toute une équipe de scientifiques qui analysent des algorithmes R, vous leur demandez et vous nous le dites. Comprendre le code source de R est la responsabilité directe de votre équipe, si vous voulez faire un portage à part entière.

Il me semble maintenant que toute votre "analyse des algorithmes de R" consiste à faire des fonctions avec les mêmes paramètres que dans R, avec une mise en œuvre par des manuels universitaires sans entrer dans les détails. Et des malentendus comme le fait d'appeler "0^0=1" une erreur se produisent à cause de cela.
Avec la tendance actuelle, vous vous retrouverez avec des fonctions ayant une interface de type R qui se comportent différemment dans certaines conditions en raison de différentes implémentations. Et si quelqu'un veut transférer son code de R à mql, il finira par obtenir des résultats différents, se fatiguera de chercher pourquoi les résultats sont différents, et abandonnera tout. Les tests unitaires ne révéleront qu'une petite partie de ces différences, car ils ne couvriront que certaines données communes non problématiques.

C'est une approche très étrange de copier l'interface de R, de faire votre propre implémentation des fonctions sans même étudier le code source de R, de vérifier les résultats par wolfram. Que voulez-vous obtenir avec cette approche ?
Ce que vous faites, je peux l'appeler "bibliothèque statistique auto-écrite mql, avec une interface copiée de R, et dans des situations non spécifiées, adaptée à wolfram". Tous les autres mots à propos de R dans https://www.mql5.com/ru/articles/2742 sont juste du marketing, n'ayant rien à voir avec R. Déception.

 
Quantum:

et ensuite lors de l'intégration dans pgamma(x,0.5,1) l'infini est considéré comme zéro, comme s'il n'existait pas.

Prenons un exemple plus simple :
x=1*10^(-90)
Le nombre est très faible, non nul, et il n'y a pas d'incertitude.
> dgamma(1*10^(-90), 0.5, 1)
[1] 5.641896e+44
> pgamma(1*10^(-90), 0.5, 1)
[1] 1.128379e-45

Tungstène, le résultat est le même :
PDF[GammaDistribution[0.5,1], 1*10^(-90)]
5.6419×10^44
CDF[GammaDistribution[0.5,1], 1*10^(-90)]
1.12838×10^-45

Maintenant, en paraphrasant votre question, sans aucune infinité dans les formules :
Comment pouvez-vous intégrer dgamma, qui renvoie de grands nombres comme 5.641896e+44, pour aboutir à un très petit nombre1.128379e-45?
La réponse est non.* L'intégration de dgamma() n'est pas utilisée pour calculer pgamma(), il existe d'autres formules, et l'infini de dgamma() n'est pas utilisé dans les calculs.

Je comprends le calcul de pgamma(0, 0.5, 1) dans ce cas comme suit : si vous prenez un ensemble infini de nombres [0;Inf), et que vous en sélectionnez un au hasard, quelle est la probabilité de sélectionner un nombre <=0 ? La réponse est 1/Inf , ou 0. Ce qui correspond au résultat de pgamma(). Corrigez-moi si je me trompe, je ne suis pas très doué pour travailler avec les infinis et les limites au niveau de l'intuition et de la logique.

*J'ai trébuché en sous-estimant la vitesse à laquelle le résultat de dgamma() diminue lorsque x diminue. Veuillez ignorer cette déclaration.

 
Dr. Trader:

Bonne question, mais pourquoi la poser ici sur le forum ? Selon Renat, vous avez là toute une équipe de scientifiques qui analysent des algorithmes R, vous leur demandez et vous nous le dites. Comprendre le code source de R est la responsabilité directe de votre équipe, si vous voulez faire un portage à part entière.

Il me semble maintenant que toute votre "analyse des algorithmes de R" consiste à faire des fonctions avec les mêmes paramètres que dans R, avec une mise en œuvre utilisant des manuels universitaires sans entrer dans les détails. Et des malentendus comme le fait d'appeler "0^0=1" une erreur se produisent à cause de cela.
Avec la tendance actuelle, vous vous retrouverez avec des fonctions ayant une interface de type R qui se comportent différemment dans certaines conditions en raison de différentes implémentations. Et si quelqu'un veut transférer son code de R à mql, il finira par obtenir des résultats différents, se fatiguera de chercher pourquoi les résultats sont différents, et abandonnera tout. Les tests unitaires ne révéleront qu'une petite partie de ces différences, car ils ne couvriront que certaines données communes non problématiques.

C'est une approche très étrange de copier l'interface de R, de faire votre propre implémentation des fonctions sans même étudier le code source de R, de vérifier les résultats par wolfram. Que voulez-vous obtenir avec cette approche ?
Ce que vous faites, je peux l'appeler "bibliothèque statistique auto-écrite mql, avec une interface copiée de R, et dans des situations non spécifiées, adaptée à wolfram". Tous les autres mots à propos de R dans https://www.mql5.com/ru/articles/2742 sont juste du marketing, n'ayant rien à voir avec R. Décevant.

A propos de R, nous nous sommes trompés, moi y compris. Bien sûr, nous pouvons mettre cette illusion sur le compte des méta-citations, mais la vérité est différente.

Les personnes qui utilisent R peuvent se rappeler l'histoire de la promotion de R à son Olympe. Entièrement arraché à S en 1993, l'ensemble du système R a été largement connu dans des cercles restreints pendant encore 10 ans. Et seulement après 10 ans de sa création, avec 20 ans d'histoire avec S, dès le début des années quatre-vingt a commencé une ascension progressive et a fait son chemin dans le top dix il y a cinq ans et aujourd'hui a un seul concurrent, python. Aujourd'hui, R est un énorme système qui représente la norme en matière de statistiques.

D'où la conclusion : les analogues de R au sein de MKL sont impossibles.

De quoi s'agit-il ?

Nous avons affaire à un processus de développement très positif pour MKL5 en termes de fonctions mathématiques. Si metaquotes parvient à réapprovisionner l'ensemble des fonctions mathématiques avec des analogues de fonctions du paquet R de stats, on ne peut que se réjouir de ce processus. Cela dit, c'est un très bon choix que de prendre R plutôt que tout autre paquetage mathématique comme original pour l'imitation. Mais il ne s'agit pas d'une importation de fonctions de R - ce sont des fonctions nouvellement écrites qui sont des analogues, et qui peuvent ou non coïncider avec l'original. Mais le fait de ne pas correspondre n'enlève rien à l'importance du travail entamé par les métacitations. Et les personnes qui décident de porter du code de R vers MKL5 doivent se rappeler qu'il s'agit d'une autre implémentation relative à R, avec ses propres nuances, ses propres bogues, son propre environnement linguistique.

Il n'y a donc pas lieu de comparer quoi que ce soit. Le MKL5 est complété par des fonctions statistiques et c'est très bien ainsi. Si la méthode de traçage s'y ajoute, ce sera une révolution dans les outils graphiques de MKL5.

PS

Et vous, moi et de nombreux autres utilisateurs de R ne seront pas déçus, sauf dans un cas : le terminal sera réécrit et son langage de programmation sera R.

 

La première version du radeau est déjà parue: https://www.mql5.com/ru/forum/97153/page10#comment_3831485.

Vous devrez vous accommoder d'erreurs en R ; la croyance en l'infaillibilité est un mauvais compagnon. Nous avons également démystifié le mythe de la vitesse de calcul dans R. Le code y est écrit avec une franchise et un manque de soin.

L'erreur d'utilisation de l'AS 243 est incontestable et prouvée par nos études sur la qualité des résultats et confirmée par des matériaux tiers.

Vous n'argumentez plus que sur le zéro, mais vous devrez abandonner là aussi. Vous vous efforcez déjà de vous éloigner du sujet en suggérant d'autres points.

Une fois encore, nous avons fait un travail de qualité, traité le sujet et tout couvert par des tests.

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

Dans le langage R, qui vient - à juste titre - de S et existe depuis au moins 15 ans, si ce n'est 20, des personnes titulaires de diplômes supérieurs fournissent les codes de chaque fonction statistique. Professeurs, professeurs associés dans les départements de statistiques, à bien des égards, dans les universités américaines. Leurs calculs ne sont pas simplement acceptés bêtement dans les commits parce qu'ils l'ont fait gratuitement, mais sont accompagnés de publications scientifiques dans des revues à comité de lecture. Et cela s'applique à toute fonction et tout paquet moins important. Et c'est important ! Par exemple, lorsque j'utilise une fonction pour déterminer la puissance d'un test, je dois entrer un argument pour la taille de l'effet. Et dans la documentation, je lis que l'écart type groupé est compté de cette façon. Je vais sur Internet, je trouve l'auteur de la méthode, je lis à son sujet... Et j'argumente sur les résultats de l'application de cette fonction.

dgamma est basé sur le code de distribution binomiale fourni par Catherine Loader. Son article pour cette méthode date de l'année 2000. N'hésitez pas à le lire.

Et maintenant la question MQL - vous écrivez vos algorithmes, il est clair que vous les empruntez presque tous. Dans de rares cas, vous dites que l'algorithme n'est pas assez précis, mais il existe un autre algorithme décrit dans ce magazine et nous l'utiliserons. Qu'en est-il des autres algorithmes ? Est-ce que vous écrivez dans la documentation que vous les empruntez ? Je ne pense pas que vous réinventerez le calcul des probabilités dans la distribution binomiale...

Y a-t-il une référence de ce genre dans votre référence ?

pwr.t2n.test {pwr} R Documentation

Calculs de puissance pour les tests t de deux échantillons (de tailles différentes)


Description


Calculer la puissance des tests ou déterminer les paramètres pour obtenir la puissance cible (similaire au test power.t).


Utilisation


pwr.t2n.test(n1 = NULL, n2= NULL, d = NULL, sig.level = 0.05, power = NULL,

alternative = c("two.sided",

"moins", "plus"))

Arguments


n1

Nombre d'observations dans le premier échantillon

n2

Nombre d'observations dans le second échantillon

d

Taille de l'effet

niveau sig.

Niveau de signification (probabilité d'erreur de type I)

puissance

Puissance du test (1 moins la probabilité d'erreur de type II)

alternative

une chaîne de caractères spécifiant l'hypothèse alternative, doit être l'une de "two.sided" (par défaut), "greater" ou "less".

Détails


Un seul des paramètres 'd', 'n1', 'n2', 'power' et 'sig.level' doit être passé comme NULL, et ce paramètre est déterminé à partir des autres. Notez que le dernier a une valeur par défaut non NULL, donc NULL doit être explicitement passé si vous voulez le calculer.


Valeur


Objet de la classe ''power.htest'', une liste d'arguments (y compris celui calculé) augmentée des éléments 'method' et 'note'.


Note


uniroot' est utilisé pour résoudre une équation de puissance pour des inconnues, donc vous pouvez voir des erreurs de sa part, notamment l'incapacité de mettre la racine entre parenthèses lorsque des arguments invalides sont donnés.


Auteur(s)


Stéphane Champely <champely@univ-lyon1.fr> mais c'est une simple copie du travail de Peter Dalgaard (power.t.test)


Références


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

Et si vous empruntez du code, sans citer la source du code et l'auteur de la méthode, votre travail est un plagiat. Et comment vous regardera-t-on dans la communauté statistique, si un certain Quantum publie un article démagogique sur une fonction de densité incorrecte dérivée du travail de Catherine, c'est une grande question. Je ne pense pas qu'ils le feront...

Pour la famille des fonctions gamma :

GammaDist {stats} Documentation R

La distribution Gamma


Description


Densité, fonction de distribution, fonction quantile et génération aléatoire pour la distribution Gamma avec les paramètres shape et scale.


Utilisation


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, shape, rate = 1, scale = 1/rate)

Arguments


x, q

vecteur de quantiles.

p

vecteur de probabilités.

n

le nombre d'observations. Si length(n) > 1, la longueur est considérée comme étant le nombre requis.

taux

Une autre façon de spécifier l'échelle.

forme, échelle

les paramètres de forme et d'échelle. Doit être positif, échelle stricte.

log, log.p

logique ; si VRAI, les probabilités/densités p sont retournées sous forme de log(p).

queue.inférieure

logique ; si VRAI (par défaut), les probabilités sont P[X ≤ x], sinon, P[X > x].

Détails


Si l'échelle est omise, elle prend la valeur par défaut de 1.


La distribution Gamma avec les paramètres forme = a et échelle = s a une densité


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


pour x ≥ 0, a > 0 et s > 0. (Ici Gamma(a) est la fonction implémentée par gamma() de R et définie dans son aide. Notez que a = 0 correspond à la distribution triviale avec toute la masse au point 0).


La moyenne et la variance sont E(X) = a*s et Var(X) = a*s^2.


Le risque cumulatif H(t) = - log(1 - F(t)) est le suivant


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

Notez que pour de petites valeurs de forme (et une échelle modérée), une grande partie de la masse de la distribution Gamma se trouve sur des valeurs de x si proches de zéro qu'elles seront représentées par zéro dans l'arithmétique informatique. Il se peut donc que rgamma renvoie des valeurs qui seront représentées par zéro. (Cela se produira également pour de très grandes valeurs d'échelle puisque la génération réelle se fait pour échelle = 1).


Valeur


dgamma donne la densité, pgamma donne la fonction de distribution, qgamma donne la fonction quantile, et rgamma génère des écarts aléatoires.


Des arguments non valides entraîneront le retour de la valeur NaN, avec un avertissement.


La longueur du résultat est déterminée par n pour rgamma, et est le maximum des longueurs des arguments numériques pour les autres fonctions.


Les arguments numériques autres que n sont recyclés à la longueur du résultat. Seuls les premiers éléments des arguments logiques sont utilisés.


Note


La paramétrisation de S (Becker et al (1988)) se faisait via la forme et le taux : S n'avait pas de paramètre d'échelle. Dans R 2.x.y, l'échelle avait la priorité sur le taux, mais maintenant c'est une erreur de fournir les deux.


pgamma est étroitement lié à la fonction gamma incomplète. Comme défini par Abramowitz et Stegun 6.5.1 (et par 'Numerical Recipes') c'est


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


P(a, x) est pgamma(x, a). D'autres auteurs (par exemple Karl Pearson dans ses tables de 1922) omettent le facteur de normalisation, définissant la fonction gamma incomplète γ(a,x) comme gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt, c'est-à-dire pgamma(x, a) * gamma(a). D'autres encore utilisent la fonction gamma incomplète "supérieure",


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


qui peut être calculée par pgamma(x, a, lower = FALSE) * gamma(a).


Notez cependant que pgamma(x, a, ...) requiert actuellement a > 0, alors que la fonction gamma incomplète est également définie pour a négatif. Dans ce cas, vous pouvez utiliser gamma_inc(a,x) (pour Γ(a,x)) du paquet gsl.


Voir également https://en.wikipedia.org/wiki/Incomplete_gamma_function, ou http://dlmf.nist.gov/8.2#i.


Source :


dgamma est calculé via la densité de Poisson, en utilisant le code fourni par Catherine Loader (voir dbinom).


pgamma utilise un algorithme non publié (et non documenté par ailleurs) "principalement par Morten Welinder".


qgamma est basé sur une traduction C de


Best, D. J. et D. E. Roberts (1975). Algorithme AS91. Points de pourcentage de la distribution du chi-deux. Applied Statistics, 24, 385-388.


plus une étape finale de Newton pour améliorer l'approximation.


rgamma pour forme >= 1 utilise


Ahrens, J. H. et Dieter, U. (1982). Génération de variables gamma par une technique de rejet modifiée. Communications of the ACM, 25, 47-54,


et pour 0 < forme < 1 utilise


Ahrens, J. H. et Dieter, U. (1974). Méthodes informatiques pour l'échantillonnage à partir des distributions gamma, bêta, Poisson et binomiale. Computing, 12, 223-246.


Références


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


Shea, B. L. (1988) Algorithm AS 239, Chi-squared and incomplete Gamma integral, Applied Statistics (JRSS C) 37, 466-473.


Abramowitz, M. et Stegun, I. A. (1972) Handbook of Mathematical Functions. New York : Dover. Chapitre 6 : Gamma et fonctions connexes.


Bibliothèque numérique des fonctions mathématiques du NIST. http://dlmf.nist.gov/, section 8.2.


Ainsi, mes chers amis, le portage d'un code est une tâche d'un tout autre niveau que l'assemblage de ce code sur un ensemble d'écrits de statisticiens.

 

Cette partie est un non-sens scientifique :

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).

Il devrait s'appeler - différences de conventions lors du calcul des fonctions de densité au point extrême pour les distributions à sens unique. Et expliquer pour les statisticiens - et pourquoi vous vous en tenez à d'autres conventions et pas au niveau de la 3ème année (parce que Wolfram le pense).

C'est la seule articulation trouvée qui est pertinente pour la section sur le droit :

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

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

 

Je te le dis, tu essaies vraiment de t'éloigner d'une discussion concrète.

Au moins, vous avez reconnu un problème. Vous avez oublié d'admettre que nous avons des experts capables d'effectuer des contrôles, de comprendre et de trouver une meilleure solution.

Alexey, attendez une réponse de R. Et remarquez comment vous avez cessé de répondre aux questions de @Quantum. Il vous conduit délibérément vers un objectif connu.

Jusqu'à présent, de notre côté, il y a Mathematica + Wolfram Alpha + Mathlab + MQL5, tandis que du vôtre, il y a l'opsorisé R. Le code est mal écrit et n'est pas du tout poli, comme on pourrait s'y attendre d'un projet vieux de 20 ans.