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.

fitlm

Ajustar un modelo de regresión lineal

Descripción

ejemplo

mdl = fitlm(tbl) devuelve un modelo de regresión lineal ajustado a las variables de la tabla o al arreglo de conjuntos de datos tbl. De forma predeterminada, fitlm adopta la última variable como la variable de respuesta.

ejemplo

mdl = fitlm(X,y) devuelve un modelo de regresión lineal de las respuestas y, ajustado a la matriz de datos X.

ejemplo

mdl = fitlm(___,modelspec) define la especificación del modelo con cualquiera de las combinaciones de argumentos de entrada de las sintaxis anteriores.

ejemplo

mdl = fitlm(___,Name,Value) especifica más opciones con uno o varios argumentos de par nombre-valor. Por ejemplo, puede especificar qué variables son categóricas, realizar una regresión robusta o utilizar los pesos de las observaciones.

Ejemplos

contraer todo

Ajuste un modelo de regresión lineal con un conjunto de datos de entrada de matriz.

Cargue el conjunto de datos carsmall, un conjunto de datos de entrada de matriz.

load carsmall
X = [Weight,Horsepower,Acceleration];

Ajuste un modelo de regresión lineal mediante fitlm.

mdl = fitlm(X,MPG)
mdl = 
Linear regression model:
    y ~ 1 + x1 + x2 + x3

Estimated Coefficients:
                    Estimate        SE          tStat        pValue  
                   __________    _________    _________    __________

    (Intercept)        47.977       3.8785        12.37    4.8957e-21
    x1             -0.0065416    0.0011274      -5.8023    9.8742e-08
    x2              -0.042943     0.024313      -1.7663       0.08078
    x3              -0.011583      0.19333    -0.059913       0.95236


Number of observations: 93, Error degrees of freedom: 89
Root Mean Squared Error: 4.09
R-squared: 0.752,  Adjusted R-Squared: 0.744
F-statistic vs. constant model: 90, p-value = 7.38e-27

La presentación del modelo incluye la fórmula del modelo, los coeficientes estimados y las estadísticas descriptivas del modelo.

La fórmula del modelo de la presentación, y ~ 1 + x1 + x2 + x3, corresponde a y=β0+β1X1+β2X2+β3X3+ϵ.

La presentación del modelo también muestra información de los coeficientes estimados, que se almacena en la propiedad Coefficients. Muestre la propiedad Coefficients.

mdl.Coefficients
ans=4×4 table
                    Estimate        SE          tStat        pValue  
                   __________    _________    _________    __________

    (Intercept)        47.977       3.8785        12.37    4.8957e-21
    x1             -0.0065416    0.0011274      -5.8023    9.8742e-08
    x2              -0.042943     0.024313      -1.7663       0.08078
    x3              -0.011583      0.19333    -0.059913       0.95236

La propiedad Coefficient incluye estas columnas:

  • Estimate: las estimaciones de los coeficientes de cada término correspondiente del modelo. Por ejemplo, la estimación del término constante (intercept) es 47.977.

  • SE: error estándar de los coeficientes.

  • tStat: estadístico t de cada coeficiente para probar la hipótesis nula de que el coeficiente correspondiente es cero en contraste con la alternativa de que es diferente de cero, dados los otros predictores del modelo. Tenga en cuenta que tStat = Estimate/SE. Por ejemplo, el estadístico t del intercepto es 47.977/3.8785 = 12.37.

  • pValue: valor de p del estadístico t de la prueba de hipótesis bilateral. Por ejemplo, el valor de p del estadístico t de x2 es mayor que 0.05, por lo que este término no es significativo al nivel de significación del 5% dados los otros términos del modelo.

Las estadísticas descriptivas del modelo son:

  • Number of observations: número de filas sin valores NaN. Por ejemplo, Number of observations es 93, puesto que el vector de datos MPG tiene seis valores NaN y el vector de datos Horsepower tiene un valor NaN en una observación diferente, donde el número de filas en X y MPG es 100.

  • Error degrees of freedom: n p, donde n es el número de observaciones y p es el número de coeficientes del modelo, incluido el intercepto. Por ejemplo, el modelo tiene cuatro predictores, por lo que Error degrees of freedom es 93 – 4 = 89.

  • Root mean squared error: raíz cuadrada del error cuadrático medio, que calcula la desviación estándar de la distribución del error.

  • R-squared y Adjusted R-squared: coeficiente de determinación y coeficiente de determinación ajustado, respectivamente. Por ejemplo, el valor de R-squared indica que el modelo explica aproximadamente el 75% de la variabilidad en la variable de respuesta MPG.

  • F-statistic vs. constant model: estadístico de la prueba F realizada en el modelo de regresión, que comprueba si el modelo se ajusta significativamente mejor que un modelo degenerado que solo consta de un término constante.

  • p-value: valor de p de la prueba F realizada en el modelo. Por ejemplo, el modelo es significativo con un valor de p de 7.3816e-27.

Puede encontrar estos estadísticos en las propiedades del modelo (NumObservations, DFE, RMSE y Rsquared) y mediante la función anova.

anova(mdl,'summary')
ans=3×5 table
                SumSq     DF    MeanSq      F         pValue  
                ______    __    ______    ______    __________

    Total       6004.8    92    65.269                        
    Model         4516     3    1505.3    89.987    7.3816e-27
    Residual    1488.8    89    16.728                        

Utilice plot para crear una gráfica de variables añadida (gráfica de apalancamiento de regresión parcial) para el modelo completo, excepto el término constante (intercepto).

plot(mdl)

Figure contains an axes object. The axes object with title Added variable plot for whole model, xlabel Adjusted whole model, ylabel Adjusted y contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent Adjusted data, Fit: y=0.0449564*x, 95% conf. bounds.

