Computer 4 dummy

Informatica facile a portata di tutti

SciPy – Distribuzione normale o di Gauss (PDF)

In questi capitoli vedremo come è semplice utilizzare la libreria Scipy per risolvere complicati calcoli di algebra e statistica senza dover imparare a memoria funzioni complesse e svolgere singolarmente radici quadrate, esponenziali, quadrati e divisioni.

Distribuzione Gaussiana o normale

Uno dei primi esempi che andremo a provare sarà il calcolo della distribuzione normale la cui formula è nell’immagine sotto:

Distribuzione Gaussiana o normale
Distribuzione Gaussiana o normale

Per approfondimenti in merito al calcolo della distribuzione normale vi lascio alcuni link sotto, scrivetemi nei commenti se conoscete altri approfondimenti con spiegazioni più chiare e dettagliate:

Con Scipy non è necessario memorizzare la tutta la formula per ricordarci come calcolarla, ovviamente è importante conoscerla per capire come applicarla ma per i nostri fini pratici più semplice e veloce è l’applicazione meglio è!

Esempi pratici…

Per capire subito come funziona Scipy iniziamo subito con qualche esempio che ci aiuti a capire come utilizzare la funzione per il calcolo della distribuzione.

Come primo esempio proviamo a calcolare la distribuzione normale di 0.

from scipy.stats import norm

norm.pdf(0)
>0.3989422804014327

Utilizziamo gli argomenti

Per la distribuzione normale standardizzata viene utilizzata una media=0 e una varianza=1 che inseriti nella formula si inseriscono rispettivamente con loc=0 e scale=1 quindi la formula diventa:

from scipy.stats import norm 

norm.pdf(0, loc=0, scale=1) 
>0.3989422804014327

Distribuzione normale di un array

Se volessimo calcolare la distribuzione standard di un array la prima cosa ci verrebbe in mente da fare è calcolarla per ogni singolo valore utilizzando un loop, ma non è l’approccio corretto, quello che possiamo fare con Scipy  è calcolare in un colpo solo la distribuzione di tutto l’array in questo modo:

Utilizzando Numpy (a questo link la guida) creiamo un array composto da 10 valori random che poi inseriremo nella funziona per il calcolo della deviazione standard.

from scipy.stats import norm

import numpy as np
r = np.random.randn(10)

norm.pdf(r)
Out[21]: 
array([0.22094967, 0.21152985, 0.21564142, 0.3969678 , 0.12117648,
       0.37385954, 0.38260955, 0.39675999, 0.00643475, 0.3765106 ])

NOTA: Per questi esempi utilizziamo la funzione randn che  restituisce un campione seguendo la distribuzione “standard normale”, maggiori dettagli li potete trovare nella guida ufficiale di SciPy a questo link: https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.random.randn.html#numpy.random.randn

Distribuzione log-normale logpdf(r)

La distribuzione log-normale è una distribuzione statistica non gaussiana di valori con proprietà simili alla distribuzione normale gaussiana.

A questi link potete trovare maggiori dettagli:

  1. https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.logpdf.html?highlight=logpdf#scipy.stats.rv_continuous.logpdf
  2. https://it.wikipedia.org/wiki/Distribuzione_lognormale
  3. https://www.okpedia.it/distribuzione-log-normale

Vediamo un esempio:

from scipy.stats import norm
import numpy as np

r = np.random.randn(10)
norm.logpdf(r)

Out[22]: 
array([-1.77792239, -2.67572512, -0.92659316, -0.97464884, -1.07862644,
       -0.99047842, -2.03876956, -1.20834348, -1.83205278, -1.40589779])

Funzione di ripartizione (o funzione cumulativa)

La funzione di ripartizione (o funzione cumulativa) è una funzione di variabile reale che rappresenta le informazioni relative ad un fenomeno (un insieme di dati o un evento casuale) riguardanti la sua presenza o distribuzione prima o dopo un certo punto.

A questi link potete trovare maggiori dettagli:

  1. https://it.wikipedia.org/wiki/Funzione_di_ripartizione
  2. https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.cdf.html?highlight=cdf#scipy.stats.rv_continuous.cdf

Ecco un esempio:

from scipy.stats import norm
import numpy as np
 
r = np.random.randn(10)
norm.cdf(r)

Out[23]: 
array([0.90502257, 0.03043402, 0.4507643 , 0.36926628, 0.7140085 ,
       0.35261915, 0.06725519, 0.22338959, 0.91171317, 0.16185243])

Log della funzione di ripartizione

A questo punto possiamo calcolare allo stesso modo anche il logaritmo della funzione di ripartizione.

A questi link potete trovare maggiori dettagli:

  1. https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_continuous.logcdf.html?highlight=logcdf#scipy.stats.rv_continuous.logcdf

Ecco l’esempio:

from scipy.stats import norm 
import numpy as np 

r = np.random.randn(10)
norm.logcdf(r)

Out[24]: 
array([-0.09979539, -3.49219411, -0.7968107 , -0.99623727, -0.33686042,
       -1.04236671, -2.69926112, -1.49883799, -0.09242985, -1.82107031])

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.