Funktioon syötetään yksi nx1 -vektori. Oletetaan, että vektori on esim. 20x1. Toisena tekijänä muuttujaan annetaan viive, esim. 3.
Tarkoituksena on muodostaa vektori, jossa 1. solua siirretään pykälä alaspäin (tulee 19x1 -vektori, viimeinen solu jää pois) ja ottaa siitä korrelaatio alkuperäisen kanssa. Sitten siirretään 1. solua 2 pykälää alaspäin (18x1 vektori, loppupäätä lyhennetään taas) jne. kunnes k solua on tiputettu alusta pois. Esimerkissä siis k = 3 = viive ja vektorit näyttävät tältä:
a
b a
c b a
d c b a
. . . .
s s s s
t t t t
Esimerkissä syntyy 3 korrelaatiota, jotka lasketaan yhteen.
Kaavailin alla näkyvää sisäkkäistä silmukkaa. Jostain syystä silmukka tuottaa kuitenkin vastaukseksi vain kahden ensimmäisen vektorin korrelaation kolminkertaisena eli näyttäisi, etten osannut hallita ulompaa silmukkaa, jotta saisin mukaan 1. ja 3. vektorin korrelaation. Onko k:n silmukka jotenkin viallinen?
Public function crx (v As Variant, viive as Double) as Variant
...
mat = v
i = 1
j = 1
k = 1
N = UBound(mat, 1)
Do Until k > viive
Do Until i = N
If Not IsEmpty(mat(i, 1)) Then
mat1(j, 1) = mat(i k, 1)
mat2(j, 1) = mat(i, 1)
j = j 1
End If
i = i 1
Loop
corr = WorksheetFunction.Correl(mat1, mat2)
summa = summa corr
k = k 1
Loop
crx = summa
Tarkoituksena on muodostaa vektori, jossa 1. solua siirretään pykälä alaspäin (tulee 19x1 -vektori, viimeinen solu jää pois) ja ottaa siitä korrelaatio alkuperäisen kanssa. Sitten siirretään 1. solua 2 pykälää alaspäin (18x1 vektori, loppupäätä lyhennetään taas) jne. kunnes k solua on tiputettu alusta pois. Esimerkissä siis k = 3 = viive ja vektorit näyttävät tältä:
a
b a
c b a
d c b a
. . . .
s s s s
t t t t
Esimerkissä syntyy 3 korrelaatiota, jotka lasketaan yhteen.
Kaavailin alla näkyvää sisäkkäistä silmukkaa. Jostain syystä silmukka tuottaa kuitenkin vastaukseksi vain kahden ensimmäisen vektorin korrelaation kolminkertaisena eli näyttäisi, etten osannut hallita ulompaa silmukkaa, jotta saisin mukaan 1. ja 3. vektorin korrelaation. Onko k:n silmukka jotenkin viallinen?
Public function crx (v As Variant, viive as Double) as Variant
...
mat = v
i = 1
j = 1
k = 1
N = UBound(mat, 1)
Do Until k > viive
Do Until i = N
If Not IsEmpty(mat(i, 1)) Then
mat1(j, 1) = mat(i k, 1)
mat2(j, 1) = mat(i, 1)
j = j 1
End If
i = i 1
Loop
corr = WorksheetFunction.Correl(mat1, mat2)
summa = summa corr
k = k 1
Loop
crx = summa
Vastaukset 1
Vanhimmat
siirretty vba-palstalle...