Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG4/Grupo_4_py.py
2714 views
1
# -*- coding: utf-8 -*-
2
3
4
# TAREA 4
5
# WG4
6
7
import numpy as np
8
import pandas as pd
9
from pandas import DataFrame, Series
10
import statistics
11
import inspect
12
13
#para poder usar la base de datos de R y configurar el username
14
15
16
import pyreadr
17
import os
18
19
#### PREGUNTA 1
20
###% Primero setteamos el directorio
21
22
user = os.getlogin() # Username
23
24
25
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab4")
26
27
cps2012_env = pyreadr.read_r("../data/cps2012.Rdata")
28
29
#Tenemos un dicionario del que extraeremos los datos de la llave data
30
31
cps2012_env
32
cps2012 = cps2012_env[ 'data' ]
33
dt = cps2012.describe()
34
35
# Creamos la clase
36
37
'''''''''
38
OLS class
39
'''''''''
40
41
class OLS_G4:
42
43
def __init__(self, X,Y,W,Z):
44
45
self.X = X
46
self.Y = Y
47
self.W = W
48
self.Z = Z
49
50
51
52
def coeficientes(self):
53
54
self.n = self.X.shape[0] # numero de observaciones, # self.n "Se crea un nuevo atributo"
55
k = self.X.shape[1]
56
X1 = np.column_stack((np.ones(self.n ), self.X.to_numpy() )) # DataFrame to numpy
57
Y1 = self.Y.to_numpy().reshape(self.n ,1) #reshape(-1 ,1)
58
self.X1 = X1
59
self.Y1 = Y1
60
self.beta = np.linalg.inv(X1.T @ X1) @ ((X1.T) @ Y1 )
61
self.nk = self.n - k
62
self.Y_est = self.X1 @ self.beta
63
64
65
66
def estándar(self):
67
68
self.coeficientes()
69
70
y_est = self.X1 @ self.beta
71
sigma = sum(list( map( lambda x: x**2 , self.Y1 - y_est) )) / self.nk
72
Var1 = sigma*np.linalg.inv(self.X1.T @ self.X1)
73
self.Var1=Var1
74
self.sd1 = np.sqrt( np.diag(Var1) )
75
self.lower_bound1 = self.beta-1.96*self.sd1
76
self.upper_bound1 = self.beta+1.96*self.sd1
77
78
def robust(self):
79
80
self.coeficientes()
81
82
y_est = self.X1 @ self.beta
83
matrix_robust = np.diag(list( map( lambda x: x**2 , self.Y1 - y_est)))
84
Var2 = np.linalg.inv(self.X1.T @ self.X1) @ self.X1.T @ matrix_robust @ self.X1 @ np.linalg.inv(self.X1.T @ self.X1)
85
self.Var2=Var2
86
sd2 = np.sqrt( np.diag(Var2) )
87
self.sd2=sd2
88
lower_bound2 = self.beta-1.96*sd2
89
upper_bound2 = self.beta+1.96*sd2
90
91
def R2_RMSE(self):
92
93
self.coeficientes() # run function
94
95
y_est = self.X1 @ self.beta
96
error = self.Y1 - y_est
97
self.SCR = np.sum(np.square(error))
98
SCT = np.sum(np.square(self.Y1 - np.mean(self.Y1)))
99
self.R2 = 1 - self.SCR/SCT
100
self.rmse = (self.SCR/self.n)**0.5
101
102
def Table(self,**Kargs):
103
104
self.R2_RMSE()
105
self.robust
106
self.estándar()
107
self.coeficientes()
108
scr = self.SCR
109
sigma = scr / self.nk
110
Var = sigma*np.linalg.inv(self.X1.T @ self.X1)
111
sd = np.sqrt( np.diag(Var) )
112
t_est = np.absolute(self.beta/sd)
113
114
if (Kargs['Output'] == "DataFrame"):
115
116
df = 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() } )
117
118
119
elif (Kargs['Output'] == "Diccionario"):
120
121
df = {"R^2": self.R2.flatten() ,"Root-MSE": self.rmse.flatten()}
122
123
124
return df
125
126
127
128
129
#flatten(): De multi array a simple array
130
cps2012.shape
131
132
variance_cols = cps2012.var().to_numpy() # to numpy
133
134
Dataset = cps2012.iloc[ : , np.where( variance_cols != 0 )[0] ]
135
136
137
#Definimos los atributos
138
139
X = Dataset.iloc[:,1:3]
140
141
Y = Dataset[['lnw']]
142
143
W=list(cps2012.columns)
144
145
Z=bool
146
147
148
149
Reg1 = OLS_G4(X,Y,W,Z)
150
Reg1.X
151
152
153
#Obtenemos los betas
154
155
Reg1.coeficientes()
156
Reg1.beta
157
158
#Obtenemos la matriz de varianza y covarianza
159
Reg1.estándar()
160
Reg1.Var1
161
162
#Obtenemos los errores estándar
163
Reg1.estándar()
164
Reg1.sd1
165
166
#Obtenemos los intervalos de confianza
167
Reg1.estándar()
168
Reg1.upper_bound1
169
Reg1.lower_bound1
170
171
172
#Obtenemos el R2
173
174
Reg1.R2_RMSE()
175
Reg1.R2
176
177
#Obtenemos el root MSE
178
179
Reg1.R2_RMSE()
180
Reg1.rmse
181
182
183
#Obtenemos los coeficientes estimados, errores estándar e intervalos de confianza en un data frame
184
185
Reg1.Table(Output = "DataFrame")
186
187
188
#Obtenemos el R2 y el root-MSE en un diccionario
189
190
Reg1.Table(Output = "Diccionario")
191
192
193
194