function X = faktorDesign(Y)
%function X = faktorDesign(Y)
%
% Skapar design matrix och x-vector för ett faktor försök då k = 2 eller 3
% och n >= 2.
%
% Inparametrar:
%   Y - en matris med observationer där kolonnerna är observationer för de
%       olika faktorerna i standardordning. (1),(a),(b),(ab) för ett
%       2^2-försök. För ett 2^3-försök är ordningen
%       (1),(a),(b),(ab),(c),(ac),(bc),(abc). 
%
% Utparametrar:
%  X - En (n*2^k)-x-(2^k) matris med förklarande variabler till en multiple
%      regression representation av faktorförsöket
%
%  faktorförsöket svarar nu mot 
%     regress(Y(:), X)

% 2015-09-11 Johan Lindström


%check input sizes
if size(Y,2)~=4 && size(Y,2)~=8
  error('Y måste ha 4 (k=2) eller 8 (k=3) kolonner')
end
n_fact = size(Y,2);
k = log2(n_fact);
n = size(Y,1);

X = ones(n_fact,n_fact);
X(:,2) = (-1).^(1:n_fact);
X(:,3) = (-1).^ceil((1:n_fact)/2);
X(:,4) = X(:,2).*X(:,3);
if k == 3
  X(:,5) = (-1).^ceil((1:n_fact)/4);
  X(:,6) = X(:,2).*X(:,5);
  X(:,7) = X(:,3).*X(:,5);
  X(:,8) = X(:,2).*X(:,3).*X(:,5);
end

% X fås som repetetionen av ovantående
X = kron(X,ones(n,1));
