Resolución de Problemas de Regresión y Estadística con MATLAB
Enviado por Chuletator online y clasificado en Latín
Escrito el en
con un tamaño de 3 KB
Problema 1: Ajuste de Rectas y Funciones
A continuación, se presenta el código en MATLAB para el ajuste de rectas y funciones no lineales:
clc, format compact, clear all
disp('Problema 1')
x = [1 1 1 3 3 3 6 6 6 10 10 10 14 14]
y = [0 1 2 0 1 2 -2 -1 0 -2 -1 0 -2 -1]
n = [10 55 117 75 320 35 121 99 18 230 81 10 95 16]
N = sum(n)
A = [N sum(n.*x); sum(n.*x) sum(n.*x.^2)], B = [sum(n.*y); sum(n.*y.*x)]
sol = A\B, a = sol(1), b = sol(2)
disp('Recta Y/X: y = a + b*x')
A2 = [N sum(n.*y); sum(n.*y) sum(n.*y.^2)], B2 = [sum(n.*x); sum(n.*y.*x)]
sol2 = A2\B2, a2 = sol2(1), b2 = sol2(2)
disp('Recta X/Y: x = a2 + b2*y')
disp('Debemos usar la de X/Y:'), x_2_3 = a2 + b2*2.3Ajuste de funciones no lineales (Prob 1-b)
disp('Prob 1-b')
X = 1./x; disp('Base={1, X, X^3}')
Ab = [N sum(n.*X) sum(n.*X.^3)
sum(n.*X) sum(n.*X.^2) sum(n.*X.^4)
sum(n.*X.^3) sum(n.*X.^4) sum(n.*X.^6)]
Bb = [sum(n.*y); sum(n.*y.*X); sum(n.*y.*X.^3)]
solb = Ab\Bb, a = solb(1), b = sol2(2), c = solb(3)
disp('La función ajustada es: y = a + b/x + c/(x^3)')Cálculos estadísticos (Prob 1-c)
disp('Prob 1-c')
xx = [1 3], nn = [55+117 320+35]
NN = sum(nn), media = sum(nn.*xx)/NN, m2 = sum(nn.*xx.^2)/NN, varianza = m2 - media^2
s = sqrt(varianza), CV = s/abs(media)Control 2016 Grado B
clc, clear all, disp('Control 2016 Grado B')
disp('Problema 1')
y = [-1.5 -1.5 1.5 1.5 1.5 4.5 4.5 4.5 8 8 8 12 12]
x = [0 1 0 1 2 1 2 3 2 3 4 3 4]
n = [20 5 10 35 5 10 20 10 5 20 20 5 10]
N = sum(n)
A = [N sum(n.*y); sum(n.*y) sum(n.*y.^2)], B = [sum(n.*x); sum(n.*x.*y)]
sol = A\B, a = sol(1), b = sol(2)
disp('Recta x = a + b*y')
mx = sum(n.*x)/N, m2x = sum(n.*x.^2)/N, Vx = m2x - mx^2, sx = sqrt(Vx)
my = sum(n.*y)/N, m2y = sum(n.*y.^2)/N, Vy = m2y - my^2, sy = sqrt(Vy)
m11 = sum(n.*x.*y)/N, cov = m11 - mx*my
r = cov/(sx*sy)
Vr = Vx*(1 - r^2)Cambio de variable y ajuste (Prob 1-b)
disp('Prob 1-b')
disp('Haciendo el cambio U = 1/(1+x), queda y = ax + bU')
U = 1./(1+x)
Ab = [sum(n.*x.^2) sum(n.*x.*U); sum(n.*x.*U) sum(n.*U.^2)]
Bb = [sum(n.*y.*x); sum(n.*y.*U)]
solb = Ab\Bb
a2 = solb(1), b2 = solb(2)
disp('Hemos ajustado y = a2*x + b2/(1+x)')
yest = a2*x + b2*U, res = yest - y
mr = sum(n.*res)/N
Vr = sum(n.*res.^2)/N - mr^2Cálculo de la mediana (Problema 1-c)
disp('Problema 1-c')
yy = [1.5 4.5 8 12], nn = [5 30 45 15], NN = sum(nn)
media = sum(nn.*yy)/NN
m2 = sum(nn.*yy.^2)/NN, varianza = m2 - media^2
disp('amplitudes=aa'), aa = [3 3 4 4]
LL = [0 3 6 10 14]
nac = cumsum(nn), lista = find(nac > NN/2), ii = lista(1)
Me = LL(ii) + (NN/2 - nac(ii-1))/nn(ii)*aa(ii)NOTA: Si la mediana estuviese en el primer intervalo (ii=1), la última línea no funcionaría. Para asegurar su funcionamiento, se puede utilizar la siguiente estructura:
if ii == 1
Me = LL(ii) + NN/2/nn(ii)*aa(ii)
else
Me = LL(ii) + (NN/2 - nac(ii-1))/nn(ii)*aa(ii)
end