Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 8 odgovora
  • 2.903 pregleda

Najnovija ↓

Prilagođenje korisničke funkcije 17.03.2009. u 15:41 · pre 214 meseci #1
opet ja ... znam da sam dosadna ... ali ... ako neko zna.

evo najbolje da postavim excel file...

primer 2 funkcionise ... isti je rezultat izracunato i pomocu formule i vba koda

ali primer 1 ne.

da li neko mozda zna kako napisati formulu iz vba koda.
Re: Prilagođenje korisničke funkcije 17.03.2009. u 20:20 · pre 214 meseci
izmenjeno 1 put, poslednji put Jpeca 17.03.2009. u 21:17
  1. Jpeca17.03.2009. u 21:17zapis iz teksta poruke
#2
Iz primera mi nije jasno o čemu se radi.
Definisala si korisniču funkciju K_tau u okviru modula, koja nešto računa na osnovu dva niza podataka. Iskoristila si tu funkciju u tabeli - formule u ćelijama F46 i M46. Koliko ja razumem u F46 poziva se ova funkcija za primer1, a u M46 za primer 2.
E sad, porediš rezultat te funkcije sa formulama u F43 i M43 - ali obe ove formule koriste primer2? Ista formula
Code:
=+K41/H43

pojavljuje se u obe ćelije. Nije mi jasno kako onda možeš porediti? Takođe ova formula rezultat je vrednosti samo jednog niza (iz kolone G), a u funkciji pozivaš dva niza.

Pokušaj da objasniš šta funkcija tačno treba da radi ako ti treba pomoć oko koda.
Potpis
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
Re: Prilagođenje korisničke funkcije 18.03.2009. u 10:56 · pre 214 meseci #3
da ista formula i na kraju se dobije isti rezultat.
i sad mi nije jasno kako na jednostavnim primerima formula funkcionise, a na komplikovanijim ne.

pa pretpostavljam da u makrou, se mnozi prva i druga kolona, a prvo se oduzimaju brojevi x2-x1, x3-x2 (ili gresim)
(dakle prve kolone i druge kolone)

ja sam to napisala formulom:
=if(L5>L4;L4-L5;0) =if(M5>M4;M4-M5;0)

za prvu i drugu kolonu i onda ih pomnozila.



Code:

Function K_tau(ByVal X1 As Range, ByVal X2 As Range) As Double
Dim i As Long, j As Long, s As Long, n As Long
n = X1.Rows.Count
For i = 1 To n
For j = i To n
If j > i Then
s = s + Sgn((X1.Cells(i, 1) - X1.Cells(j, 1)) * (X2.Cells(i, 1) - X2.Cells(j, 1)))
End If
Next
Next
K_tau = (Application.WorksheetFunction.Combin(n, 2) ^ -1) * s
End Function


ovo n mi je jasno

j mora biti vece od i da bi pokrenulo funkciju s

