Hi zusammen!
Ich sollte die Epanechnikov Kernschätzung für eine Reihe von Renditen berechnen. Folgende Formel dient als Vorlage:
k(z)=Summe t=1 bis n f(rt, z)*(3/(4nb))
wobei gilt: f(rt, z)= 1-((z-rt)/b) falls z-b < rt < z+b, ansonsten = 0
z ist die Stelle der Auswertung, n ist die Anzahl Daten (Renditen), b ist die Bandweite (als Standard 1.06sigma*n^-0.2)
Die Funktion sollte vom Typ "Function Kernel(data As Range, bins As Range, Optional bandwidth As Double)" sein. bins ist der Datensatz mit Punkten (z) an denen ausgwertet werden sollte.
data erstreckt sich über die Felder A8:A206, bins über L8:L58
Der von mir geschriebene Code funktioniert nicht, ich erhalte eine #WERT Fehlermeldung. Wo ist der Fehler? Danke fürs aushelfen...
Ich sollte die Epanechnikov Kernschätzung für eine Reihe von Renditen berechnen. Folgende Formel dient als Vorlage:
k(z)=Summe t=1 bis n f(rt, z)*(3/(4nb))
wobei gilt: f(rt, z)= 1-((z-rt)/b) falls z-b < rt < z+b, ansonsten = 0
z ist die Stelle der Auswertung, n ist die Anzahl Daten (Renditen), b ist die Bandweite (als Standard 1.06sigma*n^-0.2)
Die Funktion sollte vom Typ "Function Kernel(data As Range, bins As Range, Optional bandwidth As Double)" sein. bins ist der Datensatz mit Punkten (z) an denen ausgwertet werden sollte.
data erstreckt sich über die Felder A8:A206, bins über L8:L58
Der von mir geschriebene Code funktioniert nicht, ich erhalte eine #WERT Fehlermeldung. Wo ist der Fehler? Danke fürs aushelfen...
Visual Basic-Quellcode
- Option Base 1
- Option Explicit
- Function kernel(data As Range, bins As Range, Optional bandwidth As Double)
- Application.Volatile
- Dim einzeldichte As Double, dichte As Double, result() As Double
- Dim rt As Integer, n As Integer, nbins As Integer, z As Integer
- n = data.Rows.Count
- nbins = bins.Rows.Count
- ReDim result(1, nbins)
- If IsMissing(bandwidth) Then
- bandwidth = 1.06 * WorksheetFunction.StDev(data) * n ^ (-0.2)
- End If
- For z = 1 To nbins
- For rt = 1 To n
- If Cells(7 + z, 12) - bandwidth < Cells(7 + rt, 1) < Cells(7 + z, 12) + bandwidth Then
- einzeldichte = 1 - ((Cells(7 + z, 12) - Cells(7 + rt, 1)) / bandwidth) ^ 2
- Else
- einzeldichte = 0
- End If
- dichte = dichte + einzeldichte
- Next rt
- result(1, z) = dichte * (3 / (4 * n * bandwidth))
- Next z
- kernel = result
- End Function