Cargue los datos de muestra.

load carsmall

Almacene las variables en una tabla.

tbl = table(Weight,Acceleration,MPG,'VariableNames',{'Weight','Acceleration','MPG'});

Muestre las primeras cinco filas de la tabla.

tbl(1:5,:)
ans=5×3 table
    Weight    Acceleration    MPG
    ______    ____________    ___

     3504           12        18 
     3693         11.5        15 
     3436           11        18 
     3433           12        16 
     3449         10.5        17 

Ajuste un modelo de regresión lineal de millas por galón (MPG). Especifique la fórmula del modelo mediante notación de Wilkinson.

lm = fitlm(tbl,'MPG~Weight+Acceleration')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Acceleration

Estimated Coefficients:
                     Estimate         SE         tStat       pValue  
                    __________    __________    _______    __________

    (Intercept)         45.155        3.4659     13.028    1.6266e-22
    Weight          -0.0082475    0.00059836    -13.783    5.3165e-24
    Acceleration       0.19694       0.14743     1.3359       0.18493


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 4.12
R-squared: 0.743,  Adjusted R-Squared: 0.738
F-statistic vs. constant model: 132, p-value = 1.38e-27

El modelo 'MPG~Weight+Acceleration' de este ejemplo equivale a ajustar la especificación del modelo como 'linear'. Por ejemplo:

lm2 = fitlm(tbl,'linear');

Si se utiliza un vector de caracteres para la especificación del modelo y no se especifica la variable de respuesta, fitlm acepta la última variable en tbl como la variable de respuesta y las otras variables como las variables predictoras.

Ajuste un modelo de regresión lineal con una fórmula del modelo especificada mediante notación de Wilkinson.

Cargue los datos de muestra.

load carsmall

Almacene las variables en una tabla.

tbl = table(Weight,Acceleration,Model_Year,MPG,'VariableNames',{'Weight','Acceleration','Model_Year','MPG'});

Ajuste un modelo de regresión lineal de millas por galón (MPG) con el peso y la aceleración como las variables predictoras.

lm = fitlm(tbl,'MPG~Weight+Acceleration')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Acceleration

Estimated Coefficients:
                     Estimate         SE         tStat       pValue  
                    __________    __________    _______    __________

    (Intercept)         45.155        3.4659     13.028    1.6266e-22
    Weight          -0.0082475    0.00059836    -13.783    5.3165e-24
    Acceleration       0.19694       0.14743     1.3359       0.18493


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 4.12
R-squared: 0.743,  Adjusted R-Squared: 0.738
F-statistic vs. constant model: 132, p-value = 1.38e-27

El valor de p de 0.18493 indica que Acceleration no tiene un efecto significativo sobre MPG.

Elimine Acceleration del modelo y pruebe a mejorar el modelo añadiendo la variable predictora Model_Year. En primer lugar, defina Model_Year como una variable categórica.

tbl.Model_Year = categorical(tbl.Model_Year);
lm = fitlm(tbl,'MPG~Weight+Model_Year')
lm = 
Linear regression model:
    MPG ~ 1 + Weight + Model_Year

Estimated Coefficients:
                      Estimate         SE         tStat       pValue  
                     __________    __________    _______    __________

    (Intercept)           40.11        1.5418     26.016    1.2024e-43
    Weight           -0.0066475    0.00042802    -15.531    3.3639e-27
    Model_Year_76        1.9291       0.74761     2.5804      0.011488
    Model_Year_82        7.9093       0.84975     9.3078    7.8681e-15


Number of observations: 94, Error degrees of freedom: 90
Root Mean Squared Error: 2.92
R-squared: 0.873,  Adjusted R-Squared: 0.868
F-statistic vs. constant model: 206, p-value = 3.83e-40

Al especificar modelspec mediante notación de Wilkinson, puede actualizar el modelo sin tener que cambiar la matriz de diseño. fitlm solo utiliza las variables que se especifican en la fórmula. También se crean las dos variables indicadoras simuladas necesarias para la variable categórica Model_Year.

Ajuste un modelo de regresión lineal con una matriz de términos.

Matriz de términos de una entrada de tabla

Si las variables del modelo figuran en una tabla, una columna de 0 en una matriz de términos representa la posición de la variable de respuesta.

Cargue el conjunto de datos hospital.

load hospital

Almacene las variables en una tabla.

t = table(hospital.Sex,hospital.BloodPressure(:,1),hospital.Age,hospital.Smoker, ...
    'VariableNames',{'Sex','BloodPressure','Age','Smoker'});

Represente el modelo lineal 'BloodPressure ~ 1 + Sex + Age + Smoker' mediante una matriz de términos. La variable de respuesta se sitúa en la segunda columna de la tabla, por lo que la segunda columna de la matriz de términos debe ser una columna de 0 para ejercer de variable de respuesta.

T = [0 0 0 0;1 0 0 0;0 0 1 0;0 0 0 1]
T = 4×4

     0     0     0     0
     1     0     0     0
     0     0     1     0
     0     0     0     1

Ajuste un modelo lineal.

mdl1 = fitlm(t,T)
mdl1 = 
Linear regression model:
    BloodPressure ~ 1 + Sex + Age + Smoker

Estimated Coefficients:
                   Estimate       SE        tStat        pValue  
                   ________    ________    ________    __________

    (Intercept)      116.14      2.6107      44.485    7.1287e-66
    Sex_Male       0.050106     0.98364    0.050939       0.95948
    Age            0.085276    0.066945      1.2738        0.2058
    Smoker_1           9.87      1.0346      9.5395    1.4516e-15


Number of observations: 100, Error degrees of freedom: 96
Root Mean Squared Error: 4.78
R-squared: 0.507,  Adjusted R-Squared: 0.492
F-statistic vs. constant model: 33, p-value = 9.91e-15