nije mi jasno sta je ovo s "s" = "s" + Sgn(....

i sta znaci Combin(n, 2)^-1*s

jel to znaci n*2 pa na -1 ili ?


evo sad sam pokusala samo na primeru 2.

pomocu formule (iz knjige), pomocu makroa i pokusaj da makro ja sama uradim. kao sto pise u njemu.

Re: Prilagođenje korisničke funkcije 18.03.2009. u 11:35 · pre 214 meseci #4
s je medjurezultat koji se formira za izračunavanje vrednosti funkcije - o čemu se tačno radi ne znam, ali obrati pažnju da zbog sgn u svakoj iteraciji menja za -1,0 ili 1!
Izraz
Code:
Application.WorksheetFunction.Combin(n, 2) ^ -1

je recipročna vrednost broja kombinacija drugog reda od n elemenata. Tj. (n-k)!k!/n! = 2/(n*(n-1))
Deo koda
Code:
 
For j = i To n
If j > i Then 
...
End If
Next

meni nije jasan jer je zbog uslova u For petlji j uvek veće od i osim u prvoj iteraciji, pa mi se čini da je IF nepotrebno
Code:
 
For j = i+1 To n
...
Next


Potpis
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
Re: Prilagođenje korisničke funkcije 18.03.2009. u 11:53 · pre 214 meseci
izmenjeno 1 put, poslednji put mirjanagb 18.03.2009. u 13:01
  1. mirjanagb18.03.2009. u 13:01zapis iz teksta poruke
#5
prvo izvinjavam se zbog nejasno napisanog prvog posta ... inace se i poslednjih dana osecam tako nejasno ...


kendal tau, to je ustvari rangiranje, pa npr:


x y Nc Nd

1 2 3 1
2 1 3 0
3 4 1 1
4 5 0 1
5 3 0 0

Nc su brojevi koji su veci od prethodnog broja (kad gledam kolonu y, ispod 2 su 3 broja veca od 2; ispod 1 su 3 brojeva veca)

nd su brojevi manji od prethodnog broja (opet kolona y, ispod 2 je jedan broj manji, ...)

suma nc = 7
suma nd = 3

7-3=4

dalje po formuli imamo 5 brojeva pa bi bilo: 5*(5-1)/2= 10

znaci da je tau= 4/10 = 0,4

isti ova jrezultat dobijem i sa makroom =k_tau((a1:a5);(b1:b5))= 0.4

ali to je jednostavan primer kad je prva kolona od 1 - 5.
Re: Prilagođenje korisničke funkcije 18.03.2009. u 13:49 · pre 214 meseci #6
Na osnovu onoga što sam našao na wikipedi http://en.wikipedia.org/wiki/Kendall_tau_distance
kod za funkciju mogao bi da bude sledeći:
Code:

Function K_tau(ByVal X1 As Range, ByVal X2 As Range) As Double
' Obracun Kendall Tau distance - mere korelacije
' izmedju dva niz podataka X1 i X2
'
Dim i As Long, j As Long, s As Long, n As Long
n = X1.Rows.Count
For i = 1 To n
  For j = i + 1 To n
   If Sgn(X1.Cells(i, 1) - X1.Cells(j, 1)) <> Sgn(X2.Cells(i, 1) - X2.Cells(j, 1)) Then
      s = s + 1             ' Razlicit redosled elemenat i i j u dva niza
   End If
  Next
Next
K_tau = 2 * s / (n * (n - 1))
End Function

Što se tiče tvoje računice za Nc i Nd pomoću formula u tabeli nisam siguran da to može tako.
U wikipedi Nc i Nd su drugačije definisane. Upoređuju se odgovarajući elementi iz oba niza dok ti u formulama radiš samo sa jednim nizom
(kolona G u primeru 1).
Potpis
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
Re: Prilagođenje korisničke funkcije 18.03.2009. u 16:10 · pre 214 meseci #7
http://en.wikipedia.org/wiki/Kendall%27s_tau


da ispadne tacan rezultat, i kad ja uradim peske i preko tvog makroa.

ali ovo je samo u slucaju kad je <

a meni treba i kad je >, dakle korelacija veceg i manjeg.

na ovoj adresi je formula (ta i sa Nc i Nd)

na ovaj tvoj makro, moze li se dodati, dakle i kad je > i onda da se oduzmu ta dva broja i onda da se dobije "s"?
Re: Prilagođenje korisničke funkcije 18.03.2009. u 21:32 · pre 214 meseci #8
Preradio sam funkciju tako da računa Nc i Nd prema definicije Nc i Nd koju sam našao na wikipedi.
Code:

Function K_tau(ByVal X1 As Range, ByVal X2 As Range) As Double
' Obracun Kendall Tau - Kendall's rank correlation
' izmedju dva niz podataka X1 i X2
'
Dim i As Long, j As Long, n As Long
Dim Nc As Long, Nd As Long
n = X1.Rows.Count
For i = 1 To n
  For j = i + 1 To n
   If Sgn(X1.Cells(i, 1) - X1.Cells(j, 1)) = Sgn(X2.Cells(i, 1) - X2.Cells(j, 1)) Then
      Nc = Nc + 1  ' saglasni par
   Else
      Nd = Nd + 1  ' nesaglasni par
   End If
  Next
Next
K_tau = 2 * (Nc - Nd) / (n * (n - 1))
End Function


Uporedio sam rezultate sa nekim primerima na mreži (npr. http://www.statsdirect.com/help/nonparametric_methods/kend.htm) i pokazalo se slaganje. Bilo bi puno lakše da si na početku jasno opisala način dolaženja do potrebnog rezultata na nekom primeru.






Potpis
Nije to loše Rembrante, samo što ne bi dodao još malo boje?
Re: Prilagođenje korisničke funkcije 19.03.2009. u 10:16 · pre 214 meseci #9
znam, zato se izvinjavam jos jednom ....

e to je ono sto trazim ... dosta je lakse za razumeti, a potom objasniti ...

hvala puno na ulozenom trudu !!!!
!!!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme