fitlm
               Regress the continuous outcome (i.e. dependent variable) y on
 continuous or categorical predictors (i.e. independent variables) X
 by minimizing the sum-of-squared residuals. Unless requested otherwise,
 fitlm prints the model formula, the regression coefficients (i.e.
 parameters/contrasts) and an ANOVA table. Note that unlike anovan,
 fitlm treats all factors as continuous by default. A bootstrap
 resampling variant of this function, bootlm, is available in the
 statistics-resampling package and has similar usage.
X must be a column major matrix or cell array consisting of the predictors. A constant term (intercept) should not be included in X - it is automatically added to the model. y must be a column vector corresponding to the outcome variable. modelspec can specified as one of the following:
 fitlm can take a number of optional parameters as name-value pairs.
 […] = fitlm (..., "CategoricalVars", categorical)
 fitlm also accepts optional anovan parameters as name-value
 pairs (except for the "model" parameter). The accepted parameter names from
 anovan and their default values in fitlm are:
 Type ’help anovan’ to find out more about what these options do.
 fitlm can return up to two output arguments:
[tab] = fitlm (…) returns a cell array containing a table of model parameters
 [tab, stats] = fitlm (…) returns a structure
 containing additional statistics, including degrees of freedom and effect
 sizes for each term in the linear model, the design matrix, the
 variance-covariance matrix, (weighted) model residuals, and the mean squared
 error. The columns of stats.coeffs (from left-to-right) report the
 model coefficients, standard errors, lower and upper 100*(1-alpha)%
 confidence interval bounds, t-statistics, and p-values relating to the
 contrasts. The number appended to each term name in stats.coeffnames
 corresponds to the column number in the relevant contrast matrix for that
 factor. The stats structure can be used as input for multcompare.
 Note that if the model contains a continuous variable and you wish to use
 the STATS output as input to multcompare, then the model needs
 to be refit with the "contrast" parameter set to a sum-to-zero contrast
 coding scheme, e.g."simple".
See also: anovan, multcompare
Source Code: fitlm
| 
 y =  [ 8.706 10.362 11.552  6.941 10.983 10.092  6.421 14.943 15.931 ...
        22.968 18.590 16.567 15.944 21.637 14.492 17.965 18.851 22.891 ...
        22.028 16.884 17.252 18.325 25.435 19.141 21.238 22.196 18.038 ...
        22.628 31.163 26.053 24.419 32.145 28.966 30.207 29.142 33.212 ...
        25.694 ]';
 X = [1 1 1 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5]';
 [TAB,STATS] = fitlm (X,y,"linear","CategoricalVars",1,"display","on");
MODEL FORMULA (based on Wilkinson's notation):
Y ~ 1 + X1
MODEL PARAMETERS (contrasts for the fixed effects)
Parameter               Estimate        SE  Lower.CI  Upper.CI        t Prob>|t|
--------------------------------------------------------------------------------
(Intercept)                   10      1.02      7.93      12.1     9.83    <.001 
X1_1                           8      1.64      4.66      11.3     4.87    <.001 
X1_2                           9      1.44      6.07      11.9     6.25    <.001 
X1_3                          11      1.49      7.97        14     7.38    <.001 
X1_4                          19       1.4      16.2      21.8    13.58    <.001 
ANOVA TABLE (Type II sums-of-squares):
Source                   Sum Sq.    d.f.    Mean Sq.  R Sq.            F  Prob>F
--------------------------------------------------------------------------------
X1                        1561.3       4      390.33  0.855        47.10   <.001 
Error                     265.17      32      8.2866
Total                     1826.5      36 
                     | 
 
                  | 
 popcorn = [5.5, 4.5, 3.5; 5.5, 4.5, 4.0; 6.0, 4.0, 3.0; ...
            6.5, 5.0, 4.0; 7.0, 5.5, 5.0; 7.0, 5.0, 4.5];
 brands = {'Gourmet', 'National', 'Generic'; ...
           'Gourmet', 'National', 'Generic'; ...
           'Gourmet', 'National', 'Generic'; ...
           'Gourmet', 'National', 'Generic'; ...
           'Gourmet', 'National', 'Generic'; ...
           'Gourmet', 'National', 'Generic'};
 popper = {'oil', 'oil', 'oil'; 'oil', 'oil', 'oil'; 'oil', 'oil', 'oil'; ...
           'air', 'air', 'air'; 'air', 'air', 'air'; 'air', 'air', 'air'};
 [TAB, STATS] = fitlm ({brands(:),popper(:)},popcorn(:),"interactions",...
                          "CategoricalVars",[1,2],"display","on");
MODEL FORMULA (based on Wilkinson's notation):
Y ~ 1 + X1 + X2 + X1:X2
MODEL PARAMETERS (contrasts for the fixed effects)
Parameter               Estimate        SE  Lower.CI  Upper.CI        t Prob>|t|
--------------------------------------------------------------------------------
(Intercept)                 5.67     0.215       5.2      6.14    26.34    <.001 
X1_1                       -1.33     0.304        -2     -0.67    -4.38    <.001 
X1_2                       -2.17     0.304     -2.83      -1.5    -7.12    <.001 
X2_1                        1.17     0.304     0.504      1.83     3.83     .002 
X1:X2_1                   -0.333      0.43     -1.27     0.604    -0.77     .454 
X1:X2_2                   -0.167      0.43      -1.1     0.771    -0.39     .705 
ANOVA TABLE (Type II sums-of-squares):
Source                   Sum Sq.    d.f.    Mean Sq.  R Sq.            F  Prob>F
--------------------------------------------------------------------------------
X1                         15.75       2       7.875  0.904        56.70   <.001 
X2                           4.5       1         4.5  0.730        32.40   <.001 
X1*X2                   0.083333       2    0.041667  0.048         0.30    .746 
Error                     1.6667      12     0.13889
Total                         22      17 
                     | 