Matriz de términos de una entrada de matriz

Si las variables predictoras y de respuesta figuran en una matriz y un vector columna, debe incluir 0 para señalar la variable de respuesta al final de cada fila de una matriz de términos.

Cargue el conjunto de datos carsmall y defina la matriz de predictores.

load carsmall
X = [Acceleration,Weight];

Especifique el modelo 'MPG ~ Acceleration + Weight + Acceleration:Weight + Weight^2' mediante una matriz de términos. Este modelo incluye el efecto principal y términos de interacción bidireccional para las variables Acceleration y Weight, así como un término de segundo orden para la variable Weight.

T = [0 0 0;1 0 0;0 1 0;1 1 0;0 2 0]
T = 5×3

     0     0     0
     1     0     0
     0     1     0
     1     1     0
     0     2     0

Ajuste un modelo lineal.

mdl2 = fitlm(X,MPG,T)
mdl2 = 
Linear regression model:
    y ~ 1 + x1*x2 + x2^2

Estimated Coefficients:
                    Estimate          SE         tStat       pValue  
                   ___________    __________    _______    __________

    (Intercept)         48.906        12.589     3.8847    0.00019665
    x1                 0.54418       0.57125    0.95261       0.34337
    x2               -0.012781     0.0060312    -2.1192      0.036857
    x1:x2          -0.00010892    0.00017925    -0.6076         0.545
    x2^2            9.7518e-07    7.5389e-07     1.2935       0.19917


Number of observations: 94, Error degrees of freedom: 89
Root Mean Squared Error: 4.1
R-squared: 0.751,  Adjusted R-Squared: 0.739
F-statistic vs. constant model: 67, p-value = 4.99e-26

Solo el intercepto y el término x2, que corresponde a la variable Weight, son significativos al nivel de significación del 5%.

Ajuste un modelo de regresión lineal que contenga un predictor categórico. Reordene las categorías del predictor categórico para controlar el nivel de referencia del modelo. Después, utilice anova para comprobar la significación de la variable categórica.

Modelo con un predictor categórico

Cargue el conjunto de datos carsmall y cree un modelo de regresión lineal de MPG como función de Model_Year. Para tratar el vector numérico Model_Year como variable categórica, identifique el predictor mediante el argumento de par nombre-valor 'CategoricalVars'.

load carsmall
mdl = fitlm(Model_Year,MPG,'CategoricalVars',1,'VarNames',{'Model_Year','MPG'})
mdl = 
Linear regression model:
    MPG ~ 1 + Model_Year

Estimated Coefficients:
                     Estimate      SE      tStat       pValue  
                     ________    ______    ______    __________

    (Intercept)        17.69     1.0328    17.127    3.2371e-30
    Model_Year_76     3.8839     1.4059    2.7625     0.0069402
    Model_Year_82      14.02     1.4369    9.7571    8.2164e-16


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56
R-squared: 0.531,  Adjusted R-Squared: 0.521
F-statistic vs. constant model: 51.6, p-value = 1.07e-15

La fórmula del modelo de la presentación, MPG ~ 1 + Model_Year, corresponde a

MPG=β0+β1ΙYear=76+β2ΙYear=82+ϵ,

donde ΙYear=76 y ΙYear=82 son variables indicadoras cuyo valor es uno si el valor de Model_Year es 76 y 82, respectivamente. La variable Model_Year incluye tres valores diferentes, que puede comprobar mediante la función unique.

unique(Model_Year)
ans = 3×1

    70
    76
    82

fitlm elige el valor más pequeño en Model_Year como nivel de referencia ('70') y crea dos variables indicadoras ΙYear=76 e ΙYear=82. El modelo solo incluye dos variables indicadoras, porque la matriz de diseño pasa a ser de rango deficiente si el modelo incluye tres variables indicadoras (una para cada nivel) y un término de intercepto.

Modelo con variables indicadoras completas

Puede interpretar la fórmula del modelo de mdl como un modelo con tres variables indicadoras sin término de intercepto:

y=β0Ιx1=70+(β0+β1)Ιx1=76+(β0+β2)Ιx2=82+ϵ.

También puede crear un modelo con tres variables indicadoras sin término de intercepto creando manualmente variables indicadoras y especificando la fórmula del modelo.

temp_Year = dummyvar(categorical(Model_Year));
Model_Year_70 = temp_Year(:,1);
Model_Year_76 = temp_Year(:,2);
Model_Year_82 = temp_Year(:,3);
tbl = table(Model_Year_70,Model_Year_76,Model_Year_82,MPG);
mdl = fitlm(tbl,'MPG ~ Model_Year_70 + Model_Year_76 + Model_Year_82 - 1')
mdl = 
Linear regression model:
    MPG ~ Model_Year_70 + Model_Year_76 + Model_Year_82

Estimated Coefficients:
                     Estimate      SE       tStat       pValue  
                     ________    _______    ______    __________

    Model_Year_70      17.69      1.0328    17.127    3.2371e-30
    Model_Year_76     21.574     0.95387    22.617    4.0156e-39
    Model_Year_82      31.71     0.99896    31.743    5.2234e-51


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56

Elegir un nivel de referencia en el modelo

Puede elegir un nivel de referencia modificando el orden de las categorías en una variable categórica. Primero, cree una variable categórica Year.

Year = categorical(Model_Year);

Compruebe el orden de las categorías mediante la función categories.

categories(Year)
ans = 3x1 cell
    {'70'}
    {'76'}
    {'82'}

Si utiliza Year como variable predictora, fitlm elige la primera categoría '70' como nivel de referencia. Reordene Year mediante la función reordercats.

Year_reordered = reordercats(Year,{'76','70','82'});
categories(Year_reordered)
ans = 3x1 cell
    {'76'}
    {'70'}
    {'82'}

