L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 206

 
Quantum:

Fatto interessante

Le definizioni dei valori di densità della distribuzione gamma nella traduzione russa di

Johnson N.L., Kotz S., Balakrishnan N. Univariate continuous distributions. part 1 e la precedente versione inglese sono diverse:



ma la versione inglese ha un sospetto errore di battitura dovuto ai diversi caratteri.

Non è un errore di battitura. Se ti prendi la briga di guardare diversi tutorial di gamma... Vedrai che il supporto definito in modo diverso è... Da qualche parte con zero e da qualche parte senza zero.
 
Alexey Burnakov:
Questo non è un errore di stampa. Se vi prendete la briga di guardare attraverso diversi materiali di formazione su gamma... Vedrete che l'helpdesk è definito in modo diverso... Da qualche parte con zero e da qualche parte senza zero.

Lei non si preoccupa di guardare questi materiali e citarli, a differenza di @Quantum.

E fai anche riferimenti a Excel e Python per non dare un esempio chiaro.

Finora sei l'unico a praticare l'arguzia.

Non dimenticate di citare la risposta di R, se la ottenete, naturalmente.

 

Come spiegano gli sviluppatori di R i loro risultati:

dgamma(0,0.5,1)=inf

pgamma(0,0.5,1)=0

se hanno un punto 0 incluso (come visto nella definizione), dà densità infinita a x=0, e poi quando si integra in pgamma(x,0.5,1) l'infinito viene considerato come zero, come se non esistesse.

 
Quantum:

Come gli sviluppatori di R spiegheranno i loro risultati:

Bella domanda, ma perché la fai qui sul forum? Secondo Renat, avete un'intera squadra di scienziati che analizzano gli algoritmi di R, chiedete loro e poi diteci. Capire il codice sorgente di R è la responsabilità diretta del tuo team, se vuoi fare un port completo.

Ora mi sembra che tutta la tua "analisi degli algoritmi di R" sia di fare funzioni con gli stessi parametri di R, con implementazione da libri di testo universitari senza entrare nei dettagli. E poi si verificano malintesi come chiamare "0^0=1" un errore a causa di questo.
Con la tendenza attuale vi ritroverete con funzioni con interfaccia simile a quella di R che si comportano diversamente in certe condizioni a causa delle diverse implementazioni. E se qualcuno vuole trasferire il suo codice da R a mql, alla fine otterrà risultati diversi, si stancherà di cercare perché i risultati sono diversi, e abbandonerà tutto. I test unitari riveleranno solo una piccola frazione di tali differenze, perché copriranno solo alcuni dati comuni non problematici.

È un approccio molto strano per copiare l'interfaccia di R, fare la propria implementazione di funzioni senza nemmeno studiare il codice sorgente di R, controllare i risultati da wolfram. Cosa vuoi ottenere con questo approccio?
Quello che fai tu posso chiamarlo "libreria statistica auto-scritta mql, con interfaccia copiata da R, e in situazioni non specificate adattata a wolfram". Tutte le altre parole su R in https://www.mql5.com/ru/articles/2742 sono solo marketnig, non avendo nulla a che fare con R. Delusione.

 
Quantum:

e poi quando si integra in pgamma(x,0.5,1) l'infinito viene considerato come zero, come se non esistesse.

Facciamo un esempio più semplice:
x=1*10^(-90)
Il numero è molto piccolo, non zero, e non ci sono incertezze.
> dgamma(1*10^(-90), 0.5, 1)
[1] 5.641896e+44
> pgamma(1*10^(-90), 0.5, 1)
[1] 1.128379e-45

Tungsteno, il risultato è lo stesso:
PDF[GammaDistribution[0.5,1], 1*10^(-90)]
5.6419×10^44
CDF[GammaDistribution[0.5,1], 1*10^(-90)]
1.12838×10^-45

Ora, parafrasando la tua domanda, senza infiniti nelle formule:
Come si può integrare dgamma, che restituisce grandi numeri come 5.641896e+44, per finire con un numero molto piccolo1.128379e-45?
La risposta è no way.* L'integrazione di dgamma() non è usata per calcolare pgamma(), ci sono altre formule, e l'infinito di dgamma() non è usato nei calcoli.

Capisco il calcolo di pgamma(0, 0.5, 1) in questo caso come - Se si prende un insieme infinito di numeri [0;Inf), e si seleziona casualmente uno di essi, qual è la probabilità di selezionare un numero <=0 ? La risposta è 1/Inf , o 0. Che corrisponde al risultato di pgamma(). Correggetemi se c'è qualcosa di sbagliato, non sono molto bravo a lavorare con infiniti e limiti a livello di intuizione e logica.

*qui sono inciampato, sottovalutando la velocità con cui il risultato di dgamma() diminuisce al diminuire di x. per favore ignorate questa affermazione.

 
Dr.Trader:

