Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

random

Simular respuestas con ruido aleatorio para un modelo de regresión lineal generalizada

Descripción

ejemplo

ysim = random(mdl,Xnew) simula respuestas a los datos predictores de Xnew utilizando el modelo de regresión lineal generalizada mdl, añadiendo ruido aleatorio.

ejemplo

ysim = random(mdl,Xnew,Name,Value) especifica más opciones con uno o varios argumentos de par nombre-valor. Por ejemplo, puede especificar el número de pruebas para la distribución binomial o el valor de compensación utilizado para el ajuste.

Ejemplos

contraer todo

Cree un modelo de regresión lineal generalizada y simule su respuesta con ruido aleatorio para datos nuevos.

Genere datos de muestra utilizando números aleatorios de Poisson con un predictor subyacente X.

rng('default') % For reproducibility
X = rand(20,1);
mu = exp(1 + 2*X);
y = poissrnd(mu);

Cree un modelo de regresión lineal generalizada de datos de Poisson.

mdl = fitglm(X,y,'y ~ x1','Distribution','poisson');

Cree puntos de datos para la predicción.

Xnew = (0:.05:1)';

Simule respuestas con ruido aleatorio en los puntos de datos.

ysim = random(mdl,Xnew);

Represente los valores simulados y los valores originales.

plot(X,y,'rx',Xnew,ysim,'bo',Xnew,feval(mdl,Xnew),'g-')
legend('Data','Simulated Response with Noise','Predicted Response', ...
    'Location','best')

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Data, Simulated Response with Noise, Predicted Response.

Ajuste un modelo de regresión lineal generalizada y guárdelo usando saveLearnerForCoder. Defina una función de punto de entrada que cargue el modelo utilizando loadLearnerForCoder y llame a la función predict del modelo ajustado. A continuación, use codegen (MATLAB Coder) para generar código C/C++. Tenga en cuenta que generar código C/C++ requiere MATLAB® Coder™.

En este ejemplo se explica brevemente el flujo de trabajo de generación de código para la predicción de modelos de regresión lineal en la línea de comandos. Para obtener más información, consulte Code Generation for Prediction of Machine Learning Model at Command Line. También puede generar código usando la app MATLAB Coder. Para obtener más detalles, consulte Code Generation for Prediction of Machine Learning Model Using MATLAB Coder App.

Entrenar un modelo

Genere datos de muestra del predictor x y la respuesta y con las distribuciones siguientes:

  • xN(1,0.52).

  • β0=1 y β=-2.

  • yBinomial(10,exp(1+xβ)1+exp(1+xβ)).

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);

Cree un modelo de regresión lineal generalizada de datos binomiales. Especifique un tamaño de muestra binomial de 10.

mdl = fitglm(x,y,'y ~ x1','Distribution','Binomial','BinomialSize',n);

Guardar un modelo

Guarde el modelo de regresión lineal generalizada ajustado en el archivo GLMMdl.mat con saveLearnerForCoder.

saveLearnerForCoder(mdl,'GLMMdl');

Definir una función de punto de entrada

En la carpeta actual, defina una función de punto de entrada llamada myrandomGLM.m que realice las acciones siguientes:

  • Aceptar una nueva entrada de predictores y argumentos de par nombre-valor válidos.

  • Cargar el modelo ajustado de regresión lineal generalizada en GLMMdl.mat con loadLearnerForCoder.

  • Simular respuestas a partir del modelo GLM cargado.

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

Añada la directiva del compilador (o pragma) %#codegen a la función de punto de entrada después de la firma de la función para indicar que intenta generar código para el algoritmo de MATLAB. Añadir esta directiva indica al analizador de código de MATLAB que le ayude a diagnosticar y arreglar vulneraciones que darían como resultado errores durante la generación de código.

Generar código

Genere código para la función de punto de entrada con codegen (MATLAB Coder). Dado que C y C++ son lenguajes de tipado estático, debe determinar las propiedades de todas las variables de la función de entrada en tiempo de compilación. Para especificar los tipos de datos y el tamaño de arreglo de entrada exacto, pase una expresión de MATLAB® que represente el conjunto de valores con un tipo de datos y un tamaño de arreglo determinado. Use coder.Constant (MATLAB Coder) para los nombres de los argumentos de par nombre-valor.

Especifique los datos predictores x y el parámetro binomial n.

codegen -config:mex myrandomGLM -args {x,coder.Constant('BinomialSize'),coder.Constant(n)}
Code generation successful.

codegen genera la función MEX de myrandomGLM_mex con una extensión dependiente de la plataforma.

Si el número de observaciones no se conoce en el momento de la compilación, también puede especificar la entrada como tamaño variable utilizando coder.typeof (MATLAB Coder). Para obtener más detalles, consulte Specify Variable-Size Arguments for Code Generation y Specify Properties of Entry-Point Function Inputs (MATLAB Coder).

Verificar código generado

Simule respuestas con la función MEX. Especifique los datos predictores x y el parámetro binomial n.

