Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG1/Grupo2_Python.py
2714 views
1
2
"""
3
Ejercicio 1
4
5
"""
6
7
import random
8
import numpy as np
9
10
11
12
# Definimos las 3 funciones del ejercicio
13
def f1(x):
14
return x**(0.5)
15
16
def f2(x):
17
return x-5
18
19
def f3(x):
20
return 50
21
22
23
# Se crea vector aleatorio con 20 números del 0 a 500
24
a= np.random.randint(0,500,20)
25
26
#Resolvemos las ecuaciones con el vector poniendo condicionales dado el rango
27
28
for i in range(0,20):
29
if a[i] <=100:
30
print(" función 1:")
31
print(f1(i))
32
33
if a[i]<=300:
34
print(" función 2:")
35
print(f2(i))
36
37
else:
38
print(" función 3:")
39
print(f3(i))
40
41
"""
42
Ejercicio 2
43
44
"""
45
46
#fijar semilla
47
np.random.seed(123)
48
49
# Crear vector con 100 observaciones
50
v1 = np.random.rand(100)
51
52
#Para crear mi matriz voy a empezar con un vector base
53
x1 = np.random.rand(100)
54
# Crear matriz en base a ese vector que sea 100x50
55
X1 = x1.reshape(-1, 1) ** np.arange(0, 50)
56
# Vector
57
print(x1)
58
# Matriz
59
print(X1)
60
print(X1.shape) # nos dice cuantas filas y columnas tiene la matriz
61
62
# Crear función para reescalar matriz
63
64
def calculator_scalar(x, M, n):
65
if not isinstance( x , np.ndarray ) :
66
raise TypeError( "x must be a n-array")
67
68
if not isinstance( M , np.ndarray ) :
69
raise TypeError( "M must be a n-array")
70
71
y1 = x[n]
72
z1 = M[:, n]
73
m1 = min(z1)
74
m2 = max(z1)
75
76
result= y1 - m1/ m2 - m1
77
78
return result
79
80
#Hallo mi resultado con el vector y matriz creada,
81
#En este caso, pondre de orden 3(elemento 3 del vector y columna 3 de la matriz)
82
print(calculator_scalar(v1, X1, 3))
83
# Por ejemplo, result= 0.7903050938324261
84
85
#En esta prueba, me debe salir el error y "x must be a n-array"
86
print(calculator_scalar("Hola", X1, 3))
87
88
89
"""
90
Ejercicio 3
91
92
"""
93
#Primero descargamos las librerías
94
import numpy as np
95
import pandas as pd
96
import random
97
import pylab as pl
98
import matplotlib.pyplot as plt
99
from sklearn import linear_model
100
from scipy.stats import t # t - student
101
102
103
#Luego exploramos la estructura del código
104
random.seed(175)
105
106
x1 = np.random.rand(10000) # uniform distribution [0,1] np.random.rand(x) creates an array of (x) random numbers
107
x2 = np.random.rand(10000)
108
x3 = np.random.rand(10000)
109
x4 = np.random.rand(10000)
110
x5 = np.random.rand(10000)
111
112
113
e = np.random.normal(0,1,10000) # normal distribution mean = 0 and sd = 1
114
z = np.random.rand(10000)
115
116
Y = 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + e #omitimos una variable del GDP
117
118
X = np.column_stack((np.ones(10000),x1,x2,x3,x4))
119
120
def ols(M,Y, standar = True, Pvalue = True):
121
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y ) ## estimación de beta
122
y_est = X @ beta ## Y estimado
123
n = X.shape[0]
124
i=100000
125
k = X.shape[1] - 1
126
nk = n - k ## grados de libertad
127
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
128
Var = sigma*np.linalg.inv(X.T @ X)
129
sd = np.sqrt( np.diag(Var) ) ## raíz cuadrado a los datos de la diagonal principal de Var
130
df = pd.DataFrame( {"Tamaño de muestra":i,"Coeficiente": beta , "Error estándar" : sd})
131
return df
132
plt.scatter(x1, Y, color='blue')
133
plt.xlabel("Engine size")
134
plt.ylabel("Emission")
135
plt.show()
136
137
x11 = np.random.choice(x1, size=10000)
138
x22 = np.random.choice(x2, size=10000)
139
x33 = np.random.choice(x3, size=10000)
140
x44 = np.random.choice(x3, size=10000)
141
x55 = np.random.choice(x5, size=10000)
142
143
x11 #x1 es un array de valores aleatorios distribuídos uniformemente
144
145
np.random.choice(x11, size=10) #de esta forma podemos extraer una muestra de 10 observaciones dentro del array X1
146
147
#La tarea es crear un Loop con los siguientes valores (como ejemplo veamos):
148
for n in [10, 50, 80, 120, 200, 500, 800, 1000, 5000]:
149
x = n **2
150
print(x)
151
152
#lo que buscamos es un loop que tome valores dentro del rango propuesto y arme muestras aleatorias del mismo size de cada valor
153
for n in [10, 50, 80, 120, 200, 500, 800, 1000, 5000]:
154
x11 = np.random.choice(x1, size=n)
155
x22 = np.random.choice(x2, size=n)
156
x33 = np.random.choice(x3, size=n)
157
x44 = np.random.choice(x3, size=n)
158
x55 = np.random.choice(x5, size=n)
159
print("Número de observaciones:",x11.shape,x22.shape,x33.shape,x44.shape,x55.shape)
160
#Aquí observamos que se generan arreglos del tamano buscado
161
162
163
164
165
#Será necesario contar con un valor estimado (Y) y, por ende, con un conjunto de datos por cada tamano de muestra
166
for i in [10, 50, 80, 120, 200, 500, 800, 1000, 5000]:
167
x11 = np.random.choice(x1, size=i)
168
x22 = np.random.choice(x2, size=i)
169
x33 = np.random.choice(x3, size=i)
170
x44 = np.random.choice(x3, size=i)
171
x55 = np.random.choice(x5, size=i)
172
e = np.random.normal(0,1,i)
173
Y = 1 + 0.5*x11 + 1.1*x22 + 0.4*x33 + 1.2*x44 + e #omitimos una variable del GDP
174
X = np.column_stack((np.ones(i),x11,x22,x33,x44))
175
print(Y)
176
177
178
179
random.seed(109)
180
181
x1 = np.random.rand(10000) # uniform distribution [0,1] np.random.rand(x) creates an array of (x) random numbers
182
x2 = np.random.rand(10000)
183
x3 = np.random.rand(10000)
184
x4 = np.random.rand(10000)
185
x5 = np.random.rand(10000)
186
187
188
e = np.random.normal(0,1,10000) # normal distribution mean = 0 and sd = 1
189
190
191
Y = 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + e #omitimos una variable del GDP
192
193
X = np.column_stack((np.ones(10000),x1,x2,x3,x4))
194
195
for i in [10, 50, 80, 120, 200, 500, 800, 1000, 5000]:
196
x11 = np.random.choice(x1, size=i)
197
x22 = np.random.choice(x2, size=i)
198
x33 = np.random.choice(x3, size=i)
199
x44 = np.random.choice(x3, size=i)
200
x55 = np.random.choice(x5, size=i)
201
e = np.random.normal(0,1,i)
202
Y = 1 + 0.5*x11 + 1.1*x22 + 0.4*x33 + 1.2*x44 + e #omitimos una variable del GDP
203
X = np.column_stack((np.ones(i),x11,x22,x33,x44))
204
results=ols(X,Y)
205
print(results)
206
207
def ols(M,Y, standar = True, Pvalue = True):
208
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y ) ## estimación de beta
209
y_est = X @ beta ## Y estimado
210
n = X.shape[0]
211
k = X.shape[1] - 1
212
nk = n - k ## grados de libertad
213
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
214
Var = sigma*np.linalg.inv(X.T @ X)
215
sd = np.sqrt( np.diag(Var) ) ## raíz cuadrado a los datos de la diagonal principal de Var
216
df = pd.DataFrame( {"Tamaño de muestra":i,"Coeficiente": beta , "Error estándar" : sd})
217
return df
218
219
220
221
222
223
224
225