From 0ba1f8b8029396f94b7b448be03b9631d767a2dd Mon Sep 17 00:00:00 2001 From: Pedro Andrade Date: Fri, 2 Feb 2018 16:17:12 -0200 Subject: [PATCH] Updates to use log as argument to multiLevel. --- examples/costanza.lua | 2 ++ images/costanza.lua | 6 +++++ images/costanza.png | Bin 0 -> 16730 bytes log/costanza-log.png | Bin 0 -> 17925 bytes log/costanza-original.png | Bin 0 -> 15084 bytes lua/GoodnessOfFit.lua | 36 ++++++++++++++++++++++++++--- tests/alternative/MultipleRuns.lua | 4 ++-- tests/basic/GoodnessOfFit.lua | 9 ++++++++ 8 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 images/costanza.lua create mode 100644 images/costanza.png create mode 100644 log/costanza-log.png create mode 100644 log/costanza-original.png diff --git a/examples/costanza.lua b/examples/costanza.lua index c6cba1c..8264e97 100644 --- a/examples/costanza.lua +++ b/examples/costanza.lua @@ -1,6 +1,8 @@ -- @example Basic example for testing goodness-of-fit. -- This example reproduces Figure 4 of from Costanza R. -- Model goodness of fit: a multiple resolution procedure. Ecological modelling. 1989 Sep 15;47(3-4):199-215. +-- @image costanza.png + import("calibration") scene1 = CellularSpace{ diff --git a/images/costanza.lua b/images/costanza.lua new file mode 100644 index 0000000..8849baf --- /dev/null +++ b/images/costanza.lua @@ -0,0 +1,6 @@ + +dofile(packageInfo("calibration").path.."/examples/costanza.lua") + +chart:save("costanza.png") + +clean() diff --git a/images/costanza.png b/images/costanza.png new file mode 100644 index 0000000000000000000000000000000000000000..64968bd994bf60a9205a44c1d4b0428727922cc2 GIT binary patch literal 16730 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 a;zqP5Fd(V?dluL~L`FgZUMz0l|9=2VQE99I literal 0 HcmV?d00001 diff --git a/log/costanza-log.png b/log/costanza-log.png new file mode 100644 index 0000000000000000000000000000000000000000..588d763dfc9525e88f43c774a81880bd4979f754 GIT binary patch literal 17925 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 HDB%AA(I$mB literal 0 HcmV?d00001 diff --git a/log/costanza-original.png b/log/costanza-original.png new file mode 100644 index 0000000000000000000000000000000000000000..71d0037b94edbe764e3a7de5b77c5dd4c9b7e40e GIT binary patch literal 15084 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%0A1)6~mQ(^a#Q zS6S;xW&l6$y^6LUF_iVZN}k9k7|s=W)lBFe2c zVVRiqvoBfilB@pHVVyH+y%(!_{$q)X3NjxIkYK`*)1q3MOtU*^{nj4y?m*?KaX!qU29+D-V#a@#k&^B zDnS;l%boq*F$~dEV}d!L-RE$oa)RsDZv6Yy3axy`Oy2{t*(Ilyn(5Q(>e9K~4Nw&M z#Pu|dQA5y6#K$Ijh|ft7E((TBs;VQyZ_JJi?gNm04Y$6%qBq{)Gn^6F;v_0<-Zl|5 z(Fg5$CU2~qOM2t)hKe7|mU!p|sNoT4T8`;gS#b1;Kps9g&#_I?EI1O<%*Jz7JIu<& z#NZZ{)Z@`%;x}~C;qH5jLXs;eZG#cUvZOOp`Xy@glGd4f3|B^Hp>3bLI(|HHVvc*H zg$k&7C(!g}ZKK}WURH{>bE-afreONh?`ejkG4!pg13VFXv`3{e+59sb8}wDn@JpAn zB2}4wdg?co>;9&_6Q@YkFwkFPu-T?dVqDc$v3;-zGai?5{sZ6nN<#K*YvkZ@4M%T6 z)+d%gN zkPP@>{q4#e z>V#gSGI$!`^O?N;A(fcMmI2=kBTbvWWPEtrU+kR6s@V^a`zK1)n!I~rk7nH2jAdnn zE%CZvXlm87TeltFcz@4WTq0ueyvT8D3o5ie(^ey&094Ljq}*}e-K^35=IPpW^(4qv zR99Eejd-1%rLh%hsi>C5(>bp5j6mW6aufIt23b~F%!R)rDp9>UEovuws>l&9jD&&q zRG*ey6tNih9j-}KkaV8QPo46LRXrcM4*jR($GDOT87D67i6Ix^(-({~^r(myW}(8d z(b~(yzbSL7Od8=9oDE!!G6A*t!Bj?n%NdLeP(FQbV@5Ayh4%3PSdw8<7lI{(=!OBG l*0uk4X7JBfc9VAx?A8{!gnm;!2cP3Xl43HVMZzCG{ePi35*7de literal 0 HcmV?d00001 diff --git a/lua/GoodnessOfFit.lua b/lua/GoodnessOfFit.lua index 23c3f8e..672a483 100644 --- a/lua/GoodnessOfFit.lua +++ b/lua/GoodnessOfFit.lua @@ -237,6 +237,9 @@ end -- @arg data.discrete A boolean value indicating whether the values are discrete. The default value -- is false, meaning that the atributes are continuous. -- @arg data.k Value that determines the weigth for each square calibration. The default value is 0.1. +-- @arg data.log Value indicating whether the levels should be computed using log scale: 1, 2, 4, ... until +-- the maximum length in both directions. The default value (fales) means that all levels will be computed: +-- 1, 2, 3, ... until the maximum length in both directions. -- @usage import("calibration") -- -- cs1 = CellularSpace{ @@ -258,8 +261,9 @@ function multiLevel(data) verifyBasicArguments(data) defaultTableValue(data, "k", 0.1) + defaultTableValue(data, "log", false) - verifyUnnecessaryArguments(data, {"target", "select", "discrete", "k"}) + verifyUnnecessaryArguments(data, {"target", "select", "discrete", "k", "log"}) local k = data.k local cs1 = data.target[1] @@ -285,7 +289,8 @@ function multiLevel(data) local resolutionTable = {} local expTable = {} if data.discrete then - for i = 1, maxSquare do + local i = 1 + while i <= maxSquare do -- increase the square size and calculate fitness for each square. local fitSquare = discreteSquareBySquare(i, cs1, cs2, attribute1, attribute2, minSquare, maxSquare) if fitSquare ~= -1 then @@ -296,9 +301,22 @@ function multiLevel(data) fitnessSum = fitnessSum + (fitSquare * myexp) exp = exp + myexp end + + if data.log then + if i == maxSquare then + i = i + 1 + else + i = i * 2 + + if i > maxSquare then i = maxSquare end + end + else + i = i + 1 + end end else - for i = 1, maxSquare do + local i = 1 + while i <= maxSquare do -- increase the square size and calculate fitness for each square. local fitSquare = continuousSquareBySquare(i, cs1, cs2, attribute1, attribute2, minSquare, maxSquare) if fitSquare ~= -1 then @@ -309,6 +327,18 @@ function multiLevel(data) fitnessSum = fitnessSum + (fitSquare * myexp) exp = exp + myexp end + + if data.log then + if i == maxSquare then + i = i + 1 + else + i = i * 2 + + if i > maxSquare then i = maxSquare end + end + else + i = i + 1 + end end end diff --git a/tests/alternative/MultipleRuns.lua b/tests/alternative/MultipleRuns.lua index e15c9f3..a1acd06 100644 --- a/tests/alternative/MultipleRuns.lua +++ b/tests/alternative/MultipleRuns.lua @@ -195,7 +195,7 @@ return{ end unitTest:assertError(error_func, "Argument 'y' is mandatory.") - error_func = function() + error_func = function() m = MultipleRuns{ model = MyModel2, strategy = "factorial", @@ -284,7 +284,7 @@ return{ end unitTest:assertError(error_func, "Parameters used in strategy 'selected' must be in a table of scenarios.") - error_func = function() + error_func = function() m = MultipleRuns{ model = MyModel4, strategy = "selected", diff --git a/tests/basic/GoodnessOfFit.lua b/tests/basic/GoodnessOfFit.lua index a61ab5a..27dbe0e 100644 --- a/tests/basic/GoodnessOfFit.lua +++ b/tests/basic/GoodnessOfFit.lua @@ -59,6 +59,15 @@ return{ unitTest:assertEquals(result, 0.865, 0.01) -- 0.84 is the Total Fitness in Costanza Paper Example. + result = multiLevel{ + target = {cs, cs2}, + select = "costanza", + log = true, + discrete = true + } + + unitTest:assertEquals(result, 0.85, 0.01) + local warningFunc = function() result = multiLevel{ target = {sugar, sugar2},