Abstract

Mit einer expliziten Form der inversen Verteilungsfunktion sollten Sie sbRandCDFInv verwenden. Aber wenn eine solche nicht vorliegt, können Sie mit einer linearen Approximation die Funktion sbRandPDF nutzen. Unglücklicherweise ist dieser Ansatz sehr rechenintensiv, selbst wenn Sie die Anzahl der Punkte bei identischen oder nahezu identischen Steigungen reduzieren können.

Ein Beispiel einer geschichteten Stichprobe:

Triang_stratified_sample

Appendix – Programmcode sbRandPDF

Bitte beachten Sie dass diese Funktion die Funktion sbRandGeneral benötigt (aufruft).

Bitte den Haftungsausschluss im Impressum beachten.

Option Explicit

Function sbRandPDF(Optional dParam1, Optional dParam2, _
    Optional dParam3, Optional dRandom = 1#) As Double
'Source (EN): http://www.sulprobil.com/sbrandpdf_en/
'Source (DE): http://www.bplumhoff.de/sbrandpdf_de/
'(C) (P) by Bernd Plumhoff  12-Sep-2014 PB V0.15
Dim dRand As Double
Dim i As Long
Static dPar1 As Double
Static dPar2 As Double
Static dPar3 As Double
Static vX(0 To 1000) As Variant
Static vY(0 To 1000) As Variant
If dRandom < 0# Or dRandom > 1# Then
    sbRandPDF = CVErr(xlErrValue)
    Exit Function
End If
If dRandom = 1# Then
    dRand = Rnd()
Else
    dRand = dRandom
End If
If dParam1 <> dPar1 Or dParam2 <> dPar2 Or dParam3 <> dPar3 Then
    dPar1 = dParam1
    dPar2 = dParam2
    dPar3 = dParam3
    'Initialize RandGeneral call parameters
    For i = 0 To 1000
        vX(i) = dPar1 + i * (dPar3 - dPar1) / 1000#
        'Now we can insert an arbitrary PDF function
        If vX(i) < dPar2 Then
            vY(i) = (vX(i) - dPar1) / ((dPar3 - dPar1) * (dPar2 - dPar1))
            If vY(i) < 0# Then vY(i) = 0#
        Else
            vY(i) = (dPar3 - vX(i)) / ((dPar3 - dPar1) * (dPar3 - dPar2))
            If vY(i) < 0# Then vY(i) = 0#
        End If
    Next i
End If
'Depending on the PDF input range you need to feed start
'and end values to sbRandGeneral
sbRandPDF = sbRandGeneral(dPar1, dPar3, vX, vY, dRand)
End Function