Path: blob/main/Trabajo_grupal/WG4/Grupo_4_py.py
2714 views
# -*- coding: utf-8 -*-123# TAREA 44# WG456import numpy as np7import pandas as pd8from pandas import DataFrame, Series9import statistics10import inspect1112#para poder usar la base de datos de R y configurar el username131415import pyreadr16import os1718#### PREGUNTA 119###% Primero setteamos el directorio2021user = os.getlogin() # Username222324os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab4")2526cps2012_env = pyreadr.read_r("../data/cps2012.Rdata")2728#Tenemos un dicionario del que extraeremos los datos de la llave data2930cps2012_env31cps2012 = cps2012_env[ 'data' ]32dt = cps2012.describe()3334# Creamos la clase3536'''''''''37OLS class38'''''''''3940class OLS_G4:4142def __init__(self, X,Y,W,Z):4344self.X = X45self.Y = Y46self.W = W47self.Z = Z48495051def coeficientes(self):5253self.n = self.X.shape[0] # numero de observaciones, # self.n "Se crea un nuevo atributo"54k = self.X.shape[1]55X1 = np.column_stack((np.ones(self.n ), self.X.to_numpy() )) # DataFrame to numpy56Y1 = self.Y.to_numpy().reshape(self.n ,1) #reshape(-1 ,1)57self.X1 = X158self.Y1 = Y159self.beta = np.linalg.inv(X1.T @ X1) @ ((X1.T) @ Y1 )60self.nk = self.n - k61self.Y_est = self.X1 @ self.beta62636465def estándar(self):6667self.coeficientes()6869y_est = self.X1 @ self.beta70sigma = sum(list( map( lambda x: x**2 , self.Y1 - y_est) )) / self.nk71Var1 = sigma*np.linalg.inv(self.X1.T @ self.X1)72self.Var1=Var173self.sd1 = np.sqrt( np.diag(Var1) )74self.lower_bound1 = self.beta-1.96*self.sd175self.upper_bound1 = self.beta+1.96*self.sd17677def robust(self):7879self.coeficientes()8081y_est = self.X1 @ self.beta82matrix_robust = np.diag(list( map( lambda x: x**2 , self.Y1 - y_est)))83Var2 = np.linalg.inv(self.X1.T @ self.X1) @ self.X1.T @ matrix_robust @ self.X1 @ np.linalg.inv(self.X1.T @ self.X1)84self.Var2=Var285sd2 = np.sqrt( np.diag(Var2) )86self.sd2=sd287lower_bound2 = self.beta-1.96*sd288upper_bound2 = self.beta+1.96*sd28990def R2_RMSE(self):9192self.coeficientes() # run function9394y_est = self.X1 @ self.beta95error = self.Y1 - y_est96self.SCR = np.sum(np.square(error))97SCT = np.sum(np.square(self.Y1 - np.mean(self.Y1)))98self.R2 = 1 - self.SCR/SCT99self.rmse = (self.SCR/self.n)**0.5100101def Table(self,**Kargs):102103self.R2_RMSE()104self.robust105self.estándar()106self.coeficientes()107scr = self.SCR108sigma = scr / self.nk109Var = sigma*np.linalg.inv(self.X1.T @ self.X1)110sd = np.sqrt( np.diag(Var) )111t_est = np.absolute(self.beta/sd)112113if (Kargs['Output'] == "DataFrame"):114115df = pd.DataFrame( {"coeficientes": self.beta.flatten() , "error-estandar" : self.sd1.flatten(), "límite-superior": self.upper_bound1.flatten(), "límite-inferior": self.lower_bound1.flatten() } )116117118elif (Kargs['Output'] == "Diccionario"):119120df = {"R^2": self.R2.flatten() ,"Root-MSE": self.rmse.flatten()}121122123return df124125126127128#flatten(): De multi array a simple array129cps2012.shape130131variance_cols = cps2012.var().to_numpy() # to numpy132133Dataset = cps2012.iloc[ : , np.where( variance_cols != 0 )[0] ]134135136#Definimos los atributos137138X = Dataset.iloc[:,1:3]139140Y = Dataset[['lnw']]141142W=list(cps2012.columns)143144Z=bool145146147148Reg1 = OLS_G4(X,Y,W,Z)149Reg1.X150151152#Obtenemos los betas153154Reg1.coeficientes()155Reg1.beta156157#Obtenemos la matriz de varianza y covarianza158Reg1.estándar()159Reg1.Var1160161#Obtenemos los errores estándar162Reg1.estándar()163Reg1.sd1164165#Obtenemos los intervalos de confianza166Reg1.estándar()167Reg1.upper_bound1168Reg1.lower_bound1169170171#Obtenemos el R2172173Reg1.R2_RMSE()174Reg1.R2175176#Obtenemos el root MSE177178Reg1.R2_RMSE()179Reg1.rmse180181182#Obtenemos los coeficientes estimados, errores estándar e intervalos de confianza en un data frame183184Reg1.Table(Output = "DataFrame")185186187#Obtenemos el R2 y el root-MSE en un diccionario188189Reg1.Table(Output = "Diccionario")190191192193194