random
Simulate responses with random noise for generalized linear regression model
Description
specifies additional options using one or more name-value pair arguments. For
example, you can specify the number of trials for binomial distribution or the
offset value used for fitting.ysim
= random(mdl
,Xnew
,Name,Value
)
Examples
Simulate Response Data with Random Noise
Create a generalized linear regression model, and simulate its response with random noise to new data.
Generate sample data using Poisson random numbers with one underlying predictor X
.
rng('default') % For reproducibility X = rand(20,1); mu = exp(1 + 2*X); y = poissrnd(mu);
Create a generalized linear regression model of Poisson data.
mdl = fitglm(X,y,'y ~ x1','Distribution','poisson');
Create data points for prediction.
Xnew = (0:.05:1)';
Simulate responses with random noise at the data points.
ysim = random(mdl,Xnew);
Plot the simulated values and the original values.
plot(X,y,'rx',Xnew,ysim,'bo',Xnew,feval(mdl,Xnew),'g-') legend('Data','Simulated Response with Noise','Predicted Response', ... 'Location','best')
Generate C/C++ Code That Simulates Responses
Fit a generalized linear regression model, and then save the model by using saveLearnerForCoder
. Define an entry-point function that loads the model by using loadLearnerForCoder
and calls the predict
function of the fitted model. Then use codegen
(MATLAB Coder) to generate C/C++ code. Note that generating C/C++ code requires MATLAB® Coder™.
This example briefly explains the code generation workflow for the prediction of linear regression models at the command line. For more details, see Code Generation for Prediction of Machine Learning Model at Command Line. You can also generate code using the MATLAB Coder app. For details, see Code Generation for Prediction of Machine Learning Model Using MATLAB Coder App.
Train Model
Generate sample data of the predictor x
and response y
with the following distributions:
.
and .
.
rng('default') % For reproducibility x = 1 + randn(100,1)*0.5; beta = -2; p = exp(1 + x*beta)./(1 + exp(1 + x*beta)); % Inverse logit n = 10; y = binornd(n,p,100,1);
Create a generalized linear regression model of binomial data. Specify a binomial sample size of 10.
mdl = fitglm(x,y,'y ~ x1','Distribution','Binomial','BinomialSize',n);
Save Model
Save the fitted generalized linear regression model to the file GLMMdl.mat
by using saveLearnerForCoder
.
saveLearnerForCoder(mdl,'GLMMdl');
Define Entry-Point Function
In your current folder, define an entry-point function named myrandomGLM.m
that does the following:
Accept new predictor input and valid name-value pair arguments.
Load the fitted generalized linear regression model in
GLMMdl.mat
by usingloadLearnerForCoder
.Simulate responses from the loaded GLM model.
function y = myrandomGLM(x,varargin) %#codegen %MYRANDOMGLM Simulate responses using GLM model % MYRANDOMGLM simulates responses for the n observations in the n-by-1 % vector x using the GLM model stored in the MAT-file GLMMdl.mat, and % then returns the simulations in the n-by-1 vector y. CompactMdl = loadLearnerForCoder('GLMMdl'); narginchk(1,Inf); y = random(CompactMdl,x,varargin{:}); end
Add the %#codegen
compiler directive (or pragma) to the entry-point function after the function signature to indicate that you intend to generate code for the MATLAB algorithm. Adding this directive instructs the MATLAB Code Analyzer to help you diagnose and fix violations that would result in errors during code generation.
Generate Code
Generate code for the entry-point function using codegen
(MATLAB Coder). Because C and C++ are statically typed languages, you must determine the properties of all variables in the entry-point function at compile time. To specify the data type and exact input array size, pass a MATLAB® expression that represents the set of values with a certain data type and array size. Use coder.Constant
(MATLAB Coder) for the names of name-value pair arguments.
Specify the predictor data x
and binomial parameter n
.
codegen -config:mex myrandomGLM -args {x,coder.Constant('BinomialSize'),coder.Constant(n)}
Code generation successful.
codegen
generates the MEX function myrandomGLM_mex
with a platform-dependent extension.
If the number of observations is unknown at compile time, you can also specify the input as variable-size by using coder.typeof
(MATLAB Coder). For details, see Specify Variable-Size Arguments for Code Generation and Specify Types of Entry-Point Function Inputs (MATLAB Coder).
Verify Generated Code
Simulate responses using the MEX function. Specify the predictor data x
and binomial parameter n
.
ysim = myrandomGLM_mex(x,'BinomialSize',n);
Plot the simulated values and the data in the same figure.
figure plot(x,y,'bo',x,ysim,'r*') legend('Observed responses','Simulated responses') xlabel('x') ylabel('y')
The observed and simulated responses appear to be similarly distributed.
Input Arguments
mdl
— Generalized linear regression model
GeneralizedLinearModel
object | CompactGeneralizedLinearModel
object
Generalized linear regression model, specified as a GeneralizedLinearModel
object created using fitglm
or stepwiseglm
, or a CompactGeneralizedLinearModel
object created using compact
.
Xnew
— New predictor input values
table | dataset array | matrix
New predictor input values, specified as a table, dataset array, or matrix. Each row of
Xnew
corresponds to one observation, and each column
corresponds to one variable.
If
Xnew
is a table or dataset array, it must contain predictors that have the same predictor names as in thePredictorNames
property ofmdl
.If
Xnew
is a matrix, it must have the same number of variables (columns) in the same order as the predictor input used to createmdl
. Note thatXnew
must also contain any predictor variables that are not used as predictors in the fitted model. Also, all variables used in creatingmdl
must be numeric. To treat numerical predictors as categorical, identify the predictors using the'CategoricalVars'
name-value pair argument when you createmdl
.
Data Types: single
| double
| table
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: ysim = random(Mdl,Xnew,'BinomialSize',50)
returns the
numbers of success, perturbed by random noise, using the number of trials specified
by 'BinomialSize'
.
BinomialSize
— Number of trials for binomial distribution
1 (default) | scalar | vector
Number of trials for the binomial distribution, specified as the
comma-separated pair consisting of 'BinomialSize'
and
a scalar or vector of the same length as the response.
random
expands the scalar input into a
constant array of the same size as the response. The scalar input means
that all observations have the same number of trials.
The meaning of the output values in ysim
depends
on the value of 'BinomialSize'
.
If
'BinomialSize'
is 1 (default), then each value in the outputysim
is the probability of success.If
'BinomialSize'
is not 1, then each value in the outputysim
is the predicted number of successes in the trials.
Data Types: single
| double
Offset
— Offset value
zeros(size(Xnew,1))
(default) | scalar | vector
Offset value for each row in Xnew
, specified as the comma-separated pair consisting of 'Offset'
and a scalar or vector with the same length as the response. random
expands the scalar input into a constant array of the same size as the response.
Note that the default value of this argument is a vector of zeros even if you specify the
'Offset'
name-value pair argument when fitting a model. If you
specify 'Offset'
for fitting, the software treats the offset as an
additional predictor with a coefficient value fixed at 1. In other words, the formula
for fitting is
f(μ) = Offset + X*b
,
where f is the link function, μ is the mean response, and X*b is the linear combination of predictors X. The Offset
predictor has coefficient 1
.
Data Types: single
| double
Output Arguments
ysim
— Simulated response values
numeric vector
Simulated response values, returned as a numeric vector. The simulated
values are the predicted response values at Xnew
perturbed by random noise with the distribution given by the fitted model.
The values in ysim
are independent, conditional on the
predictors. For binomial and Poisson fits, random
generates ysim
with the specified distribution and no
adjustment for any estimated dispersion.
If
'BinomialSize'
is 1 (default), then each value in the outputysim
is the probability of success.If
'BinomialSize'
is not 1, then each value in the outputysim
is the predicted number of successes in the trials.
Alternative Functionality
For predictions without random noise, use predict
or feval
.
predict
accepts a single input argument containing all predictor variables, and gives confidence intervals on its predictions.feval
accepts multiple input arguments with one input for each predictor variable, which is simpler to use with a model created from a table or dataset array. Thefeval
function does not support the name-value pair arguments'Offset'
and'BinomialSize'
. The function uses 0 as the offset value, and the output values are predicted probabilities.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Use
saveLearnerForCoder
,loadLearnerForCoder
, andcodegen
(MATLAB Coder) to generate code for therandom
function. Save a trained model by usingsaveLearnerForCoder
. Define an entry-point function that loads the saved model by usingloadLearnerForCoder
and calls therandom
function. Then usecodegen
to generate code for the entry-point function.random
can return a different sequence of numbers than MATLAB® if either of the following is true:The output is nonscalar.
An input parameter is invalid for the distribution.
This table contains notes about the arguments of
random
. Arguments not included in this table are fully supported.Argument Notes and Limitations mdl
For the usage notes and limitations of the model object, see Code Generation of the
CompactGeneralizedLinearModel
object.Xnew
Xnew
must be a single-precision or double-precision matrix or a table containing numeric variables, categorical variables, or both.The number of rows, or observations, in
Xnew
can be a variable size, but the number of columns inXnew
must be fixed.If you want to specify
Xnew
as a table, then your model must be trained using a table, and you must ensure that your entry-point function for prediction:Accepts data as arrays
Creates a table from the data input arguments and specifies the variable names in the table
Passes the table to
predict
For an example of this table workflow, see Generate Code to Classify Data in Table. For more information on using tables in code generation, see Code Generation for Tables (MATLAB Coder) and Table Limitations for Code Generation (MATLAB Coder).
Name-value pair arguments Names in name-value arguments must be compile-time constants. For example, to use the
'BinomialSize'
name-value pair argument in the generated code, include{coder.Constant('BinomialSize'),0}
in the-args
value ofcodegen
(MATLAB Coder).
For more information, see Introduction to Code Generation.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
This function fully supports GPU arrays. For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Version History
Introduced in R2012a
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)