応答曲面法

以下の事例を試す
https://tech-oh.com/2022/04/28/rsm_5/

box-behnken.csv

idx	a	b	c	d	e	a^2	b^2	c^2	d^2	e^2	ab	ac	ad	ae	bc	bd	be	cd	ce	de	extra	y
1	-1	-1	0	0	0	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	1	66.6
2	1	-1	0	0	0	1	1	0	0	0	-1	0	0	0	0	0	0	0	0	0	1	64.7
3	-1	1	0	0	0	1	1	0	0	0	-1	0	0	0	0	0	0	0	0	0	1	54.9
4	1	1	0	0	0	1	1	0	0	0	1	0	0	0	0	0	0	0	0	0	1	48.8
5	1	0	-1	0	0	1	0	1	0	0	0	-1	0	0	0	0	0	0	0	0	1	66.7
6	1	0	-1	0	0	1	0	1	0	0	0	-1	0	0	0	0	0	0	0	0	1	64
7	-1	0	1	0	0	1	0	1	0	0	0	-1	0	0	0	0	0	0	0	0	1	56.2
8	1	0	1	0	0	1	0	1	0	0	0	1	0	0	0	0	0	0	0	0	1	50.1
9	0	0	-1	-1	0	0	0	1	1	0	0	0	0	0	0	0	0	1	0	0	1	69.8
10	0	0	1	-1	0	0	0	1	1	0	0	0	0	0	0	0	0	-1	0	0	1	57.3
11	0	0	-1	1	0	0	0	1	1	0	0	0	0	0	0	0	0	-1	0	0	1	62.1
12	0	0	1	1	0	0	0	1	1	0	0	0	0	0	0	0	0	1	0	0	1	51.3
13	0	0	0	-1	-1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	1	1	66
14	0	0	0	1	-1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	-1	1	61.6
15	0	0	0	-1	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	-1	1	59.7
16	0	0	0	1	1	0	0	0	1	1	0	0	0	0	0	0	0	0	0	1	1	50.9
17	0	-1	0	0	-1	0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	1	71.2
18	0	1	0	0	-1	0	1	0	0	1	0	0	0	0	0	0	-1	0	0	0	1	56.7
19	0	-1	0	0	1	0	1	0	0	1	0	0	0	0	0	0	-1	0	0	0	1	61.5
20	0	1	0	0	1	0	1	0	0	1	0	0	0	0	0	0	1	0	0	0	1	61.6
21	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.2
22	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.1
23	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.2
24	-1	0	0	-1	0	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0	1	62.8
25	1	0	0	-1	0	1	0	0	1	0	0	0	-1	0	0	0	0	0	0	0	1	59.4
26	-1	0	0	1	0	1	0	0	1	0	0	0	-1	0	0	0	0	0	0	0	1	53
27	1	0	0	1	0	1	0	0	1	0	0	0	1	0	0	0	0	0	0	0	1	59.6
28	-1	0	0	0	-1	1	0	0	0	1	0	0	0	1	0	0	0	0	0	0	1	65.4
29	1	0	0	0	-1	1	0	0	0	1	0	0	0	-1	0	0	0	0	0	0	1	60.3
30	-1	0	0	0	1	1	0	0	0	1	0	0	0	-1	0	0	0	0	0	0	1	56.5
31	1	0	0	0	1	1	0	0	0	1	0	0	0	1	0	0	0	0	0	0	1	52.2
32	0	-1	-1	0	0	0	1	1	0	0	0	0	0	0	1	0	0	0	0	0	1	69.8
33	0	1	-1	0	0	0	1	1	0	0	0	0	0	0	-1	0	0	0	0	0	1	69.8
34	0	-1	1	0	0	0	1	1	0	0	0	0	0	0	-1	0	0	0	0	0	1	63.2
35	0	1	1	0	0	0	1	1	0	0	0	0	0	0	1	0	0	0	0	0	1	46.4
36	0	-1	0	-1	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	1	70.3
37	0	1	0	-1	0	0	1	0	1	0	0	0	0	0	0	-1	0	0	0	0	1	50
38	0	-1	0	1	0	0	1	0	1	0	0	0	0	0	0	-1	0	0	0	0	1	62.5
39	0	1	0	1	0	0	1	0	1	0	0	0	0	0	0	1	0	0	0	0	1	49.9
40	0	0	-1	0	-1	0	0	1	0	1	0	0	0	0	0	0	0	0	1	0	1	70.9
41	0	0	1	0	-1	0	0	1	0	1	0	0	0	0	0	0	0	0	-1	0	1	58.3
42	0	0	-1	0	1	0	0	1	0	1	0	0	0	0	0	0	0	0	-1	0	1	61.1
43	0	0	1	0	1	0	0	1	0	1	0	0	0	0	0	0	0	0	1	0	1	50.5
44	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.1
45	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.1
46	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	0	1	59.2
clear; close all;

