Aplicaciones de Regresión múltiple: Parte 1

En esta ocasión veremos la forma de estimar los parámetros de regresión de una función lineal múltiple.

De maner que, dado el modelo Y= β0 + β1 X1 + . . . + βn Xn + u

Se trata de hallar los estimadores de β =( β1, β2, . . ., βn) usando matrices por el método de los Mínimos Cuadrados Ordinrios.

Solución

Dado el modelo matricialmente visto: Y = β0 + βX.

Se trata de definir la matriz aT = (1,X) donde 1 es el vector fila de n unos y X es la matriz de k columnas (equivalente a k variables independientes). Además b = Y, es el vector de la variable dependiente.

De manera que la solución sea:

X = (a.aT)-1.a.bT

Nota:

Por la forma de la lectura de X e Y, del archivo, hemos modificado la forma del cálculo de X. Nos hemos apoyado en: Si A es una matriz entonces a = (aT)T

Ejemplo 1

Dada una muestra de tamaño 15 que contiene las variables Ingreso y Ahorro, se trata de obtener la ecuación de estimación lineal de dos variables Y = a + BX.

Los datos se encuentran en el archivo ahorro.txt de la unidad D y carpeta pypage.

Procedimiento

Empezamos importando numpy
>>>import numpy as np
Para una fácil lectura, importamos también pandas.
>>>import pandas as pd
Pasamos a leer los datos
>>> datos = pd.read_csv("d:\\pypage\\ahorro.txt",sep=",", names=["Ahorro","Ingreso"])
Extraemos las variables hacia listas separadas
>>> X = datos.Ingreso
>>> Y = datos.Ahorro
Para formar la matriz a, generamos una vector de unos de 15 elementos
>>> unos = np.ones(15)
Formamos la matriz aumentada a
>>> a=np.array([unos,X])
Puesto que se tiene una matriz (2,15) cuando debiera ser (15,2), la transponemos de dorma que en lugar a = aT y la forma original sufre este cambio.
>>> ta=np.transpose(a)
Vemos su orden
>>> a.shape
(2, 15)
>>> ta.shape
(15, 2)
Calculamos la matriz A = a.aT, que en teoría debiera ser aT.a
>>> A=a@ta
Calculamos su inversa
>>> iA=np.linalg.inv(A)
Determinamos al vector b, que por la naturaleza de los datos es un vector columna de 15x1
>>> b=np.array(Y)
Pasamos a obtener los estimadores
>>> beta=iA@a@b
>>> beta
array([1.44228977, 0.08849946])
 

Ejemplo 2

El archivo agri.txt contiene informción relativo a la producción agrícola, volumen de fitosanitarios, parque automotor y financiamiento público y privado en un determinado país, entre los años 80 y 99. Se sospecha de un modelo de regresión lineal de la forma:

Y = β0 + β1X1 + β2X2 + β3X3 + e

Se trata de encontrar los estimadores de los coeficientes de regresión.

Solución

Lectura del archivo:

>>> datos = pd.read_csv("d:\\pypage\\agri.txt", sep = "\t",names=["ProdAgr","VolFit","PqAut","FinPp"])
>>> unos = np.ones(20)
>>> a = np.array([unos,datos.VolFit,datos.PqAut,datos.FinPp])
>>> ta=np.transpose(a)
>>> a.shape
(2, 15)
>>> ta.shape
(15, 2)
>>> A=a@ta
>>> iA=np.linalg.inv(A)
>>> b = np.array(datos.ProdAgr)
>>> x=iA@w@b
>>> x
array([ 1.66174177e+05, 6.97966721e+01, -7.06994337e-01, 2.07734910e+00])

 

Continuar en la siguiente sesión