Bella domanda, ma perché la fai qui sul forum? Secondo Renat, avete un'intera squadra di scienziati che analizzano gli algoritmi di R, chiedete loro e poi diteci. Capire il codice sorgente di R è la responsabilità diretta del tuo team, se vuoi fare un port completo.

Ora mi sembra che tutta la tua "analisi degli algoritmi di R" sia di fare funzioni con gli stessi parametri di R, con implementazione utilizzando i libri di testo universitari senza entrare nei dettagli. E poi si verificano malintesi come chiamare "0^0=1" un errore a causa di questo.
Con la tendenza attuale vi ritroverete con funzioni con interfaccia simile a quella di R che si comportano diversamente in certe condizioni a causa delle diverse implementazioni. E se qualcuno vuole trasferire il suo codice da R a mql, alla fine otterrà risultati diversi, si stancherà di cercare perché i risultati sono diversi, e abbandonerà tutto. I test unitari riveleranno solo una piccola frazione di tali differenze, perché copriranno solo alcuni dati comuni non problematici.

È un approccio molto strano per copiare l'interfaccia di R, fare la propria implementazione di funzioni senza nemmeno studiare il codice sorgente di R, controllare i risultati da wolfram. Cosa vuoi ottenere con questo approccio?
Quello che stai facendo lo posso chiamare "libreria statistica auto-scritta mql, con interfaccia copiata da R, e in situazioni non specificate adattata a wolfram". Tutte le altre parole su R in https://www.mql5.com/ru/articles/2742 sono solo marketnig, non avendo nulla a che fare con R. Deludente.

Su R ci siamo ingannati, me compreso. Certo, possiamo dare la colpa di questa illusione alle meta-citazioni, ma la verità è diversa.

Chi usa R può ricordare la storia della promozione di R nel suo Olimpo. Completamente strappato alla S nel 1993, l'intero sistema R è stato ampiamente conosciuto in circoli ristretti per altri 10 anni. E solo dopo 10 anni dal suo inizio, con 20 anni di storia con S, dall'inizio degli anni novanta ha iniziato una graduale ascesa e ha fatto la sua strada nella top ten cinque anni fa e oggi ha solo un concorrente, python. Oggi R è un sistema enorme che rappresenta lo standard nella statistica.

Da qui la conclusione: gli analoghi di R all'interno di MKL sono impossibili.

Con cosa abbiamo a che fare?

Abbiamo a che fare con un processo di sviluppo molto positivo per MKL5 in termini di funzioni matematiche. Se metaquotes riesce a riempire l'insieme delle funzioni matematiche con analoghi delle funzioni del pacchetto stats R, questo processo dovrebbe essere solo benvenuto. Detto questo, è un'ottima scelta prendere R piuttosto che qualsiasi altro pacchetto matematico come originale per l'imitazione. Ma questa non è un'importazione di funzioni da R - queste sono funzioni scritte ex novo che sono analoghe, e che possono coincidere o meno con l'originale. Ma la mancata corrispondenza non toglie affatto l'importanza del lavoro iniziato dalle meta-citazioni. E le persone che decidono di portare il codice da R a MKL5 dovrebbero ricordare che è un'altra implementazione relativa a R con le proprie sfumature, i propri bug, il proprio ambiente linguistico.

Quindi non c'è bisogno di confrontare nulla. MKL5 è stato esteso con funzioni statistiche e questo va bene. Se il metodo plot viene aggiunto a questo, sarà una rivoluzione negli strumenti grafici di MKL5.

PS

E voi, io e molti altri utenti di R non saremo delusi solo in un caso: il terminale sarà riscritto e il suo linguaggio di programmazione sarà R.

 

La prima versione della zattera è già apparsa:https://www.mql5.com/ru/forum/97153/page10#comment_3831485

Dovrete sopportare gli errori in R; la credenza nell'infallibilità è una cattiva compagnia. Abbiamo sfatato anche il mito sulla velocità dei calcoli in R. Il codice lì è scritto con una schiettezza e una noncuranza.

L'errore con l'AS 243 è indiscutibile e provato dai nostri studi sulla qualità dei risultati e confermato da materiali di terzi.

Ora state discutendo solo dello zero, ma anche qui dovrete rinunciare. Lei sta già cercando di allontanarsi dal punto suggerendo altri punti.

Ancora una volta, abbiamo fatto un lavoro di qualità, abbiamo trattato l'argomento e coperto tutto con dei test.

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

