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")
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
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")
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
.