Calcolo distribuzione normale

di il
4 risposte

Calcolo distribuzione normale

Salve a tutti , premetto che sono alle prime armi con Access quindi ancora poco preparato.
Detto ciò vi illustro il mio problema : ho una serie di articoli , ogni articolo è caratterizzato da 3 lavorazioni (contraddistinte da un numero) e mi viene ordinato più volte , per ogni lavorazione ho un tempo di lavorazione variabile da ordine a ordine.. in altre parole per un singolo articolo ho tot. Ordini , per ogni ordine ho le tre lavorazioni con il corrispettivo tempo di lavorazione. Io vorrei calcolare, per ogni articolo , la distribuzione normale dei tempi di lavorazione delle singole lavorazioni. Con il generatore di espressioni ho provato ad usare DstDev, DStDevP , ma non capisco come usarle e sulla rete non sono riuscito a trovare esempi soddisfacenti. Su un foglio Excel ho isolato tutti i tempi di una lavorazione , di un singolo articolo e sono riuscito a determinare la distribuzione normarle con la funzione DISTRIB.NORM.N(x;media;dev_standard;comulativo) , vorrei replicare il risultato di questa funzione su Access. È possibile? Come devo fare ?

4 Risposte

  • Re: Calcolo distribuzione normale

    Con la tabella dei dati in esame, realizza una query in modo da calcolare i valori della media e della deviazione standard per ciascun intervallo di interesse.
    I risultati di questi valori li dovrai confrontare, relazionandoli, in ciascun intervallo (tramite una nuova query) con i dati originari, e tramite calcolo determinare la distribuzione normale.

    Ad incremento della tematica:
    https://www.experts-exchange.com/articles/2529/Median-Mode-Skewness-and-Kurtosis-in-MS-Access.html
    https://bytes.com/topic/access/answers/211496-normal-distribution-table-graph
  • Re: Calcolo distribuzione normale

    La ringrazio molto.
    Manuele
  • Re: Calcolo distribuzione normale

    Se può esserti utile ti allego un codice che implementa la distribuzione normale cumulativa (equivalente alla funzione DISTRIB.NORM di Excel) in modo che la puoi utilizzare direttamente in Access (anche all'interno di una query) senza la necessità di ulteriori elementi.
    
    
    '**************************************************************************
    '
    ' Funzione DistribuzioneNormaleCumulativa (distribuzione normale cumulativa)
    '
    ' La funzione calcola la disrtibuzione normale dato il valore x stabito da:
    ' x = (valore - media) / deviazione_standard
    ' NB Risulta un calcolo più efficiente rispetto ad altri algoritmi
    ' Fornendo un insieme di valori nell'intervallo dei valori osservati
    ' è possibile visionare e disegnare un grafico ottenendo
    ' la distribuzione normale cumulativa
    '
    ' Uso:
    ' ? NormDist5c( -0,267261241912424 )
    '                                       risultato = 0,39460950636226
    ' ? NormDist5c( 0,801783725737273 )
    '                                       risultato = 0,788672299397473
    ' ? NormDist5c(1.64)
    '                                       risultato = 0,949499538787703
    '
    ' Equivalente alla funzione disponibile in Excel
    ' =DISTRIB.NORM(IntervalloCelle; MediaCelle; DeviazioneStandardCelle; VERO)
    '***********************************************************************
    
    Public Function DistribuzioneNormaleCumulativa(x As Double) As Double
        Dim T As Double, F As Double, Phi As Double
        Const p = 0.23164                   ' Angolo seno2  (0.23148 ± 0.00016)
        Const c1 = 0.31938                  ' Coefficienti precalcolati
        Const c2 = -0.35655
        Const c3 = 1.7814
        Const c4 = -1.8212
        Const c5 = 1.3302
        Const E1 = 2.718282                 ' Base logaritmo naturale, costante E uguale a 2,71828182845904
        Const PI = 3.14159265358979         ' PI greco
        T = 1 / (1 + p * Abs(x))
        F = 1 / Sqr(2 * PI) * E1 ^ (-x ^ 2 / 2)
        Phi = 1 - F * (c1 * T + c2 * T ^ 2 + c3 * T ^ 3 + c4 * T ^ 4 + c5 * T ^ 5)
        ' Valuta in quale parte della curva gaussiana (vista la simmetria) ricade il valore
        ' della distribuzione, per cui avremo la probabilità (Phi) nei valori 0 - 0,5 e 0,5 - 1.
        If x > 0 Then
            DistribuzioneNormaleCumulativa = Phi
        Else
            DistribuzioneNormaleCumulativa = 1 - Phi
        End If
    End Function
    
    
    Per l'impiego, ad esempio, se abbiamo una tabella ("Dati") con i campi "Apparato" (testo) e "Valore" (numerico) in cui vogliamo la distribuzione normale cumulativa, è sufficiente, per prima cosa, realizzare una query per determinare la media e la deviazione standard del campo "Valore", per ciascun "Apparato":
    
    SELECT Dati.Apparato, Avg(Dati.Valore) AS Media, StDev(Dati.Valore) AS DeviazioneStd
    FROM Dati
    GROUP BY Dati.Apparato;
    
    Denominiamo la succitata query "QueryDatiMediaDevStd".
    Realizziamo una nuova query che abbia la tabella originaria ("Dati") e la query precedente "QueryDatiMediaDevStd" ponendoli in relazione (INNER JOIN) tramite il campo comune "Apparato", con il campo su cui si vuole effettuare la distribuzione ("Valore"), quindi si inseriscono gli elementi calcolati di "Media" e "DeviazioneStd" e come ultimo elemento la funzione citata inizialmente "DistribuzioneNormaleCumulativa" (già posta in un modulo) fornendo come parametro la differenza fra [Valore] - [Media] in rapporto alla deviazione standard [DeviazioneStd]) implementando una similare query SQL:
    
    SELECT Dati.Apparato, Dati.Valore, QueryDatiMediaDevStd.Media, 
           QueryDatiMediaDevStd.DeviazioneStd, 
           DistribuzioneNormaleCumulativa( ([Valore] - [Media]) / [DeviazioneStd]) AS DistrNormCum
    FROM Dati 
    INNER JOIN QueryDatiMediaDevStd 
    ON Dati.Apparato = QueryDatiMediaDevStd.Apparato;
    


    In tal modo si potrà valutare (direttamente in SQL, tramite anche l'interfaccia QBE) la distribuzione normale cumulativa di ciascun elemento.
  • Re: Calcolo distribuzione normale

    È stato utilissimo, la ringrazio davvero tanto !!

    Manuele
Devi accedere o registrarti per scrivere nel forum
4 risposte