ysim = myrandomGLM_mex(x,'BinomialSize',n);

Represente los valores simulados y los datos en la misma figura.

figure
plot(x,y,'bo',x,ysim,'r*')
legend('Observed responses','Simulated responses')
xlabel('x')
ylabel('y')

Figure contains an axes object. The axes object with xlabel x, ylabel y contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent Observed responses, Simulated responses.

Las respuestas observadas y simuladas parecen tener una distribución similar.

Argumentos de entrada

contraer todo

Modelo de regresión lineal generalizada, especificado como un objeto GeneralizedLinearModel creado utilizando fitglm o stepwiseglm, o un objeto CompactGeneralizedLinearModel creado utilizando compact.

Nuevos valores predictores de entrada, especificados como una tabla, un arreglo de conjunto de datos o una matriz. Cada fila de Xnew corresponde a una observación y cada columna, a una variable.

  • Si Xnew es una tabla o un arreglo de conjuntos de datos, debe contener predictores que tengan los mismos nombres de predictor que en la propiedad PredictorNames de mdl.

  • Si Xnew es una matriz, debe tener el mismo número de variables (columnas) y en el mismo orden que la entrada de predictores utilizada para crear mdl. Tenga en cuenta que Xnew también debe contener las variables predictoras que no se utilicen como predictores en el modelo ajustado. Además, todas las variables empleadas en la creación de mdl deben ser numéricas. Para tratar predictores numéricos como variables categóricas, identifique los predictores mediante el argumento de par nombre-valor 'CategoricalVars' al crear mdl.

Tipos de datos: single | double | table

Argumentos de par nombre-valor

Especifique pares de argumentos opcionales Name1=Value1,...,NameN=ValueN, donde Name es el nombre del argumento y Value es el valor correspondiente. Los argumentos nombre-valor deben aparecer después de otros argumentos, pero el orden de los pares no importa.

En versiones anteriores a R2021a, use comas para separar cada nombre y valor y encierre Name entre comillas.

Ejemplo: ysim = random(Mdl,Xnew,'BinomialSize',50) devuelve el número de éxitos, alterados por ruido aleatorio, utilizando el número de pruebas especificado por 'BinomialSize'.

Número de pruebas de la distribución binomial, especificado como el par separado por comas que consta de 'BinomialSize' y un escalar o vector de la misma longitud que la respuesta. random expande la entrada escalar a un arreglo constante del mismo tamaño que la respuesta. La entrada escalar significa que todas las observaciones tienen el mismo número de pruebas.

El significado de los valores de salida de ysim depende del valor de 'BinomialSize'.

  • Si 'BinomialSize' es 1 (el valor predeterminado), cada valor de salida ysim es la probabilidad de éxito.

  • Si 'BinomialSize' no es 1 (el valor predeterminado), cada valor de salida ysim es el número predicho de éxitos de las pruebas.

Tipos de datos: single | double

Valor de compensación de cada fila de Xnew, especificado como el par separado por comas que consta de 'Offset' y un escalar o vector con la misma longitud que la respuesta. random expande la entrada escalar a un arreglo constante del mismo tamaño que la respuesta.

Tenga en cuenta que el valor predeterminado de este argumento es un vector de ceros, incluso si especifica el par de argumentos nombre-valor 'Offset' al ajustar un modelo. Si especifica 'Offset' para el ajuste, el software trata el valor de compensación como un predictor adicional con un valor de coeficiente fijo en 1. En otras palabras, la fórmula de ajuste es:

f(μ) = Offset + X*b,

, donde f es la función de enlace, μ es la respuesta media y X*b es la combinación lineal de predictores X. El predictor Offset tiene el coeficiente 1.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Valores de respuesta simulados, devueltos como un vector numérico. Los valores simulados son los valores de respuesta predichos en Xnew alterados por ruido aleatorio con la distribución dada por el modelo ajustado. Los valores de ysim son independientes, condicionados por los predictores. Para ajustes binomiales y de Poisson, random genera ysim con la distribución especificada y sin ajuste para ninguna dispersión estimada.

  • Si 'BinomialSize' es 1 (el valor predeterminado), cada valor de salida ysim es la probabilidad de éxito.

  • Si 'BinomialSize' no es 1 (el valor predeterminado), cada valor de salida ysim es el número predicho de éxitos de las pruebas.

Funcionalidad alternativa

Para realizar predicciones sin ruido aleatorio, utilice predict o feval.

  • predict acepta un único argumento de entrada que contiene todas las variables predictoras y proporciona intervalos de confianza en sus predicciones.

  • feval acepta múltiples argumentos de entrada con un argumento de entrada para cada variable predictora, lo cual es más sencillo de utilizar con un modelo creado a partir de una tabla o un arreglo de conjunto de datos. La función feval no admite los argumentos de par nombre-valor 'Offset' ni 'BinomialSize'. La función utiliza 0 como valor de compensación y los valores de salida son probabilidades predichas.

Capacidades ampliadas

Historial de versiones

Introducido en R2012a