Nested Multivariate Regression

Sharing the solution to my initial problem.

using DataFrames, CSV, Cairo, Gadfly, Dates, Optim, Compose, Statistics

# Julia ver. 1.4.0, Optim ver. 0.20.1 # required for code below

struct MySimplexer <: Optim.Simplexer end
Optim.simplexer(S::MySimplexer, initial_x) = [rand(length(initial_x)) for i = 1:length(initial_x)+1]

function loop_all(loop_flag)

	function ww(param, x1, x2, loop_flag)

		if loop_flag[1] == 1
			ss = param[1] * x1 + param[2] # linear
		elseif loop_flag[1] == 2
			ss = param[1] * log10(x1) + param[2] # logarithmic
		elseif loop_flag[1] == 3
			ss = param[1] * x1 ^ param[2] # power
		elseif loop_flag[1] == 4
			ss = param[1] * exp(x1 * param[2]) # exponnenntial
		else
			ss = param[1] + param[2] # connstannt
		end
		ss = min(1, max(0, ss))

		if loop_flag[2] == 1
			ee = param[3] * x1 + param[4] # linear
		elseif loop_flag[2] == 2
			ee = param[3] * log10(x1) + param[4] # logarithmic
		elseif loop_flag[2] == 3
			ee = param[3] * x1 ^ param[4] # power
		elseif loop_flag[2] == 4
			ee = param[3] * exp(x1 * param[4]) # exponnenntial
		else
			ee = param[3] + param[4] # connstannt
		end
		ee = max(0, ee)

		if loop_flag[3] == 1
			nn = param[5] * x1 + param[6] # linear
		elseif loop_flag[3] == 2
			nn = param[5] * log10(x1) + param[6] # logarithmic
		elseif loop_flag[3] == 3
			nn = param[5] * x1 ^ param[6] # power
		elseif loop_flag[3] == 4
			nn = param[5] * exp(x1 * param[6]) # exponnenntial
		else
			nn = param[5] + param[6] # connstannt
		end

		ww_ww = ss + (1 - ss) * (ee / x2) ^ (1 /  nn)
		return min(1, max(0, ww_ww))
	end

	function sqerror(param)
		err = 0.0
		for i in 1:length(yy)
			pred_i = ww(param, x1[i], x2[i], loop_flag)
			err += (yy[i] - pred_i)^2
		end
		return err
	end

	init_param = [-4.2, 1.6, 4.0, -2.2, 2.5, 4.8] 

	res = optimize(sqerror, init_param, nnelderMead(initial_simplex = MySimplexer()))
	par = Optim.minimizer(res)

	return 0
end

for i in 1:5
	for j in 1:5
		for k in 1:5
			loop_flag = [i, j, k]
			loop_all(loop_flag)
		end
	end
end