Test op normaliteit

Voorbeeldbestanden bij dit artikel:
  • Jarque-Bera test op normaliteit
  • Inleiding

    Ook deze VBA-code gaat over statistiek. Als je een aantal getallen hebt (een steekproef), en je wil testen of die normaal verdeeld zijn, dan gebruik een zogenaamde Jarque-Bera test. Uitleg over de Normaalverdeling - één van de hoekstenen in de statistiek - vind je op deze pagina. Een voorbeeld van de normaalverdeling is de lengte van de mensen. De lengte van de meeste mensen schommelt rond het gemiddelde, en steeds minder en minder mensen hebben een lengte die verder en verder afwijkt van dat gemiddelde. Je krijgt als grafiek de mooie Bell-shape. Hier is de uitwerking ervan in Excel, met 4 extra functies:


    Public Const sFout As String = "Too few observations for a reliable Jarque-Bera test"
    Function JBSTAT(data As Range)
    ' Wim Gielis
    ' 01/18/2007
    ' Functies om te testen of data normaal verdeeld zijn:
    ' Jarque-Bera hypothesis test of normality
    ' Aangepaste en uitgebreide code van: Andreas Steiner
    ' http://www.andreassteiner.net/performanceanalysis
    ' Also on http://www.wimgielis.com
    Dim n As Long Dim i As Long Dim elem As Double Dim S As Double, K As Double Dim DataMean As Double, DataStDev As Double n = data.SpecialCells(xlCellTypeConstants, 1).Count If n > 30 Then DataMean = WorksheetFunction.Average(data) DataStDev = WorksheetFunction.StDev(data) For i = 1 To n elem = (data(i) - DataMean) / DataStDev S = S + elem ^ 3 K = K + elem ^ 4 Next i JBSTAT = n * (((S / n) ^ 2) / 6 + ((K / n - 3) ^ 2) / 24) Else: JBSTAT = sFout End If
    End Function
    Function JBpWaarde(data As Range)
    JBpWaarde = IIf(JBSTAT(data) = sFout, sFout, Round(WorksheetFunction.ChiDist(JBSTAT(data), 2), 2))
    End Function
    Function JBTEST(data As Range, SignifLevel As Double)
    JBTEST = IIf(Not (IsNumeric(JBSTAT(data))), sFout, (SignifLevel < JBpWaarde(data)))
    End Function
    Function JBKritiekeWaarde(SignifLevel As Double) As Double
    JBKritiekeWaarde = Round(WorksheetFunction.ChiInv(SignifLevel, 2), 2)
    End Function

    Voorbeeldbestand en code

    Ik heb alles samengezet in een bestand bovenaan de pagina, inclusief een voorbeeld.




    Over Wim

    Wim Gielis is Business Intelligence consultant en Excel expert

    Andere links