Path: blob/main/Trabajo_grupal/WG4/Grupo10_spyder.py
2714 views
# -*- coding: utf-8 -*-1"""2Created on Sat Sep 24 10:04:08 202234@author: User5"""6import numpy as np7import pandas as pd8from pandas import DataFrame, Series9import statistics10import inspect11import pyreadr # Load R dataset12import os # for usernanme y set direcotrio13os.chdir(f"C:/Users/user/Documentos/Git_Hub/1ECO35_2022_2/Lab4")14cps2012_env = pyreadr.read_r("../data/cps2012.Rdata")15from sklearn import linear_model16print(dir(linear_model))171819class OLS(object):2021def __init__(self, X,Y, robust_sd = False):2223self.X = X24self.Y = Dataset.iloc[:,1]25self.W = Dataset.loc[:,'exp1':'exp4']26robust_sd = False27self.robust_sd = robust_sd2829if robust_sd==False:30def Algebralineal(self):3132self.n = self.X.shape[0]33k = self.X.shape[1]34X2 = np.column_stack((np.ones(self.n ), self.W.to_numpy() ))35Y1 = self.Y.to_numpy().reshape(self.n ,1)36self.X2 = X237self.Y1 = Y138self.nk = self.n - k3940def Coefreg(self):4142self.Algebralineal()4344self.beta = np.linalg.inv(self.X2.T @ self.X2) @ ((self.X2.T) @ self.Y1 )454647def R2yMSE(self):4849self.Algebralineal() # run function50self.Coefreg()5152y_est = self.X2 @ self.beta53self.y_est = y_est54error = self.Y1 - y_est55self.SCR = np.sum(np.square(error))56SCT = np.sum(np.square(self.Y1 - np.mean(self.Y1)))5758R2 = 1 - self.SCR/SCT59rmse = (self.SCR/self.n)**0.56061return R26263def estandar(self):6465self.Algebralineal()66self.Coefreg()67self.R2yMSE()6869scr = self.SCR70sigma = scr / self.nk71Var = sigma*np.linalg.inv(self.X2.T @ self.X2)72self.var = Var73sd = np.sqrt( np.diag(Var) )74t_est = np.absolute(self.beta/sd)75pvalue = (1 - t.cdf(t_est, df=self.nk) ) * 276lower_bound = self.beta-1.96*sd77upper_bound = self.beta+1.96*sd787980def robusta(self):8182self.Algebralineal()83self.Coefreg()84self.R2yMSE()85self.estandar()8687error = self.Y1 - self.y_est88matrix_robust = np.diag(np.square(error))89Var = np.linalg.inv(self.X2.T @ self.X2) @ self.X2.T @ matrix_robust @ self.X2 @ np.linalg.inv(self.X2.T @ self.X2)90sd = np.sqrt( np.diag(Var) )91lower_bound = self.beta-1.96*sd92upper_bound = self.beta+1.96*sd9394def Table(self, **Kargs):9596self.Algebralineal()97self.Coefreg()98self.R2yMSE()99self.estandar()100101scr = self.SCR102sigma = scr / self.nk103Var = sigma*np.linalg.inv(self.X2.T @ self.X2)104sd = np.sqrt( np.diag(Var) )105lower_bound = self.beta-1.96*sd106upper_bound = self.beta+1.96*sd107108if (Kargs['Output'] == "DataFrame"):109110df = pd.DataFrame( {"OLS": self.beta.flatten() , "standar_error" : sd.flatten()} )111112113elif (Kargs['Output'] == "Diccionario"):114115df ={"OLS": self.beta.flatten() , "standar_error" : sd.flatten() ,116"variance" : self.var.flatten() , "lower_bound" : lower_bound.flatten() , "upper_bound" : upper_bound.flatten() }117118119return df120121Dataset = cps2012.iloc[ : , np.where( variance_cols != 0 )[0] ]122123Reg1 = OLS(X,Y)124Reg1.Algebralineal()125Reg1.Coefreg()126Reg1.R2yMSE()127Reg1.beta128Reg1.estandar()129Reg1.robusta()130Reg1.Table(Output = "DataFrame")131Reg1.Table(Output = "Diccionario")['OLS']132Reg1.Table(Output = "Diccionario")['standar_error']133Reg1.Table(Output = "Diccionario")['variance']134Reg1.Table(Output = "Diccionario")['lower_bound']135Reg1.Table(Output = "Diccionario")['upper_bound']136137138139140