Generates regressors for a general linear model.
#include <imsls.h>
int imsls_f_regressors_for_glm (int n_observations, float x[], int n_class, int n_continuous, ..., 0)
The type double function is imsls_d_regressors_for_glm.
int
n_observations (Input)
Number of observations.
float x[]
(Input)
An n_observations × (n_class + n_continuous) array
containing the data. The columns must be ordered such that the first n_class columns
contain the class variables and the next n_continuous columns
contain the continuous variables. (Exception: see optional argument IMSLS_X_CLASS_COLUMNS.)
int n_class
(Input)
Number of classification variables.
int
n_continuous (Input)
Number of continuous variables.
An integer (n_regressors) indicating the number of regressors generated.
#include <imsls.h>
int
imsls_f_regressors_for_glm (int
n_observations, float
x[],
int n_class, int n_continuous,
IMSLS_X_COL_DIM, int
x_col_dim,
IMSLS_X_CLASS_COLUMNS, int
x_class_columns[],
IMSLS_MODEL_ORDER, int
model_order,
IMSLS_INDICES_EFFECTS, int
n_effects,
int n_var_effects[], int indices_effects[],
IMSLS_DUMMY, Imsls_dummy_method
dummy_method,
IMSLS_REGRESSORS, float
**regressors,
IMSLS_REGRESSORS_USER, float
regressors[],
IMSLS_REGRESSORS_COL_DIM, int
regressors_col_dim,
0)
IMSLS_X_COL_DIM, int x_col_dim
(Input)
Column dimension of x.
Default: x_col_dim = n_class + n_continuous
IMSLS_X_CLASS_COLUMNS, int
x_class_columns[] (Input)
Index array of length n_class containing the
column numbers of x that are the
classification variables. The remaining variables are assumed to be
continuous.
Default: x_class_columns = 0,
1, ..., n_class − 1
IMSLS_MODEL_ORDER, int
model_order (Input)
Order of the model. Model order can be
specified as 1 or 2. Use optional argument IMSLS_INDICES_EFFECTS
to specify more complicated models.
Default: model_order = 1
or
IMSLS_INDICES_EFFECTS, int n_effects, int
n_var_effects[],
int indices_effects[]
(Input)
Variable n_effects is the
number of effects (sources of variation) in the model. Variable n_var_effects is an
array of length n_effects containing
the number of variables associated with each effect in the model. Argument indices_effects is an
index array of length n_var_effects[0] + n_var_effects[1] + … + n_var_effects (n_effects − 1). The first n_var_effects[0]
elements give the column numbers of x for each variable in
the first effect. The next n_var_effects[1]
elements give the column numbers for each variable in the second effect. … The last n_var_effects [n_effects − 1] elements give the
column numbers for each variable in the last effect.
IMSLS_DUMMY,
Imsls_dummy_method
dummy_method (Input)
Dummy variable option. Indicator
variables are defined for each class variable as described in the “Description” section.
Dummy variables are then generated from the n indicator variables in one of the following three ways:
dummy_method |
Method |
IMSLS_ALL |
The n indicator variables are the dummy variables (default). |
IMSLS_LEAVE_OUT_LAST |
The dummies are the first n − 1 indicator variables. |
IMSLS_SUM_TO_ZERO |
The n − 1 dummies are defined in terms of the indicator variables so that for balanced data, the usual summation restrictions are imposed on the regression coefficients. |
IMSLS_REGRESSORS, float
**regressors (Output)
Address of a pointer to the
internally allocated array of size n_observations × n_regressors
containing the regressor variables generated from x.
IMSLS_REGRESSORS_USER, float
regressors[] (Output)
Storage for array regressors is provided
by the user. See IMSLS_REGRESSORS.
IMSLS_REGRESSORS_COL_DIM, int
regressors_col_dim (Input)
Column dimension of regressors.
Default:
regressors_col_dim = n_regressors
Function imsls_f_regressors_for_glm generates regressors for a general linear model from a data matrix. The data matrix can contain classification variables as well as continuous variables. Regressors for effects composed solely of continuous variables are generated as powers and crossproducts. Consider a data matrix containing continuous variables as Columns 3 and 4. The effect indices (3, 3) generate a regressor whose i-th value is the square of the i-th value in Column 3. The effect indices (3, 4) generates a regressor whose i-th value is the product of the i-th value in Column 3 with the i-th value in Column 4.
Regressors for an effect (source of variation) composed of
a single classification variable are generated using indicator variables. Let
the classification variable A take on values a1,
a2, ..., an. From this classification
variable, imsls_f_regressors_for_glm
creates n indicator variables. For
k = 1, 2, ..., n, we
have
For each classification variable, another set of variables is created from the indicator variables. These new variables are called dummy variables. Dummy variables are generated from the indicator variables in one of three manners:
1. The dummies are the n indicator variables.
2. The dummies are the first n – 1 indicator variables.
3. The n – 1 dummies are defined in terms of the indicator variables so that for balanced data, the usual summation restrictions are imposed on the regression coefficients.
In particular, for dummy_method = IMSLS_ALL,
the dummy variables are
Ak = Ik(k = 1,
2, ..., n). For dummy_method = IMSLS_LEAVE_OUT_LAST,
the dummy variables are
Ak = Ik(k = 1, 2,
..., n − 1). For dummy_method = IMSLS_SUM_TO_ZERO,
the dummy variables are
Ak = Ik − In(k = 1,
2, ..., n − 1). The regressors
generated for an effect composed of a single-classification variable are the
associated dummy variables.
Let mj be the number of dummies generated for the j-th classification variable. Suppose there are two classification variables A and B with dummies
and
The regressors generated for an effect composed of two
classification variables
A and B are
More generally, the regressors generated for an effect
composed of several classification variables and several continuous variables
are given by the Kronecker products of variables, where the order of the
variables is specified in indices_effects.
Consider a data matrix containing classification variables in Columns 0 and 1
and continuous variables in Columns 2 and 3. Label these four columns A,
B, X1, and X2. The regressors
generated by the effect indices
(0, 1, 2, 2, 3) are A ⊗ B ⊗
X1X1X2.
Let the data matrix x = (A, B, X1), where A and B are classification variables and X1 is a continuous variable. The model containing the effects A, B, AB, X1, AX1, BX1, and ABX1 is specified as follows (use optional keyword IMSLS_INDICES_EFFECTS):
n_class = 2
n_continuous = 1
n_effects = 7
n_var_effects = (1, 1, 2, 1, 2, 2, 3)
indices_effects = (0, 1, 0, 1, 2, 0, 2, 1, 2, 0, 1, 2)
For this model, suppose that variable A has two levels, A1 and A2, and that variable B has three levels, B1, B2, and B3. For each dummy_method option, the regressors in their order of appearance in regressors are given below.
dummy_method |
regressors |
IMSLS_ALL |
A1, A2, B1, B2, B3, A1B1, A1B2, A1B3, A2B1, A2B2, A2B3, X1, A1X1, A2X1, B1X1, B2X1, B3X1, A1B1X1, A1B2X1, A1B3X1, A2B1X1, A2B2X1, A2B3X1 |
IMSLS_LEAVE_OUT_LAST |
A1, B1, B2, A1B1, A1B2, X1, A1X1, B1X1, B2X1, A1B1X1, A1B2X1 |
IMSLS_SUM_TO_ZERO |
A1 −
A2, B1 −
B3, B2 −
B3, (A1 −
A2) (B1 −
B2), (A1 −
A2) (B2 −
B3), X1, (A1 −
A2) X1, |
Within a group of regressors corresponding to an interaction effect, the indicator variables composing the regressors vary most rapidly for the last classification variable, next most rapidly for the next to last classification variable, etc.
By default, imsls_f_regressors_for_glm internally generates values for n_effects, n_var_effects, and indices_effects, which correspond to a first order model with NEF = n_continuous + n_class. The variables then are used to create the regressor variables. The effects are ordered such that the first effect corresponds to the first column of x, the second effect corresponds to the second column of x, etc. A second order model corresponding to the columns (variables) of x is generated if IMSLS_MODEL_ORDER with model_order = 2 is specified.
There are
effects, where NVAR = n_continuous + n_class. The first NVAR effects correspond to the columns of x, such that the first effect corresponds to the first column of x, the second effect corresponds to the second column of x, ..., the NVAR-th effect corresponds to the NVAR-th column of x (i.e. x[NVAR − 1]). The next n_continuous effects correspond to squares of the continuous variables. The last
effects correspond to the two-variable interactions.
• Let the data matrix x = (A, B, X1), where A and B are classification variables and X1 is a continuous variable. The effects generated and order of appearance is
• Let the data matrix x = (A, X1, X2), where A is a classification variable and X1 and X2 are continuous variables. The effects generated and order of appearance is
• Let the data matrix x = (X1, A, X2) (see IMSLS_CLASS_COLUMNS), where A is a classification variable and X1 and X2 are continuous variables. The effects generated and order of appearance is
Higher-order and more complicated models can be specified using IMSLS_INDICES_EFFECTS.
In the following example, there are two classification variables, A and B, with two and three values, respectively. Regressors for a one-way model (the default model order) are generated using the IMSLS_ALL dummy method (the default dummy method). The five regressors generated are A1, A2, B1, B2, and B3.
#include <imsls.h>
void main()
{
int n_observations = 6;
int
n_class = 2;
int n_cont = 0;
int n_regressors;
float x[12] =
{
10.0,
5.0,
20.0,
15.0,
20.0,
10.0,
10.0,
10.0,
10.0,
15.0,
20.0,
5.0};
n_regressors = imsls_f_regressors_for_glm
(n_observations, x,
n_class, n_cont,
0);
printf("Number of regressors = %3d\n",
n_regressors);
}
Number of regressors = 5
In this example, a two-way analysis of covariance model containing all the interaction terms is fit. First, imsls_f_regressors_for_glm is called to produce a matrix of regressors, regressors, from the data x. Then, regressors is used as the input matrix into imsls_f_regression to produce the final fit. The regressors, generated using dummy_method = IMSLS_LEAVE_OUT_LAST, are the model whose mean function is
μ + αi + βj + Υij + δxij + ζixij + ηjxij + θijxij i = 1, 2; j = 1, 2, 3
where α2 = β3 = Υ21 = Υ22 = Υ23 = ζ2 = η3 = θ21 = θ22 = θ23 = 0.
#include <imsls.h>
void main() {
#define
N_OBSERVATIONS 18
int n_class = 2;
int n_cont = 1;
float anova[15],
*regressors;
int n_regressors;
float
x[54] = {
1.0, 1.0,
1.11,
1.0, 1.0,
2.22,
1.0, 1.0,
3.33,
1.0, 2.0,
1.11,
1.0, 2.0,
2.22,
1.0, 2.0,
3.33,
1.0, 3.0,
1.11,
1.0, 3.0,
2.22,
1.0, 3.0,
3.33,
2.0, 1.0,
1.11,
2.0, 1.0,
2.22,
2.0, 1.0,
3.33,
2.0, 2.0,
1.11,
2.0, 2.0,
2.22,
2.0, 2.0,
3.33,
2.0, 3.0,
1.11,
2.0, 3.0,
2.22,
2.0, 3.0,
3.33};
float y[N_OBSERVATIONS] =
{
1.0, 2.0, 2.0, 4.0, 4.0, 6.0,
3.0, 3.5, 4.0, 4.5, 5.0,
5.5,
2.0, 3.0, 4.0, 5.0, 6.0,
7.0};
int class_col[2] = {0,1};
int
n_effects = 7;
int n_var_effects[7] = {1, 1, 2, 1, 2, 2,
3};
int indices_effects[12] = {0, 1, 0, 1, 2, 0, 2, 1, 2, 0, 1,
2};
float *coef;
char *reg_labels[] =
{
" ", "Alpha1", "Beta1", "Beta2",
"Gamma11", "Gamma12",
"Delta",
"Zeta1", "Eta1", "Eta2", "Theta11", "Theta12"};
char *labels[] =
{
"degrees of freedom for the
model",
"degrees of freedom for
error",
"total (corrected) degrees
of freedom",
"sum of squares for
the model",
"sum of squares for
error",
"total (corrected) sum of
squares",
"model mean square",
"error mean square",
"F-statistic", "p-value",
"R-squared (in percent)","adjusted R-squared (in
percent)",
"est. standard
deviation of the model error",
"overall mean of y",
"coefficient
of variation (in percent)"};
n_regressors =
imsls_f_regressors_for_glm (N_OBSERVATIONS, x,
n_class, n_cont,
IMSLS_X_CLASS_COLUMNS,
class_col,
IMSLS_DUMMY,
IMSLS_LEAVE_OUT_LAST,
IMSLS_INDICES_EFFECTS, n_effects, n_var_effects,
indices_effects,
IMSLS_REGRESSORS,
®ressors,
0);
printf("Number of regressors = %3d",
n_regressors);
imsls_f_write_matrix ("regressors",
N_OBSERVATIONS, n_regressors, regressors,
IMSLS_COL_LABELS, reg_labels,
0);
coef =
imsls_f_regression (N_OBSERVATIONS, n_regressors, regressors,
y,
IMSLS_ANOVA_TABLE_USER,
anova,
0);
imsls_f_write_matrix ("* * * Analysis of Variance * * *\n", 15,
1,
anova,
IMSLS_ROW_LABELS,
labels,
IMSLS_WRITE_FORMAT,
"%11.4f",
0);
}
Number of regressors = 11
regressors
Alpha1
Beta1 Beta2
Gamma11 Gamma12
Delta
1
1.00
1.00
0.00
1.00
0.00
1.11
2
1.00
1.00
0.00
1.00
0.00
2.22
3
1.00
1.00
0.00
1.00
0.00
3.33
4
1.00
0.00
1.00
0.00
1.00
1.11
5 1.00
0.00
1.00
0.00
1.00
2.22
6
1.00
0.00
1.00
0.00
1.00
3.33
7
1.00
0.00
0.00
0.00
0.00
1.11
8
1.00
0.00
0.00
0.00
0.00
2.22
9
1.00
0.00
0.00
0.00
0.00
3.33
10
0.00
1.00
0.00
0.00
0.00
1.11
11
0.00
1.00
0.00
0.00
0.00 2.22
12
0.00
1.00
0.00
0.00
0.00
3.33
13
0.00
0.00
1.00
0.00
0.00
1.11
14
0.00
0.00
1.00
0.00
0.00
2.22
15
0.00
0.00
1.00
0.00
0.00
3.33
16
0.00
0.00
0.00
0.00
0.00
1.11
17
0.00
0.00
0.00
0.00
0.00
2.22
18
0.00
0.00
0.00
0.00 0.00
3.33
Zeta1
Eta1 Eta2
Theta11
Theta12
1
1.11
1.11
0.00
1.11
0.00
2
2.22
2.22
0.00
2.22
0.00
3
3.33
3.33
0.00
3.33
0.00
4
1.11
0.00
1.11
0.00
1.11
5
2.22
0.00
2.22
0.00
2.22
6
3.33
0.00
3.33
0.00
3.33
7
1.11
0.00
0.00
0.00
0.00
8
2.22
0.00
0.00
0.00
0.00
9
3.33
0.00
0.00
0.00
0.00
10
0.00
1.11
0.00
0.00
0.00
11
0.00
2.22
0.00
0.00
0.00
12
0.00
3.33
0.00
0.00
0.00
13
0.00
0.00
1.11
0.00
0.00
14
0.00
0.00
2.22
0.00
0.00
15
0.00
0.00
3.33
0.00 0.00
16
0.00
0.00
0.00
0.00
0.00
17
0.00
0.00
0.00
0.00
0.00
18
0.00
0.00
0.00
0.00
0.00
* * * Analysis of Variance * * *
degrees of freedom for the
model
11.0000
degrees of freedom for
error
6.0000
total (corrected) degrees of
freedom
17.0000
sum of squares for the
model
43.9028
sum of squares for
error
0.8333
total (corrected) sum of
squares
44.7361
model mean
square
3.9912
error mean
square
0.1389
F-statistic
28.7364
p-value
0.0003
R-squared
(in
percent)
98.1372
adjusted R-squared (in
percent)
94.7221
est. standard deviation of the model
error 0.3727
overall mean of
y
3.9722
coefficient of variation (in
percent)
9.3821
Visual Numerics, Inc. PHONE: 713.784.3131 FAX:713.781.9260 |