Nel linguaggio R, che - correttamente - deriva da S ed è in giro da almeno 15 anni, se non 20, persone con lauree avanzate forniscono i codici per ogni funzione statistica. Professori, professori associati nei dipartimenti di statistica, in molti modi, nelle università americane. I loro calcoli non sono solo stupidamente accettati nei commit perché lo hanno fatto gratis, ma sono accompagnati da pubblicazioni scientifiche in riviste peer-reviewed. E questo vale per qualsiasi funzione e pacchetto meno importante. E questo è importante! Per esempio, quando uso una funzione per trovare la potenza di un test, devo fare un argomento per la dimensione dell'effetto. E nella documentazione ho letto che la deviazione standard raggruppata viene contata in questo modo. Vado su internet, trovo l'autore del metodo, lo leggo... E discuto sui risultati dell'applicazione di questa funzione.

dgamma è basato sul codice della distribuzione binomiale fornito da Catherine Loader. Il suo articolo per questo metodo è del 2000. Sentitevi liberi di leggerlo.

E ora la domanda MQL - tu scrivi i tuoi algoritmi, è chiaro che stai prendendo in prestito quasi tutto. In rari casi si dice che l'algoritmo non è abbastanza preciso, ma c'è un altro algoritmo descritto in questa rivista e lo useremo. E gli altri algoritmi? Scrivete nella documentazione che li prendete in prestito? Non credo che reinventerai il calcolo delle probabilità nella distribuzione binomiale...

C'è qualche riferimento del genere nella sua referenza?

pwr.t2n.test {pwr} R Documentazione

Calcoli di potenza per due campioni (dimensioni diverse) t-test


Descrizione


Calcolare la potenza dei test o determinare i parametri per ottenere la potenza obiettivo (simile a come power.t.test).


Uso


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

alternativa = c("a due lati",

"meno", "maggiore"))

Argomenti


n1

Numero di osservazioni nel primo campione

n2

Numero di osservazioni nel secondo campione

d

Dimensione dell'effetto

livello sig.

Livello di significatività (probabilità di errore di tipo I)

potenza

Potenza del test (1 meno la probabilità di errore di tipo II)

alternativa

una stringa di caratteri che specifica l'ipotesi alternativa, deve essere una tra "two.sided" (default), "greater" o "less

Dettagli


Esattamente uno dei parametri 'd','n1','n2','power' e 'sig.level' deve essere passato come NULL, e quel parametro è determinato dagli altri. Notate che l'ultimo ha un default non-NULL, quindi NULL deve essere passato esplicitamente se volete calcolarlo.


Valore


Oggetto di classe ''power.htest'', una lista di argomenti (incluso quello calcolato) aumentata con elementi 'method' e 'note'.


Nota


'uniroot' è usato per risolvere l'equazione di potenza per le incognite, quindi potreste vedere errori da esso, in particolare sull'incapacità di mettere tra parentesi la radice quando vengono dati argomenti non validi.


Autore/i


Stephane Champely <champely@univ-lyon1.fr> ma questo è una semplice copia del lavoro di Peter Dalgaard (power.t.test)


Riferimenti


Cohen, J. (1988). Analisi di potenza statistica per le scienze comportamentali (2a ed.). Hillsdale, NJ: Lawrence Erlbaum.

E se prendete in prestito del codice, senza citare la fonte del codice e l'autore del metodo, il vostro lavoro è plagio. E come vi guarderanno nella comunità statistica, se qualche Quantum pubblica un articolo dissimulato sulla funzione di densità errata derivata dal lavoro di Catherine, è una grande domanda. Non credo che lo faranno...

Per la famiglia di funzioni gamma:

GammaDist {stats} R Documentazione

La distribuzione Gamma


Descrizione


Densità, funzione di distribuzione, funzione quantile e generazione casuale per la distribuzione Gamma con parametri forma e scala.


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, tasso = 1, scala = 1/grado)

Argomenti


x, q

vettore di quantili.

p

vettore di probabilità.

n

numero di osservazioni. Se length(n) > 1, la lunghezza è considerata come il numero richiesto.

tasso

Un modo alternativo per specificare la scala.

forma, scala

parametri di forma e di scala. Deve essere positivo, scala rigorosamente.

log, log.p

logico; se TRUE, le probabilità/densità p sono restituite come log(p).

coda.inferiore

logico; se TRUE (default), le probabilità sono P[X ≤ x], altrimenti, P[X > x].

Dettagli


Se la scala è omessa, assume il valore predefinito di 1.


La distribuzione Gamma con parametri forma = a e scala = s ha densità


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


per x ≥ 0, a > 0 e s > 0. (Qui Gamma(a) è la funzione implementata da gamma() di R e definita nel suo aiuto. Si noti che a = 0 corrisponde alla distribuzione banale con tutta la massa nel punto 0).


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


Il rischio cumulativo H(t) = - log(1 - F(t)) è


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

