Contenido principal

Mejorar el ajuste de un modelo con ponderaciones

En este ejemplo se muestra cómo ajustar un modelo polinomial a los datos utilizando tanto el método de mínimos cuadrados lineales como el método de mínimos cuadrados ponderados para su comparación.

Genere datos de muestra a partir de distribuciones normales diferentes utilizando la función randn.

rng("default")  % For reproducibility

rnorm = [];
idx = [];

for k=1:20
    r = k*randn([20,1]) + (1/20)*(k^3);
    rnorm = [rnorm;r];
    idx = [idx;ones(20,1).*k];
end

La variable dependiente rnorm contiene datos de muestra de 20 distribuciones normales. La variable independiente idx contiene enteros que indican si dos elementos de rnorm se han muestreado a partir de la misma distribución normal.

Ajuste un modelo polinomial de tercer grado a idx y rnorm. Devuelva información sobre las estimaciones de coeficientes y el algoritmo utilizado para ajustar el modelo.

[p3fit,~,fitinfo] = fit(idx,rnorm,"poly3")
p3fit = 
     Linear model Poly3:
     p3fit(x) = p1*x^3 + p2*x^2 + p3*x + p4
     Coefficients (with 95% confidence bounds):
       p1 =     0.05156  (0.0438, 0.05932)
       p2 =    -0.03993  (-0.2875, 0.2076)
       p3 =      0.1418  (-2.124, 2.408)
       p4 =      0.0462  (-5.585, 5.678)
fitinfo = struct with fields:
        numobs: 400
      numparam: 4
     residuals: [400×1 double]
      Jacobian: [400×4 double]
      exitflag: 1
     algorithm: 'QR factorization and solve'
    iterations: 1

p3fit contiene las estimaciones para los coeficientes del modelo con intervalos de confianza del 95%. El método de ajuste predeterminado para ajustar un modelo polinomial es el método de mínimos cuadrados lineales. fitinfo contiene información sobre el algoritmo de ajuste utilizado para ajustar los coeficientes a los datos. El error en los datos se puede estimar con los valores residuales almacenados en fitinfo.

Represente los valores residuales utilizando una gráfica de puntos.

stem(idx,fitinfo.residuals)
xlabel("idx")
ylabel("residuals")

Figure contains an axes object. The axes object with xlabel idx, ylabel residuals contains an object of type stem.

La gráfica de los valores residuales muestra que su varianza aumenta a medida que aumentan los valores de idx. Las varianzas no constantes en los diferentes valores de idx indican que el método de ajuste de mínimos cuadrados ponderados es más adecuado para calcular los coeficientes del modelo.

Cree un vector de ceros para almacenar posteriormente las ponderaciones.

W = zeros(length(rnorm),1);

Las ponderaciones que proporciona transforman las varianzas residuales de forma que son constantes para diferentes valores de idx. Defina la ponderación para cada elemento de rnorm como el recíproco de la varianza residual para el valor correspondiente de idx. Después, ajuste el modelo con las ponderaciones.

for k=1:20
    rnorm_idx = rnorm(idx==k);
    recipvar = 1/var(rnorm_idx);
    w = (idx==k).*recipvar;
    W = W+w;
end
[wp3fit,~,wfitinfo] = fit(idx,rnorm,"poly3","Weights",W)
wp3fit = 
     Linear model Poly3:
     wp3fit(x) = p1*x^3 + p2*x^2 + p3*x + p4
     Coefficients (with 95% confidence bounds):
       p1 =     0.04894  (0.04419, 0.0537)
       p2 =     0.03601  (-0.08744, 0.1595)
       p3 =     -0.4262  (-1.253, 0.4009)
       p4 =      0.9836  (-0.1959, 2.163)
wfitinfo = struct with fields:
        numobs: 400
      numparam: 4
     residuals: [400×1 double]
      Jacobian: [400×4 double]
      exitflag: 1
     algorithm: 'QR factorization and solve'
    iterations: 1

wp3fit y wfitinfo contienen los resultados del ajuste de mínimos cuadrados ponderados.

Muestre p3fit, wp3fit y rnorm en la misma gráfica.

plot(p3fit,idx,rnorm)
hold on
plot(wp3fit,"g")
xlabel("idx")
ylabel("rnorm")
legend(["rnorm","linear least-squares fit","weighted least-squares fit"])
hold off

Figure contains an axes object. The axes object with xlabel idx, ylabel rnorm contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent rnorm, linear least-squares fit, weighted least-squares fit.

La gráfica muestra wp3fit realizando un seguimiento de cerca de p3fit.

Puede determinar si wp3fit es un mejor ajuste que p3fit representando los valores residuales.

stem(idx,wfitinfo.residuals)
xlabel("idx")
ylabel("residuals")

Figure contains an axes object. The axes object with xlabel idx, ylabel residuals contains an object of type stem.

La salida muestra que los valores residuales de wp3fit son menores que los valores residuales de p3fit. Las varianzas de los valores residuales de wp3fit también son más similares para valores diferentes de idx que las varianzas de los valores residuales de p3fit.

Consulte también

Funciones

Temas