AW: Korrelationskoeffizient
22.09.2006 23:42:51
ingUR
Hallo, Marco,
in welcher Form wilst Du die Kooefizienten nutzen? Als Ergebeniswert bei Vorgabe von lag k oder als Reihe für k = 1.. n-1?
Im ersten falls wäre aus dem nachfolgenden Programmcode die Funktion Autokoorelation in eine Zellenfunktion umzugestellten, die dann in der Form =Autokoorelation(B2:B100, 3, Mittelwert(B2:B100)) aufgerufen werden könnte, wobei der zweite Übergabeparameter den Wert für k darstellt.
Option Explicit
Sub AutoKoor()
Dim y() As Double, c() As Double, rnorm() As Double
Dim firstRow As Long, lastRow As Long, r As Long
Dim sum As Double, n As Long, yMittel As Double, k As Long
firstRow = Range("A:A").Find(What:="Zeit", _
LookIn:=xlValues, _
LookAt:=xlWhole, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, _
MatchCase:=True).Row + 1
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
ReDim y(lastRow - firstRow + 1)
ReDim c(lastRow - firstRow + 1)
ReDim rnorm(lastRow - firstRow + 1)
For r = firstRow To lastRow
y(r - firstRow + 1) = Cells(r, 2)
sum = sum + y(r - firstRow + 1)
n = n + 1
Next r
yMittel = sum / n
rnorm(0) = 1
For k = 0 To n - 1
c(k) = AutoKoorelation(y(), k, yMittel)
If k > 0 Then rnorm(k) = c(k) / c(0)
Cells(firstRow + k, 3) = k
Cells(firstRow + k, 4) = rnorm(k)
Next k
End Sub
Function AutoKoorelation(y() As Double, k As Long, yM As Double) As Double
Dim sum As Double, t As Long, n As Long
n = UBound(y)
For t = 1 To n - k
sum = sum + (y(t) - yM) * (y(t + k) - yM)
Next t
AutoKoorelation = sum / n
End Function
Die Datentabelle liegt dabei in der Form vor, das in Spalte A eine Kopfzeile den Begriff Zeit enthält. Daran anschließend stehen die Zeitwerte. In der Spalte B stehen die Werte der zu untersuchenden Zeitreihe.
In den Spalten C und E werden die k und die zugehörigen r-Werte, = empirische Autokoorelation c(k) / enpirische Varianz) = c(k)/c(0), eingetragen.
Gruß,
Uwe
https://www.herber.de/bbs/user/36942.xls