Si noti che per piccoli valori di forma (e scala moderata) una gran parte della massa della distribuzione Gamma è su valori di x così vicini allo zero che saranno rappresentati come zero nell'aritmetica del computer. Quindi rgamma può anche restituire valori che saranno rappresentati come zero. (Questo accadrà anche per valori di scala molto grandi, poiché la generazione effettiva è fatta per scala = 1).


Valore


dgamma dà la densità, pgamma dà la funzione di distribuzione, qgamma dà la funzione quantile, e rgamma genera deviazioni casuali.


Gli argomenti non validi avranno come risultato il valore di ritorno NaN, con un avvertimento.


La lunghezza del risultato è determinata da n per rgamma, ed è il massimo delle lunghezze degli argomenti numerici per le altre funzioni.


Gli argomenti numerici diversi da n sono riciclati alla lunghezza del risultato. Si usano solo i primi elementi degli argomenti logici.


Nota


La parametrizzazione di S (Becker et al (1988) era tramite forma e tasso: S non aveva un parametro di scala. In R 2.x.y la scala aveva la precedenza sul tasso, ma ora è un errore fornire entrambi.


pgamma è strettamente legata alla funzione gamma incompleta. Come definito da Abramowitz e Stegun 6.5.1 (e da 'Numerical Recipes') questo è


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


P(a, x) è pgamma(x, a). Altri autori (per esempio Karl Pearson nelle sue tavole del 1922) omettono il fattore di normalizzazione, definendo la funzione gamma incompleta γ(a,x) come gamma(a,x) = integral_0^x t^(a-1) exp(-t) dt, cioè pgamma(x, a) * gamma(a). Altri ancora usano la funzione gamma incompleta "superiore",


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


che può essere calcolato da pgamma(x, a, lower = FALSE) * gamma(a).


Si noti tuttavia che pgamma(x, a, ...) attualmente richiede a > 0, mentre la funzione gamma incompleta è definita anche per a negativo. In questo caso, potete usare gamma_inc(a,x) (per Γ(a,x)) dal pacchetto gsl.


Vedi anche https://en.wikipedia.org/wiki/Incomplete_gamma_function, o http://dlmf.nist.gov/8.2#i.


Fonte


dgamma è calcolato tramite la densità di Poisson, utilizzando il codice fornito da Catherine Loader (vedi dbinom).


pgamma usa un algoritmo non pubblicato (e non altrimenti documentato) "principalmente da Morten Welinder".


qgamma è basato su una traduzione in C di


Migliore, D. J. e D. E. Roberts (1975). Algoritmo AS91. Punti percentuali della distribuzione chi-quadrato. Statistica applicata, 24, 385-388.


più un passo finale di Newton per migliorare l'approssimazione.


rgamma per forma >= 1 usa


Ahrens, J. H. e Dieter, U. (1982). Generazione di varianti gamma con una tecnica di rifiuto modificata. Communications of the ACM, 25, 47-54,


e per 0 < forma < 1 usa


Ahrens, J. H. e Dieter, U. (1974). Metodi informatici per il campionamento da distribuzioni gamma, beta, Poisson e binomiali. Computing, 12, 223-246.


Riferimenti


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-quadrato e integrale gamma incompleto, Applied Statistics (JRSS C) 37, 466-473.


Abramowitz, M. e Stegun, I. A. (1972) Handbook of Mathematical Functions. New York: Dover. Capitolo 6: Gamma e funzioni correlate.


Biblioteca digitale NIST di funzioni matematiche. http://dlmf.nist.gov/, sezione 8.2.


Quindi, cari, il porting del codice è un compito di livello completamente diverso dall'assemblaggio di quel codice su un array di scritti di scienziati statistici.

 

Questa parte è una sciocchezza scientifica:

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

Dovrebbe essere chiamato - differenze di convenzioni nel calcolo delle funzioni di densità al punto estremo per distribuzioni unidirezionali. E spiegare per gli statistici - e perché ci si attiene ad altre convenzioni e non al livello del 3° anno (perché Wolfram pensa così).

Ora questo è l'unico giunto trovato che è rilevante per la sezione sul diritto:

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

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

 

Ti dico che stai cercando in tutti i modi di allontanarti da una discussione concreta.

Almeno hai riconosciuto un problema. Hai dimenticato di ammettere che abbiamo esperti che sono in grado di effettuare controlli, per capire e trovare una soluzione migliore.

Alexey, aspetta una risposta da R. E notate come avete smesso di rispondere alle domande di @Quantum. Vi sta deliberatamente conducendo ordinatamente verso una meta conosciuta.

Finora dalla nostra parte c'è Mathematica + Wolfram Alpha + Mathlab + MQL5, mentre dalla vostra c'è l'opsorced R. Il cui codice è scritto in modo approssimativo e per niente lucido come ci si aspetterebbe da un progetto di 20 anni fa.