La primera categoría de Year_reordered es '76'. Cree un modelo de regresión lineal de MPG como función de Year_reordered.

mdl2 = fitlm(Year_reordered,MPG,'VarNames',{'Model_Year','MPG'})
mdl2 = 
Linear regression model:
    MPG ~ 1 + Model_Year

Estimated Coefficients:
                     Estimate      SE        tStat       pValue  
                     ________    _______    _______    __________

    (Intercept)       21.574     0.95387     22.617    4.0156e-39
    Model_Year_70    -3.8839      1.4059    -2.7625     0.0069402
    Model_Year_82     10.136      1.3812     7.3385    8.7634e-11


Number of observations: 94, Error degrees of freedom: 91
Root Mean Squared Error: 5.56
R-squared: 0.531,  Adjusted R-Squared: 0.521
F-statistic vs. constant model: 51.6, p-value = 1.07e-15

mdl2 utiliza '76' como nivel de referencia e incluye dos variables indicadoras ΙYear=70 e ΙYear=82.

Evaluar un predictor categórico

La presentación del modelo de mdl2 incluye un valor de p de cada término para comprobar si el coeficiente correspondiente es igual a cero o no. Cada valor de p examina cada variable indicadora. Para examinar la variable categórica Model_Year como grupo de variables indicadoras, utilice anova. Utilice la opción 'components'(valor predeterminado) para devolver una tabla ANOVA de componentes que incluye estadísticos ANOVA de cada variable del modelo, excepto el término constante.

anova(mdl2,'components')
ans=2×5 table
                  SumSq     DF    MeanSq      F        pValue  
                  ______    __    ______    _____    __________

    Model_Year    3190.1     2    1595.1    51.56    1.0694e-15
    Error         2815.2    91    30.936                       

La tabla ANOVA de componentes incluye el valor de p de la variable Model_Year, que es más pequeño que los valores de p de las variables indicadoras.

Ajuste un modelo de regresión lineal a los datos de muestra. Especifique las variables de respuesta y predictoras, e incluya en el modelo solo términos de interacción en pares.

Cargue los datos de muestra.

load hospital

Ajuste un modelo lineal con términos de interacción a los datos. Especifique el peso como la variable de respuesta y el sexo, la edad y el tabaquismo como las variables predictoras. Así mismo, especifique que el sexo y el tabaquismo son variables categóricas.

mdl = fitlm(hospital,'interactions','ResponseVar','Weight',...
    'PredictorVars',{'Sex','Age','Smoker'},...
    'CategoricalVar',{'Sex','Smoker'})
mdl = 
Linear regression model:
    Weight ~ 1 + Sex*Age + Sex*Smoker + Age*Smoker

Estimated Coefficients:
                         Estimate      SE        tStat        pValue  
                         ________    _______    ________    __________

    (Intercept)             118.7     7.0718      16.785     6.821e-30
    Sex_Male               68.336     9.7153      7.0339    3.3386e-10
    Age                   0.31068    0.18531      1.6765      0.096991
    Smoker_1               3.0425     10.446     0.29127       0.77149
    Sex_Male:Age         -0.49094    0.24764     -1.9825      0.050377
    Sex_Male:Smoker_1      0.9509     3.8031     0.25003       0.80312
    Age:Smoker_1         -0.07288    0.26275    -0.27737       0.78211


Number of observations: 100, Error degrees of freedom: 93
Root Mean Squared Error: 8.75
R-squared: 0.898,  Adjusted R-Squared: 0.892
F-statistic vs. constant model: 137, p-value = 6.91e-44

El peso de los pacientes no parece diferir significativamente en función de la edad, el tabaquismo o la interacción de estos factores con el sexo del paciente al nivel de significación del 5%.

Cargue el conjunto de datos hald, que mide el efecto de la composición del cemento en el calor disipado por su fraguado.

load hald

Este conjunto de datos incluye las variables ingredients y heat. La matriz ingredients contiene la composición porcentual de los cuatro productos químicos presentes en el cemento. El vector heat contiene los valores del fraguado térmico tras 180 días para cada muestra de cemento.

Ajuste un modelo de regresión lineal robusta a los datos.

mdl = fitlm(ingredients,heat,'RobustOpts','on')
mdl = 
Linear regression model (robust fit):
    y ~ 1 + x1 + x2 + x3 + x4

Estimated Coefficients:
                   Estimate      SE        tStat       pValue 
                   ________    _______    ________    ________

    (Intercept)       60.09     75.818     0.79256      0.4509
    x1               1.5753    0.80585      1.9548    0.086346
    x2               0.5322    0.78315     0.67957     0.51596
    x3              0.13346     0.8166     0.16343     0.87424
    x4             -0.12052     0.7672    -0.15709     0.87906


Number of observations: 13, Error degrees of freedom: 8
Root Mean Squared Error: 2.65
R-squared: 0.979,  Adjusted R-Squared: 0.969
F-statistic vs. constant model: 94.6, p-value = 9.03e-07

Para obtener más información, consulte el tema Reduce Outlier Effects Using Robust Regression, en el que se comparan los resultados de un ajuste robusto con los de un ajuste de mínimos cuadrados estándar.

Calcule el error medio absoluto de un modelo de regresión mediante una validación cruzada de 10 particiones.

Cargue el conjunto de datos carsmall. Especifique las variables Acceleration y Displacement como predictores y la variable Weight como la respuesta.

load carsmall
X1 = Acceleration;
X2 = Displacement;
y = Weight;

Cree la función personalizada regf (se muestra al final de este ejemplo). Esta función ajusta un modelo de regresión a los datos de entrenamiento y después calcula los pesos pronosticados de los vehículos en un conjunto de pruebas. La función compara los valores pronosticados del peso de los vehículos con los valores reales y después calcula el error medio absoluto (EMA) y el EMA ajustado al intervalo de pesos de los vehículos en el conjunto de pruebas.