df = readtable('box_behken.csv');
mat = table2array(df);
X = mat(:,2:end-1); %remove the first and last column
y = mat(:,end); %y is the last column

beta = inv(transpose(X)*X)*transpose(X)*y;

% beta = [-1.14 1.26 1.23 -0.72 0.97...
%        -1.05 -0.85 0.28 0.20 -4.20 1.93 ...
%        3.65 0.43 0.50 -1.10 -2.13 -5.73 -6.31 -2.91...
%        -3.53 59.15]';

f = @(x1,x2,x3,x4,x5) ...
    beta(1)*x1 + beta(2)*x2 + beta(3)*x3 + ...
    beta(4)*x4 + beta(5)*x5 + beta(6)*x1.*x2 + ...
    beta(7)*x1.*x3 + beta(8)*x1.*x4 + beta(9)*x1.*x5 + ...
    beta(10)*x2.*x3 + beta(11)*x2.*x4 + beta(12)*x2.*x5 + ...
    beta(13)*x3.*x4 + beta(14)*x3.*x5 + beta(15)*x4.*x5;


mask_table = readtable('mask.csv');
mask_array = table2array(mask_table);
mask_array = mask_array(:,2:end);
tmp = size(mask_array);
N = tmp(1);

for idx=1:N
    subplot(2,N/2,idx);
    % x1 = linspace(0,1);
    % x2 = linspace(5,15);
    % x3 = linspace(0.1,0.3);
    % x4 = linspace(2,4);
    % x5 = linspace(0.1,0.3);
    x1 = linspace(-1,1);
    x2 = x1;
    x3 = x1;
    x4 = x1;
    x5 = x1;
    switch(idx)
        case 1
            [X1,X2] = meshgrid(x1,x2);
            Z = f(X1,X2,0,0,0);
            contourf(X1,X2,Z);
        case 2
            [X1,X3] = meshgrid(x1,x3);
            Z = f(X1,0,X3,0,0);
            contourf(X1,X3,Z);
        case 3
            [X1,X4] = meshgrid(x1,x4);
            Z = f(X1,0,0,X4,0);
            contourf(X1,X4,Z);
        case 4
            [X1,X5] = meshgrid(x1,x5);
            Z = f(X1,0,0,0,X5);
            contourf(X1,X5,Z);
        case 5
            [X2,X3] = meshgrid(x2,x3);
            Z = f(0,X2,X3,0,0);
            contourf(X2,X3,Z);
        case 6
            [X2,X4] = meshgrid(x2,x4);
            Z = f(0,X2,0,X4,0);
            contourf(X2,X4,Z);
        case 7
            [X2,X5] = meshgrid(x2,x5);
            Z = f(0,X2,0,0,X5);
            contourf(X2,X5,Z);
        case 8
            [X3,X4] = meshgrid(x3,x4);
            Z = f(0,0,X3,X4,0);
            contourf(X3,X4,Z);
        case 9
            [X3,X5] = meshgrid(x3,x5);
            Z = f(0,0,X3,0,X5);
            contourf(X3,X5,Z);
        case 10
            [X4,X5] = meshgrid(x4,x5);
            Z = f(0,0,0,X4,X5);
            contourf(X4,X5,Z);
    end
end

big;

うまく動いていない感じがする