Path: blob/main/Trabajo_grupal/WG5/Grupo_4_py.py
2714 views
1###############################################################################2# #3# TAREA 5: Privatización de atributo y método #4# #5###############################################################################67#Empezamos por importar las librerías usadas para el ejercicio del WG489import numpy as np10import pandas as pd11from pandas import DataFrame, Series12import statistics13import inspect1415#Para poder usar la base de datos de R y configurar el username usamos lo siguiente1617import pyreadr18import os1920#%% PREGUNTA 1212223#### Para esta pregunta usaremos la base de la clase creada para el WG 4, pero privatizando los atributos2425#Primero setteamos el directorio2627user = os.getlogin() # Username282930os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab4")3132cps2012_env = pyreadr.read_r("../data/cps2012.Rdata")3334#Tenemos un dicionario del que extraeremos los datos de la llave data3536cps2012_env37cps2012 = cps2012_env[ 'data' ]38dt = cps2012.describe()3940# Creamos la clase4142'''''''''43OLS class44'''''''''4546####Privatizamos el atributo "x" de la clase, usando "__"4748class OLS_G4:495051def __init__(self, X,Y,W,Z):5253self.__X = X54self.Y = Y55self.W = W56self.Z = Z575859def coeficientes(self):6061self.n = self.__X.shape[0] # numero de observaciones, # self.n "Se crea un nuevo atributo"62k = self.__X.shape[1]63X1 = np.column_stack((np.ones(self.n ), self.__X.to_numpy() )) # DataFrame to numpy64Y1 = self.Y.to_numpy().reshape(self.n ,1) #reshape(-1 ,1)65self.X1 = X166self.Y1 = Y167self.beta = np.linalg.inv(X1.T @ X1) @ ((X1.T) @ Y1 )68self.nk = self.n - k69self.Y_est = self.X1 @ self.beta70717273def estándar(self):7475self.coeficientes()7677y_est = self.X1 @ self.beta78sigma = sum(list( map( lambda x: x**2 , self.Y1 - y_est) )) / self.nk79Var1 = sigma*np.linalg.inv(self.X1.T @ self.X1)80self.Var1=Var181self.sd1 = np.sqrt( np.diag(Var1) )82self.lower_bound1 = self.beta-1.96*self.sd183self.upper_bound1 = self.beta+1.96*self.sd18485def robust(self):8687self.coeficientes()8889y_est = self.X1 @ self.beta90matrix_robust = np.diag(list( map( lambda x: x**2 , self.Y1 - y_est)))91Var2 = np.linalg.inv(self.X1.T @ self.X1) @ self.X1.T @ matrix_robust @ self.X1 @ np.linalg.inv(self.X1.T @ self.X1)92self.Var2=Var293sd2 = np.sqrt( np.diag(Var2) )94self.sd2=sd295lower_bound2 = self.beta-1.96*sd296upper_bound2 = self.beta+1.96*sd29798def R2_RMSE(self):99100self.coeficientes() # run function101102y_est = self.X1 @ self.beta103error = self.Y1 - y_est104self.SCR = np.sum(np.square(error))105SCT = np.sum(np.square(self.Y1 - np.mean(self.Y1)))106self.R2 = 1 - self.SCR/SCT107self.rmse = (self.SCR/self.n)**0.5108109110111####Privatizamos el método que da como output un objeto diccionario usando "__" antes del nombre del método112# NOTA: No se uso __slots__ ya que generaba errores con el código y bastó agregar "__" al nombre del método para privatizarlo, lo cual se demuestra en la línea 208113114def __Table(self,**Kargs):115116self.R2_RMSE()117self.robust118self.estándar()119self.coeficientes()120scr = self.SCR121sigma = scr / self.nk122Var = sigma*np.linalg.inv(self.X1.T @ self.X1)123sd = np.sqrt( np.diag(Var) )124t_est = np.absolute(self.beta/sd)125126if (Kargs['Output'] == "DataFrame"):127128df = 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() } )129130131elif (Kargs['Output'] == "Diccionario"):132133df = {"R^2": self.R2.flatten() ,"Root-MSE": self.rmse.flatten()}134135136return df137138139140141#flatten(): De multi array a simple array142cps2012.shape143144variance_cols = cps2012.var().to_numpy() # to numpy145146Dataset = cps2012.iloc[ : , np.where( variance_cols != 0 )[0] ]147148149#Definimos los atributos150151X = Dataset.iloc[:,1:3]152153Y = Dataset[['lnw']]154155W=list(cps2012.columns)156157Z=bool158159160161Reg1 = OLS_G4(X,Y,W,Z)162163#### Al correr la línea de abajo (línea 166), podemos comprobar que el atributo X está privatizado164165Reg1.__X166167168#Obtenemos los betas169170Reg1.coeficientes()171Reg1.beta172173#Obtenemos la matriz de varianza y covarianza174Reg1.estándar()175Reg1.Var1176177#Obtenemos los errores estándar178Reg1.estándar()179Reg1.sd1180181#Obtenemos los intervalos de confianza182Reg1.estándar()183Reg1.upper_bound1184Reg1.lower_bound1185186187#Obtenemos el R2188189Reg1.R2_RMSE()190Reg1.R2191192#Obtenemos el root MSE193194Reg1.R2_RMSE()195Reg1.rmse196197198#Obtenemos los coeficientes estimados, errores estándar e intervalos de confianza en un data frame199200Reg1.__Table(Output = "DataFrame")201202203#Obtenemos el R2 y el root-MSE en un diccionario204205#### Al correr la línea de abajo (línea 208) podemos observar que el método está privatizado206207Reg1.__Table(Output = "Diccionario")208209210211212213214