Nota: si utiliza el archivo de script en vivo en este ejemplo, la función regf ya se incluye al final del archivo. De lo contrario, ha de crear esta función al final del archivo .m o añadirlo como archivo en la ruta de MATLAB®.

De forma predeterminada, crossval realiza una validación cruzada de 10 particiones. En cada una de las 10 particiones de los conjuntos de pruebas y entrenamiento de los datos en X1, X2 e y, calcule los valores de EMA y EMA ajustado mediante la función regf. Halle la media del EMA y del EMA ajustado.

rng('default') % For reproducibility
values = crossval(@regf,X1,X2,y)
values = 10×2

  319.2261    0.1132
  342.3722    0.1240
  214.3735    0.0902
  174.7247    0.1128
  189.4835    0.0832
  249.4359    0.1003
  194.4210    0.0845
  348.7437    0.1700
  283.1761    0.1187
  210.7444    0.1325

mean(values)
ans = 1×2

  252.6701    0.1129

Este código crea la función regf.

function errors = regf(X1train,X2train,ytrain,X1test,X2test,ytest)
tbltrain = table(X1train,X2train,ytrain, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
tbltest = table(X1test,X2test,ytest, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
mdl = fitlm(tbltrain,'Weight ~ Acceleration + Displacement');
yfit = predict(mdl,tbltest);
MAE = mean(abs(yfit-tbltest.Weight));
adjMAE = MAE/range(tbltest.Weight);
errors = [MAE adjMAE];
end

Argumentos de entrada

contraer todo

Datos de entrada, incluidas las variables predictoras y de respuesta, especificados en forma de tabla o arreglo de conjuntos de datos. Las variables predictoras pueden ser numéricas, lógicas, categóricas, de caracteres o de cadena. La variable de respuesta debe ser numérica o lógica.

  • De forma predeterminada, fitlm adopta la última variable como la variable de respuesta y el resto como las variables predictoras.

  • Para establecer otra columna como la variable de respuesta, utilice el argumento de par nombre-valor ResponseVar.

  • Para utilizar un subconjunto de las columnas como predictores, utilice el argumento de par nombre-valor PredictorVars.

  • Para definir la especificación de un modelo, establezca el argumento modelspec mediante una fórmula o matriz de términos. La fórmula o matriz de términos especifica qué columnas se utilizarán como las variables predictoras o de respuesta.

Los nombres de las variables de una tabla no tienen que ser identificadores válidos de MATLAB®, pero los nombres no deben contener espacios en blanco al principio ni al final. Si los nombres no son válidos, no puede utilizar una fórmula al ajustar un modelo; por ejemplo:

  • No puede especificar modelspec mediante una fórmula.

  • No puede utilizar una fórmula para especificar los términos que se han de añadir o eliminar al utilizar la función addTerms o la función removeTerms, respectivamente.

  • No puede utilizar una fórmula para especificar los límites inferior y superior del modelo al utilizar la función step o stepwiselm con los argumentos de par nombre-valor 'Lower' y 'Upper', respectivamente.

Puede verificar los nombres de las variables en tbl mediante la función isvarname. Si los nombres de las variables no son válidos, puede convertirlos en válidos mediante la función matlab.lang.makeValidName.

Variables predictoras, especificadas como una matriz n por p, donde n es el número de observaciones y p es el número de variables predictoras. Cada columna de X representa una variable y cada fila, una observación.

De forma predeterminada, el modelo contiene un término constante, a menos que lo elimine de manera explícita, por lo que no incluya una columna de unos en X.

Tipos de datos: single | double

Variable de respuesta, especificada como vector numérico n por 1, donde n es el número de observaciones. Cada entrada de y es la respuesta de la fila correspondiente en X.

Tipos de datos: single | double

Especificación de modelo, especificado como uno de estos valores.

  • Vector de caracteres o escalar de cadena que da nombre al modelo.

    ValorTipo de modelo
    'constant'El modelo contiene solo un término constante (intercepto).
    'linear'El modelo contiene un intercepto y un término lineal para cada predictor.
    'interactions'El modelo contiene un intercepto, un término lineal para cada predictor y todos los productos de pares de predictores diferentes (sin términos cuadrados).
    'purequadratic'El modelo contiene un término de intercepto y términos lineales y cuadrados para cada predictor.
    'quadratic'El modelo contiene un término de intercepto, términos lineales y cuadrados para cada predictor y todos los productos de pares de predictores diferentes.
    'polyijk'El modelo es un polinomio con todos los términos hasta el grado i en el primer predictor, hasta el grado j en el segundo y así sucesivamente. Especifique el grado máximo para cada predictor mediante los numerales del cero al nueve. El modelo contiene términos de interacción, pero el grado de cada uno de ellos no supera el valor máximo de los grados especificados. Por ejemplo, 'poly13' tiene un intercepto y los términos x1, x2, x22, x23, x1*x2 y x1*x22, donde x1 y x2 son el primer y el segundo predictores, respectivamente.
  • Matriz t por (p + 1), o Matriz de términos, en la que se especifican los términos del modelo, donde t es el número de términos, p es el número de variables predictoras y +1 representa la variable de respuesta. Una matriz de términos es útil cuando el número de predictores es grande y desea generar los términos de forma programática.

  • Vector de caracteres o escalar de cadena Fórmula con el formato

    'y ~ terms',

    donde los terms figuran en Notación de Wilkinson. Los nombres de las variables de la fórmula deben ser nombres de variables en tbl o nombres de variables especificados mediante Varnames. Así mismo, los nombres de las variables deben ser identificadores válidos de MATLAB.

    El software determina el orden de los términos en un modelo ajustado mediante el orden de los términos en tbl o X. Por tanto, el orden de los términos en el modelo puede ser diferente del orden de los términos en la fórmula especificada.

Ejemplo: 'quadratic'

Ejemplo: 'y ~ x1 + x2^2 + x1:x2'

Tipos de datos: single | double | char | string

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: 'Intercept',false,'PredictorVars',[1,3],'ResponseVar',5,'RobustOpts','logistic' especifica un modelo de regresión robusta sin ningún término constante, donde el algoritmo utiliza la función logística de ponderación con la constante de ajuste predeterminada, la primera y tercera variables son las variables predictoras y la quinta variable es la variable de respuesta.

Lista de variables categóricas, especificadas como el par separado por comas que consta de 'CategoricalVars' y un arreglo de cadenas o un arreglo de celdas de vectores de caracteres que contiene los nombres de las variables categóricas en la tabla o el arreglo de conjuntos de datos tbl, o un vector índice lógico o numérico que indica qué columnas son categóricas.

  • Si los datos se recogen en una tabla o un arreglo de conjuntos de datos tbl, de forma predeterminada, fitlm trata todos los valores categóricos, los valores lógicos, los arreglos de caracteres, los arreglos de cadenas y los arreglos de celdas de vectores de caracteres como variables categóricas.

  • Si los datos se recogen en una matriz X, el valor predeterminado de 'CategoricalVars' es una matriz vacía []. Es decir, ninguna variable es categórica a menos que especifique que es categórica.

Por ejemplo, puede especificar que la segunda y la tercera variables de un total de seis son categóricas mediante cualquiera de las siguientes opciones:

Ejemplo: 'CategoricalVars',[2,3]

Ejemplo: 'CategoricalVars',logical([0 1 1 0 0 0])

Tipos de datos: single | double | logical | string | cell

Observaciones que se excluirán del ajuste, especificadas como el par separado por comas que consta de 'Exclude' y un vector índice lógico o numérico que indica qué observaciones se excluirán del ajuste.

Por ejemplo, puede excluir las observaciones 2 y 3 de un total de 6 mediante cualquiera de los siguientes ejemplos.

Ejemplo: 'Exclude',[2,3]

Ejemplo: 'Exclude',logical([0 1 1 0 0 0])

Tipos de datos: single | double | logical

Indicador del término constante (intercepto) del ajuste, especificado como el par separado por comas que consta de 'Intercept' y de true para incluir o de false para eliminar el término constante del modelo.

Utilice 'Intercept' solo cuando se especifique el modelo mediante un vector de caracteres o escalar de cadena y no mediante una fórmula o matriz.

Ejemplo: 'Intercept',false

Variables predictoras que se utilizarán en el ajuste, especificadas como el par separado por comas que consta de 'PredictorVars' y un arreglo de cadenas o un arreglo de celdas de vectores de caracteres de los nombres de las variables en la tabla o el arreglo de conjuntos de datos tbl, o un vector índice lógico o numérico que indica qué columnas son las variables predictoras.

Los valores de la cadena o los vectores de caracteres deben estar entre los nombres que figuran en tbl o en los nombres que especifique mediante el argumento de par nombre-valor 'VarNames'.

El valor predeterminado es todas las variables en X o en tbl excepto ResponseVar.

Por ejemplo, puede especificar que la segunda y la tercera variables son las variables predictoras mediante cualquiera de los siguientes ejemplos.

Ejemplo: 'PredictorVars',[2,3]

Ejemplo: 'PredictorVars',logical([0 1 1 0 0 0])

Tipos de datos: single | double | logical | string | cell

Variable de respuesta que se utilizará en el ajuste, especificada como el par separado por comas que consta de 'ResponseVar' y un vector de caracteres o escalar de cadena que contiene el nombre de la variable en la tabla o el arreglo de conjuntos de datos tbl, o un vector índice lógico o numérico que indica qué columna es la variable de respuesta. Normalmente, se ha de utilizar 'ResponseVar' al ajustar una tabla o un arreglo de conjuntos de datos tbl.

Por ejemplo, puede especificar que la cuarta variable, es decir, yield, es la respuesta de un total de seis variables de una de las siguientes maneras.

Ejemplo: 'ResponseVar','yield'

Ejemplo: 'ResponseVar',[4]

Ejemplo: 'ResponseVar',logical([0 0 0 1 0 0])

Tipos de datos: single | double | logical | char | string

Indicador del tipo de ajuste robusto que se utilizará, especificado como el par separado por comas que consta de 'RobustOpts' y uno de estos valores.

  • 'off': sin ajuste robusto. fitlm utiliza mínimos cuadrados ordinarios.

  • 'on': ajuste robusto mediante la función de ponderación 'bisquare' con la constante de ajuste predeterminada.

  • Vector de caracteres o escalar de cadena: nombre de una función de ponderación de ajuste robusto de la tabla siguiente. fitlm utiliza la constante de ajuste predeterminada correspondiente de la tabla.

  • Estructura con los dos campos RobustWgtFun y Tune.

    • El campo RobustWgtFun contiene el nombre de una función de ponderación de ajuste robusto de la tabla siguiente o un identificador de función de una función de ponderación personalizada.

    • El campo Tune contiene una constante de ajuste. Si no establece el campo Tune, fitlm utiliza la constante de ajuste predeterminada correspondiente.

    Función de ponderaciónDescripciónConstante de ajuste predeterminada
    'andrews'w = (abs(r)<pi) .* sin(r) ./ r1.339
    'bisquare'w = (abs(r)<1) .* (1 - r.^2).^2 (también llamada biponderación)4.685
    'cauchy'w = 1 ./ (1 + r.^2)2.385
    'fair'w = 1 ./ (1 + abs(r))1.400
    'huber'w = 1 ./ max(1, abs(r))1.345
    'logistic'w = tanh(r) ./ r1.205
    'ols'Mínimos cuadrados ordinarios (sin función de ponderación)Ninguna
    'talwar'w = 1 * (abs(r)<1)2.795
    'welsch'w = exp(-(r.^2))2.985
    identificador de funciónFunción de ponderación personalizada que acepta un vector r de los valores residuales escalados y devuelve un vector de ponderaciones del mismo tamaño que r1
    • Las constantes de ajuste predeterminadas de las funciones de ponderación integradas ofrecen estimaciones de los coeficientes que son aproximadamente el 95% de eficientes estadísticamente que las estimaciones de los mínimos cuadrados ordinarios, siempre que la respuesta tenga una distribución normal sin valores atípicos. Al disminuir la constante de ajuste, se aumenta la reducción asignada a los valores residuales grandes; al aumentar la constante de ajuste, se disminuye la reducción asignada a los valores residuales grandes.

    • El valor r en las funciones de ponderación es

      r = resid/(tune*s*sqrt(1–h)),

      donde resid es el vector de los valores residuales de la iteración anterior, tune es la constante de ajuste, h es el vector de los valores de apalancamiento de un ajuste de mínimos cuadrados y s es una estimación de la desviación estándar del término de error dado por

      s = MAD/0.6745.

      MAD es la mediana de la desviación absoluta de los valores residuales con respecto a su mediana. La constante 0.6745 convierte la estimación en insesgada para la distribución normal. Si X tiene p columnas, el software excluye las p desviaciones absolutas más pequeñas al calcular la mediana.

Para obtener un ajuste robusto, fitlm utiliza la estimación de M para formular las ecuaciones de estimación y las resuelve mediante el método de Iteratively Reweighted Least Squares (IRLS).

Ejemplo: 'RobustOpts','andrews'

Nombres de las variables, especificados como el par separado por comas que consta de 'VarNames' y un arreglo de cadenas o un arreglo de celdas de vectores de caracteres que incluye los nombres de las columnas de X en primer lugar y el nombre de la variable de respuesta y en último lugar.

'VarNames' no se puede aplicar a las variables de una tabla o un arreglo de conjuntos de datos, puesto que dichas variables ya tienen nombres.

Los nombres de las variables no tienen que ser identificadores válidos de MATLAB, pero los nombres no deben contener espacios en blanco al principio ni al final. Si los nombres no son válidos, no puede utilizar una fórmula al ajustar un modelo; por ejemplo:

  • No puede utilizar una fórmula para especificar los términos que se han de añadir o eliminar al utilizar la función addTerms o la función removeTerms, respectivamente.

  • No puede utilizar una fórmula para especificar los límites inferior y superior del modelo al utilizar la función step o stepwiselm con los argumentos de par nombre-valor 'Lower' y 'Upper', respectivamente.

Antes de especificar 'VarNames',varNames, puede verificar los nombres de las variables en varNames mediante la función isvarname. Si los nombres de las variables no son válidos, puede convertirlos en válidos mediante la función matlab.lang.makeValidName.

Ejemplo: 'VarNames',{'Horsepower','Acceleration','Model_Year','MPG'}

Tipos de datos: string | cell

Pesos de las observaciones, especificados como el par separado por comas que consta de 'Weights' y un vector n por 1 de los valores escalares no negativos, donde n es el número de observaciones.

Tipos de datos: single | double

Argumentos de salida

contraer todo

Modelo lineal que representa un ajuste de mínimos cuadrados de la respuesta a los datos, devuelto como objeto LinearModel.

Si el valor del par nombre-valor 'RobustOpts' no es [] ni 'ols', el modelo no es un ajuste de mínimos cuadrados, pero utiliza la función de ajuste robusto.

Más acerca de

contraer todo

Matriz de términos

Una matriz de términos T es una matriz t por (p + 1) en la que se especifican los términos de un modelo, donde t es el número de términos, p es el número de variables predictoras y +1 representa la variable de respuesta. El valor de T(i,j) es el exponente de la variable j en el término i.

Por ejemplo, suponga que una entrada incluye tres variables predictoras x1, x2 y x3 y la variable de respuesta y con el orden x1, x2, x3 e y. Cada fila de T representa un término:

  • [0 0 0 0]: término constante o intercepto

  • [0 1 0 0]: x2; equivalentemente, x1^0 * x2^1 * x3^0

  • [1 0 1 0]x1*x3

  • [2 0 0 0]x1^2

  • [0 1 2 0]x2*(x3^2)

El 0 al final de cada término representa la variable de respuesta. En general, un vector columna de ceros en una matriz de términos representa la posición de la variable de respuesta. Si las variables predictoras y de respuesta se encuentran en una matriz y un vector columna, debe incluir 0 para señalar la variable de respuesta en la última columna de cada fila.

Fórmula

Una fórmula para la especificación de un modelo es un vector de caracteres o escalar de cadena con el formato 'y ~ terms'.

  • y es el nombre de la respuesta.

  • terms representa los términos de los predictores en un modelo mediante notación de Wilkinson.

Para representar las variables predictoras y de respuesta, utilice los nombres de las variables de la entrada de tabla tbl o los nombres de las variables especificados mediante VarNames. El valor predeterminado de VarNames es {'x1','x2',...,'xn','y'}.

Por ejemplo:

  • 'y ~ x1 + x2 + x3' especifica un modelo lineal de tres variables con intercepto.

  • 'y ~ x1 + x2 + x3 – 1' especifica un modelo lineal de tres variables sin intercepto. Tenga en cuenta que las fórmulas incluyen un término constante (intercepto) de forma predeterminada. Para excluir un término constante del modelo, debe incluir –1 en la fórmula.

Una fórmula incluye un término constante a menos que lo elimine de manera explícita con –1.

Notación de Wilkinson

La notación de Wilkinson describe los términos presentes en un modelo. La notación se relaciona con los términos presentes en un modelo, no con los multiplicadores (coeficientes) de dichos términos.

La notación de Wilkinson utiliza estos símbolos:

  • + significa que se incluye la siguiente variable.

  • significa que no se incluye la siguiente variable.

  • : define una interacción, que es un producto de los términos.

  • * define una interacción y todos los términos de orden inferior.

  • ^ eleva el predictor a una potencia, exactamente como cuando se repite *, por lo que ^ incluye también los términos de orden inferior.

  • () agrupa los términos.

Esta tabla muestra ejemplos típicos de la notación de Wilkinson.

Notación de WilkinsonTérminos en notación estándar
1Término constante (intercepto)
x1^k, donde k es un entero positivox1, x12, ..., x1k
x1 + x2x1, x2
x1*x2x1, x2, x1*x2
x1:x2x1*x2 solo
–x2No se incluye x2
x1*x2 + x3x1, x2, x3, x1*x2
x1 + x2 + x3 + x1:x2x1, x2, x3, x1*x2
x1*x2*x3 – x1:x2:x3x1, x2, x3, x1*x2, x1*x3, x2*x3
x1*(x2 + x3)x1, x2, x3, x1*x2, x1*x3

Para obtener más información, consulte Wilkinson Notation.

Sugerencias

  • Para acceder a las propiedades del modelo del objeto LinearModel mdl, puede utilizar la notación de puntos. Por ejemplo, mdl.Residuals devuelve una tabla de los valores residuales sin procesar, de Pearson, studentizados y estandarizados del modelo.

  • Tras entrenar un modelo, puede generar código C/C++ que prediga las respuestas de los nuevos datos. Generar código C/C++ requiere MATLAB Coder™. Para obtener más detalles, consulte Introduction to Code Generation.

Algoritmos

  • El algoritmo de ajuste principal es la descomposición QR. Para obtener un ajuste robusto, fitlm utiliza la estimación de M para formular las ecuaciones de estimación y las resuelve mediante el método de Iteratively Reweighted Least Squares (IRLS).

  • fitlm trata un predictor categórico de la siguiente manera:

    • Un modelo con un predictor categórico que tiene L niveles (categorías) incluye L – 1 variables indicadoras. El modelo utiliza la primera categoría como nivel de referencia, por lo que no incluye la variable indicadora en este. Si el tipo de datos del predictor categórico es categorical, puede comprobar el orden de las categorías mediante categories y reordenarlas con reordercats para personalizar el nivel de referencia. Para obtener más información sobre cómo crear variables indicadoras, consulte Automatic Creation of Dummy Variables.

    • fitlm trata el grupo de L – 1 variables indicadoras como una única variable. Si desea tratar las variables indicadoras como variables predictoras diferentes, cree variables indicadoras manualmente mediante dummyvar. Después utilice las variables indicadoras, excepto la correspondiente al nivel de referencia de la variable categórica, al ajustar un modelo. Para el predictor categórico X, si especifica que todas las columnas de dummyvar(X) y un término de intercepto son predictores, la matriz de diseño pasa a ser de rango deficiente.

    • Los términos de interacción entre un predictor continuo y un predictor categórico con L niveles consisten en el producto elemento por elemento de las L – 1 variables indicadoras con el predictor continuo.

    • Los términos de interacción entre dos predictores categóricos con L y M niveles consisten en las (L – 1)*(M – 1) variables indicadoras, que incluyen todas las posibles combinaciones de niveles de los dos predictores categóricos.

    • No puede especificar términos de orden superior en un predictor categórico, puesto que el cuadrado de un indicador es igual a sí mismo.

  • fitlm considera que los valores NaN, '' (vector de caracteres vacío), "" (cadena vacía), <missing> y <undefined> de tbl, X e Y son valores faltantes. fitlm no utiliza observaciones con valores faltantes en el ajuste. La propiedad ObservationInfo de un modelo ajustado indica si fitlm utiliza cada una de las observaciones en el ajuste o no.

Funcionalidad alternativa

  • Para reducir el tiempo de cálculo en conjuntos de datos de altas dimensiones, ajuste un modelo de regresión lineal mediante la función fitrlinear.

  • Para regularizar una regresión, utilice fitrlinear, lasso, ridge o plsregress.

    • fitrlinear regulariza una regresión para conjuntos de datos de altas dimensiones mediante una regresión lasso o ridge.

    • lasso elimina los predictores redundantes en una regresión lineal mediante lasso o elastic net.

    • ridge regulariza una regresión con términos correlacionados mediante una regresión ridge.

    • plsregress regulariza una regresión con términos correlacionados mediante mínimos cuadrados parciales.

Referencias

[1] DuMouchel, W. H., and F. L. O'Brien. “Integrating a Robust Option into a Multiple Regression Computing Environment.” Computer Science and Statistics: Proceedings of the 21st Symposium on the Interface. Alexandria, VA: American Statistical Association, 1989.

[2] Holland, P. W., and R. E. Welsch. “Robust Regression Using Iteratively Reweighted Least-Squares.” Communications in Statistics: Theory and Methods, A6, 1977, pp. 813–827.

[3] Huber, P. J. Robust Statistics. Hoboken, NJ: John Wiley & Sons, Inc., 1981.

[4] Street, J. O., R. J. Carroll, and D. Ruppert. “A Note on Computing Robust Regression Estimates via Iteratively Reweighted Least Squares.” The American Statistician. Vol. 42, 1988, pp. 152–154.

Capacidades ampliadas

Historial de versiones

Introducido en R2013b