Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Flujo de trabajo de regresión lineal

En este ejemplo se muestra cómo ajustar un modelo de regresión lineal. Un flujo de trabajo típico implica lo siguiente: importar datos, ajustar una regresión, probar su calidad, modificarla para mejorar la calidad y compartirla.

Paso 1. Importe los datos en una tabla.

es una hoja de cálculo de Excel® que contiene nombres de pacientes, sexo, edad, peso, presión arterial y fechas de tratamiento en un protocolo experimental.hospital.xls Primero lea los datos en una tabla.

patients = readtable('hospital.xls','ReadRowNames',true);

Examine las cinco filas de datos.

patients(1:5,:)
ans=5×11 table
                  name       sex    age    wgt    smoke    sys    dia    trial1    trial2    trial3    trial4
               __________    ___    ___    ___    _____    ___    ___    ______    ______    ______    ______

    YPL-320    'SMITH'       'm'    38     176      1      124    93       18       -99       -99       -99  
    GLI-532    'JOHNSON'     'm'    43     163      0      109    77       11        13        22       -99  
    PNI-258    'WILLIAMS'    'f'    38     131      0      125    83      -99       -99       -99       -99  
    MIJ-579    'JONES'       'f'    40     133      0      117    75        6        12       -99       -99  
    XLK-030    'BROWN'       'f'    49     119      0      122    80       14        23       -99       -99  

Los campos y parecen tener dos opciones cada uno.sexsmoke Así que cambie estos campos a categóricos.

patients.smoke = categorical(patients.smoke,0:1,{'No','Yes'}); patients.sex = categorical(patients.sex);

Paso 2. Cree un modelo ajustado.

Su objetivo es modelar la presión sistólica en función de la edad, el peso, el sexo y el estado de tabaquismo de un paciente. Cree una fórmula lineal como función de, y.'sys''age''wgt''sex''smoke'

modelspec = 'sys ~ age + wgt + sex + smoke'; mdl = fitlm(patients,modelspec)
mdl =  Linear regression model:     sys ~ 1 + sex + age + wgt + smoke  Estimated Coefficients:                    Estimate        SE        tStat        pValue                      _________    ________    ________    __________      (Intercept)       118.28      7.6291      15.504    9.1557e-28     sex_m            0.88162      2.9473     0.29913       0.76549     age              0.08602     0.06731       1.278       0.20438     wgt            -0.016685    0.055714    -0.29947       0.76524     smoke_Yes          9.884      1.0406       9.498    1.9546e-15   Number of observations: 100, Error degrees of freedom: 95 Root Mean Squared Error: 4.81 R-squared: 0.508,  Adjusted R-Squared: 0.487 F-statistic vs. constant model: 24.5, p-value = 5.99e-14 

Los predictores de sexo, edad y peso tienen bastante alto

<math display="block">
<mrow>
<mi>p</mi>
</mrow>
</math>
-Values, indicando que algunos de estos predictores pueden ser innecesarios.

Paso 3. Localice y quite los valores atípicos.

Vea si hay valores atípicos en los datos que deben excluirse del ajuste. Trace los residuos.

plotResiduals(mdl)

Hay un posible valor atípico, con una calidad superior a 12. Esto probablemente no es realmente un outlier. Para la demostración, aquí es cómo encontrarlo y eliminarlo.

Encuentra el outlier.

outlier = mdl.Residuals.Raw > 12; find(outlier)
ans = 84 

Quite el outlier.

mdl = fitlm(patients,modelspec,...     'Exclude',84);  mdl.ObservationInfo(84,:)
ans=1×4 table
               Weights    Excluded    Missing    Subset
               _______    ________    _______    ______

    WXM-486       1        true        false     false 

La observación 84 ya no está en el modelo.

Paso 4. Simplifique el modelo.

Trate de obtener un modelo más simple, uno con menos predictores pero la misma precisión predictiva. busca un modelo mejor agregando o quitando un término a la vez.step Permite tomar hasta 10 pasos.step

mdl1 = step(mdl,'NSteps',10)
1. Removing wgt, FStat = 4.6001e-05, pValue = 0.9946 2. Removing sex, FStat = 0.063241, pValue = 0.80199 
mdl1 =  Linear regression model:     sys ~ 1 + age + smoke  Estimated Coefficients:                    Estimate       SE       tStat       pValue                      ________    ________    ______    __________      (Intercept)     115.11       2.5364    45.383    1.1407e-66     age            0.10782     0.064844    1.6628       0.09962     smoke_Yes       10.054      0.97696    10.291    3.5276e-17   Number of observations: 99, Error degrees of freedom: 96 Root Mean Squared Error: 4.61 R-squared: 0.536,  Adjusted R-Squared: 0.526 F-statistic vs. constant model: 55.4, p-value = 1.02e-16 

tomó dos pasos.step Esto significa que no podría mejorar aún más el modelo añadiendo o restando un solo término.

Graficar la efectividad del modelo más simple en los datos de entrenamiento.

plotResiduals(mdl1)

Los residuos se ven tan pequeños como los del modelo original.

Paso 5. Predecir las respuestas a los nuevos datos.

Supongamos que tiene cuatro personas nuevas, de 25, 30, 40 y 65, y el primer y tercer humo. Predecir su presión sistólica usando.mdl1

ages = [25;30;40;65]; smoker = {'Yes';'No';'Yes';'No'}; systolicnew = feval(mdl1,ages,smoker)
systolicnew = 4×1

  127.8561
  118.3412
  129.4734
  122.1149

Para realizar predicciones, solo necesita las variables que usa.mdl1

Paso 6. Comparta el modelo.

Es posible que desee que otros usuarios puedan usar el modelo para la predicción. Acceda a los términos en el modelo lineal.

coefnames = mdl1.CoefficientNames
coefnames = 1x3 cell array
    {'(Intercept)'}    {'age'}    {'smoke_Yes'}

Vea la fórmula del modelo.

mdl1.Formula
ans =  sys ~ 1 + age + smoke 

Acceda a los coeficientes de los términos.

coefvals = mdl1.Coefficients(:,1).Estimate
coefvals = 3×1

  115.1066
    0.1078
   10.0540

El modelo es, donde es para un fumador, y de otra manera.sys = 115.1066 + 0.1078*age + 10.0540*smokesmoke10

Consulte también

| | | |

Temas relacionados