Path: blob/main/Trabajo_grupal/WG4/Grupo_6_jupyter.py
2714 views
#!/usr/bin/env python1# coding: utf-823# In[4]:456import numpy as np7import pandas as pd8import scipy.stats import t9import pyreadr10import os111213# In[2]:141516class REGREE_OLS ( object ) :17# también podemos omitir object. pues es lo mismo18def __init__( self, X:pd.Dataframe, y:pd.Series, lista, RobustStandardError = True):1920# INDICAMOS QUE "X" SEA UN DATA FRAME Y "Y" UNA LISTA.2122## CON LO CUAL, PROPONEMOS UN CONDICIONAL PARA AMBOS// mensaje de error porsiaca #2324if not isinstance( X, pd.Dataframe ) :25raise TypeError ( "X debería ser un pd.Dataframe.")2627if not isinstance( y, pd.Series ) :28raise TypeError("y debería ser una pd.Series.")2930# PROPONEMOS LOS ATRIBUTOS CORRESPONDIENTES31try:32self.X = X.loc[:, lista]33except:34self.X = X.iloc[:, lista]35self.y = y3637self.RobustStandardError = RobustStandardError3839self.X[ 'intercepto' ] = 14041cols = self.X.columns.tolist()4243new_cols_orders = [cols[ -1 ]] + cols[ 0:-1]4445# CONVERTIMOS LOS NOMBRES A COLUMNAS4647# FILTRAMOS LOS NOMBRES4849self.X = self.X.loc[ :, new_cols_orders ]5051self.X_np = self.X.values5253self.y_np = y.values.reshape( -1 , 1 )5455self.columns = self.X.columns.tolist()565758# In[5]:596061#### METODO 1 -> Estimar los coeficientes de la regresión ####6263def REGRE_BETA_OLS( self ):6465X_np = self.X_np66y_np = self.y_np6768# beta_ols6970beta_ols = np.Linalg.inv( X_np.T @ X_np ) @ ( X_np.T @ y_np )7172#OUTPUT7374index_names = self.columns75beta_OLS_output = pd.DetaFrame( beta_ols, index = index_names, columns = [ 'Coef.'] )76self.beta_OLS - beta_OLS_output7778return beta_OLS_output798081# In[6]:82838485#### METODO 2 -> Matriz de varianza y covarianza estándar ####8687def STDERROR_VAR_M( self ):8889# VARIANZA:9091# BUSCAMOS ESTIMAR EL ERROR9293self.beta_OLS_Reg()9495# SHORTCUT PARA LOS X_NP96X_np = self.X_np97y_np = self.y_np9899# BETA_OLS100beta_OLS = self.beta_OLS.values.reshape( - 1, 1 )101102X_np = self.X_np103y_np = self.y_yp104105e = y_np - ( X_np @ beta_OLS )106# PARA EL ERROR DE LA VARIANZA107N = X_np.shape [ 0 ]108total_parameters = X_np.shape [1 ]109error_var = ( (e.T @ e) [0]) / (N - total_parameters)110111# PARA LA VARIANZA112var_OLS = error_var * np.linalg.inv( X_np.T @ X_np )113114# OUTPUT DE reg_var_OLS(setf): ATRIBUTO DE VAR115index_names = self. columns116var_OLS_output = pd.Dataframe( var_OLS, index = index_names, columns = index_names )117self.var_OLS = var_OLS_output118119#ERROR ESTANDAR:120121# VARIANZA122beta_OLS = self.beta_OLS.values.reshape( -1, 1 )123var_OLS = self.var_OLS.values124# ERROR ESTANDAR125beta_stderror = np.sqrt(np.diag( var_OLS ) )126table_data0 = { "Std.Err." : beta_stderror.ravel()}127128index_names0 = self.columns129130self.beta_se = pd.DataFrame ( table_data0, index = index_names0 )131132# CONFIANZA133134up_bd = beta_OLS.ravel() + 1.96*beta_stderror135136lw_bd = beta_OLS.ravel() - 1.96*beta_stderror137138table_data1 = {"[0.025" : lw_bd.ravel(),139"0.975]" : up_bd.ravel() }140#SEGUN LO PROPUESTO141142# NOMBRE INDEX.143144index_names1 = self.columns145146# PANDA FRAME.147148self.confiden_interval = pd.Dataframe( table_data1, index = index_names1 )149150151# In[7]:152153154155#### MÉTODO 3 -> Un método que halle la matriz de varianza y covarianza robusta... ####156157def M_ROBUST_COV(self):158# ESTIMACIÓN DEL VECTOR DE COEFICIENTES.159160self.beta_OLS_Reg()161# usaré atributos pero con un nombre más simple162X_np = self.X_np163y_np = self.y_np164165#VARIANZA ROBUSTA:166167# matriz propuesta de White en muestras grandes168# V = np.zeros ((X_np.shape[1]. X_np. shape(1)))169170171self.y_est = X_np @ self.beta_OLS172173matrix_robust = np.diag(list( map( lambda x: x**2 , y_np - self.y_est)))174175self.robust_var = np.linalg.inv(X_np.T @ X) @ X_np.T @ matrix_robust @ X_np @ np.linalg.inv(X_np.T @ X_np)176177178# In[8]:179180181182#### METODO 4183184# Se definirá un método que halle el R2 y MSE (mean square error)185186def R2(self):187188self.coeficientes()189y_est = self.X1 @ self.beta190error = self.Y1 - y_est191self.SCR = np.sum(np.square(error))192SCT = np.sum(np.square(self.Y1 - np.mean(self.Y1)))193R2 = 1 - self.SCR/SCT194195return R2196197#llamamos al paquete que nos permitirá encontrar el root MSE198from sklearn.metrics import mean_squared_error199200#definimos el método201def rootMSE(true,predicted):202203rootMSE = mean_squared_error(true,predicted, squared=False)204205return rootMSE206207208# In[15]:209210211#### METODO 5212213214# In[14]:215216217#VAMOS A CARGAR LA BASE DE DATOS, CON LO CUAL UTILIZAREMOS USER ///218#CON ESTO, CORRE SIN NECESIDAD DE CAMBIAR EL NOMBRE DE USUARIO :D219220user = os.getlogin()221os.chdir("C:\Users\User\Documents\GitHub\1ECO35_2022_2\Lab4")222223cps2012_UNO = pyreadr.read_r("../data/cps2012.Rdata")224cps2012 = cps2012_UNO['data']225dt = cps2012.describe226227#ES NECESARIO FILTRAR LAS VARIANZAS DISTINTAS A 0228variance_cols = cps2012.var().to_numpy()229dataset = cps2012.iloc[:, np.where(variance_cols !=0 )[0]]230## aca poner un dataset específico desde el geeneral, podría ser con iloc y squeeze()231232233# In[ ]:234235236237238239240