Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG1/Grupo_6.R
2714 views
1
####EJERCICIO 1
2
3
#Importamos la librer�a numpy
4
import numpy as np
5
6
#Como se utilizar� una funci�n utilizacom def
7
def fdiscontinuous():
8
9
#Creamos el vector, donde queremos entre 0 y 500 observaciones con rango 1
10
x=np.arange(0,500,1)
11
l=len(x)
12
y=l
13
#Creamos i para que el programa itere los valores del vector y asi los evalue segun cada condicion
14
for i in range(l):
15
if (x[i]>0 and x[i]<100):
16
print(y[i]==x[i]**1/2)
17
elif (x[i]>100 and x[i]<300):
18
print(y[i]==x[i]-5)
19
elif (x[i]>300 and x[i]<500):
20
print(y[i]==50)
21
#El vector aleatorio se desarrollar� a continuaci�n, donde se pide 20 observaciones aleatorias
22
vector=np.random.randint(0,500,20)
23
print (vector)
24
for range(vector) in fdiscontinuous():
25
print(range(vector))
26
27
28
29
30
######EJERCICIO 2
31
32
#Creamos lo solicitado (una matriz aleatoria de medidas B[100x50] y un vector con A[100] observaciones)
33
34
A <- matrix(vecA, nrow = 1, ncol = 100, byrow = FALSE)
35
A
36
37
B <- matrix(vecA, nrow = 100, ncol = 50, byrow = FALSE)
38
B
39
40
#Ahora con estas matrices, buscamos encontrar los valores m�ximos y m�nimos de cada
41
42
min = which(A == min(A), arr.ind = TRUE)
43
44
max = which(A == max(A), arr.ind = TRUE)
45
46
#Donde A[min] y A[max] son minimo y m�ximo respectivamente
47
48
#Con esto, podremos elaborar la f�rmula por partes, un numerador y denominador; para lo cual efectuamos las operaciones.
49
50
Numerador = xi - A[max]
51
Denominador = A[max] - A[min]
52
53
#Con esto podremos efectuar el escalar:
54
55
Numerador/denominador
56
57
58
59
####EJERCICIO 3
60
61
#Crear un proceso generador de datos con 5 variables y un tama�o de poblaci�n de 10 mil observaciones.
62
#Crear un Loop que estime los coeficientes de un modelo de regresi�n lineal omitiendo una variable explicativa
63
#del proceso generador de datos. Asimismo, debe hallar el error est�ndar en cada iteraci�n.
64
#Usar los siguientes tama�os de muestra en el Loop n : 10, 50, 80 , 120 , 200, 500,800,100, 5000.
65
#Comente sus resultados. Los resultados deben presentarse en una Dataframe.
66
#El nombre de las columnas ser�n (tama�o de muestra, coeficiente y error est�ndar ).
67
#N�tese que debe construir las columnas del coeficiente y error est�ndar para cada regresor x .
68
69
70
### para cuando el n�mero de observaciones es 10000: n=10000
71
72
#Importamos las librerias necesarias para el programa
73
import random
74
import numpy as np
75
from scipy.stats import t #para t - student
76
import pandas as pd
77
78
#Generamos un proceso generador de datos con 5 variables y un error estandar, que posee 10 000 observaciones
79
x1 = np.random.rand(10000)
80
x2 = np.random.rand(10000)
81
x3 = np.random.rand(10000)
82
x4 = np.random.rand(10000)
83
x5 = np.random.rand(10000)
84
e = np.random.normal(0,1,10000) #El error estandar tiene distribucion normal
85
86
#funcion con las 5 variables y su t�rmino de error
87
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
88
89
#matriz de la funcion Y
90
X = np.column_stack((np.ones(10000),x1,x2,x3,x4,x5))
91
92
#coeficiientes estimados de la matriz X
93
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
94
95
#indexing aleatorios para la matriz X
96
random.sample( range(10000) , 10000 )
97
98
99
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
100
101
if standar and Pvalue and (instrumento is None) and (index is None) :
102
103
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
104
105
y_est = X @ beta
106
n = X.shape[0]
107
k = X.shape[1] - 1
108
nk = n - k
109
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
110
Var = sigma*np.linalg.inv(X.T @ X)
111
sd = np.sqrt( np.diag(Var) )
112
t_est = np.absolute(beta/sd)
113
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
114
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
115
116
117
elif (not instrumento is None) and (not index is None) :
118
119
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
120
121
index = index - 1
122
Z = X
123
Z[:,index] = z
124
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
125
x_est = Z @ beta_x
126
X[:,index] = x_est
127
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
128
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
129
130
return df
131
132
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
133
ols(X,Y)
134
135
136
137
### para cuando el n�mero de observaciones es 10: n=10
138
139
import random
140
import numpy as np
141
from scipy.stats import t #para t - student
142
import pandas as pd
143
144
#se requiere una funcion con 5 variables aleatorias
145
x1 = np.random.rand(10)
146
x2 = np.random.rand(10)
147
x3 = np.random.rand(10)
148
x4 = np.random.rand(10)
149
x5 = np.random.rand(10)
150
e = np.random.normal(0,1,10)
151
152
#funcion con las 5 variables y su t�rmino de error
153
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
154
155
#matriz de la funcion Y
156
X = np.column_stack((np.ones(10),x1,x2,x3,x4,x5))
157
158
#coeficiientes estimados de la matriz X
159
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
160
161
#indexing aleatorios para la matriz X
162
random.sample( range(10) , 10 )
163
164
165
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
166
167
if standar and Pvalue and (instrumento is None) and (index is None) :
168
169
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
170
171
y_est = X @ beta
172
n = X.shape[0]
173
k = X.shape[1] - 1
174
nk = n - k
175
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
176
Var = sigma*np.linalg.inv(X.T @ X)
177
sd = np.sqrt( np.diag(Var) )
178
t_est = np.absolute(beta/sd)
179
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
180
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
181
182
183
elif (not instrumento is None) and (not index is None) :
184
185
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
186
187
index = index - 1
188
Z = X
189
Z[:,index] = z
190
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
191
x_est = Z @ beta_x
192
X[:,index] = x_est
193
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
194
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
195
196
return df
197
198
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
199
ols(X,Y)
200
201
202
203
### para cuando el n�mero de observaciones es 50: n=50
204
205
import random
206
import numpy as np
207
from scipy.stats import t #para t - student
208
import pandas as pd
209
210
#se requiere una funcion con 5 variables aleatorias
211
x1 = np.random.rand(50)
212
x2 = np.random.rand(50)
213
x3 = np.random.rand(50)
214
x4 = np.random.rand(50)
215
x5 = np.random.rand(50)
216
e = np.random.normal(0,1,50)
217
218
#funcion con las 5 variables y su t�rmino de error
219
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
220
221
#matriz de la funcion Y
222
X = np.column_stack((np.ones(50),x1,x2,x3,x4,x5))
223
224
#coeficiientes estimados de la matriz X
225
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
226
227
#indexing aleatorios para la matriz X
228
random.sample( range(50) , 50 )
229
230
231
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
232
233
if standar and Pvalue and (instrumento is None) and (index is None) :
234
235
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
236
237
y_est = X @ beta
238
n = X.shape[0]
239
k = X.shape[1] - 1
240
nk = n - k
241
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
242
Var = sigma*np.linalg.inv(X.T @ X)
243
sd = np.sqrt( np.diag(Var) )
244
t_est = np.absolute(beta/sd)
245
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
246
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
247
248
249
elif (not instrumento is None) and (not index is None) :
250
251
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
252
253
index = index - 1
254
Z = X
255
Z[:,index] = z
256
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
257
x_est = Z @ beta_x
258
X[:,index] = x_est
259
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
260
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
261
262
return df
263
264
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
265
ols(X,Y)
266
267
268
269
### para cuando el n�mero de observaciones es 80: n=80
270
271
import random
272
import numpy as np
273
from scipy.stats import t #para t - student
274
import pandas as pd
275
276
#se requiere una funcion con 5 variables aleatorias
277
x1 = np.random.rand(80)
278
x2 = np.random.rand(80)
279
x3 = np.random.rand(80)
280
x4 = np.random.rand(80)
281
x5 = np.random.rand(80)
282
e = np.random.normal(0,1,80)
283
284
#funcion con las 5 variables y su t�rmino de error
285
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
286
287
#matriz de la funcion Y
288
X = np.column_stack((np.ones(80),x1,x2,x3,x4,x5))
289
290
#coeficiientes estimados de la matriz X
291
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
292
293
#indexing aleatorios para la matriz X
294
random.sample( range(80) , 80 )
295
296
297
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
298
299
if standar and Pvalue and (instrumento is None) and (index is None) :
300
301
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
302
303
y_est = X @ beta
304
n = X.shape[0]
305
k = X.shape[1] - 1
306
nk = n - k
307
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
308
Var = sigma*np.linalg.inv(X.T @ X)
309
sd = np.sqrt( np.diag(Var) )
310
t_est = np.absolute(beta/sd)
311
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
312
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
313
314
315
elif (not instrumento is None) and (not index is None) :
316
317
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
318
319
index = index - 1
320
Z = X
321
Z[:,index] = z
322
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
323
x_est = Z @ beta_x
324
X[:,index] = x_est
325
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
326
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
327
328
return df
329
330
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
331
ols(X,Y)
332
333
334
335
### para cuando el n�mero de observaciones es 120: n=120
336
337
import random
338
import numpy as np
339
from scipy.stats import t #para t - student
340
import pandas as pd
341
342
#se requiere una funcion con 5 variables aleatorias
343
x1 = np.random.rand(120)
344
x2 = np.random.rand(120)
345
x3 = np.random.rand(120)
346
x4 = np.random.rand(120)
347
x5 = np.random.rand(120)
348
e = np.random.normal(0,1,120)
349
350
#funcion con las 5 variables y su t�rmino de error
351
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
352
353
#matriz de la funcion Y
354
X = np.column_stack((np.ones(120),x1,x2,x3,x4,x5))
355
356
#coeficiientes estimados de la matriz X
357
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
358
359
#indexing aleatorios para la matriz X
360
random.sample( range(120) , 120 )
361
362
363
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
364
365
if standar and Pvalue and (instrumento is None) and (index is None) :
366
367
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
368
369
y_est = X @ beta
370
n = X.shape[0]
371
k = X.shape[1] - 1
372
nk = n - k
373
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
374
Var = sigma*np.linalg.inv(X.T @ X)
375
sd = np.sqrt( np.diag(Var) )
376
t_est = np.absolute(beta/sd)
377
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
378
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
379
380
381
elif (not instrumento is None) and (not index is None) :
382
383
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
384
385
index = index - 1
386
Z = X
387
Z[:,index] = z
388
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
389
x_est = Z @ beta_x
390
X[:,index] = x_est
391
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
392
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
393
394
return df
395
396
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
397
ols(X,Y)
398
399
400
401
### para cuando el n�mero de observaciones es 200: n=200
402
403
import random
404
import numpy as np
405
from scipy.stats import t #para t - student
406
import pandas as pd
407
408
#se requiere una funcion con 5 variables aleatorias
409
x1 = np.random.rand(200)
410
x2 = np.random.rand(200)
411
x3 = np.random.rand(200)
412
x4 = np.random.rand(200)
413
x5 = np.random.rand(200)
414
e = np.random.normal(0,1,200)
415
416
#funcion con las 5 variables y su t�rmino de error
417
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
418
419
#matriz de la funcion Y
420
X = np.column_stack((np.ones(200),x1,x2,x3,x4,x5))
421
422
#coeficiientes estimados de la matriz X
423
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
424
425
#indexing aleatorios para la matriz X
426
random.sample( range(200) , 200 )
427
428
429
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
430
431
if standar and Pvalue and (instrumento is None) and (index is None) :
432
433
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
434
435
y_est = X @ beta
436
n = X.shape[0]
437
k = X.shape[1] - 1
438
nk = n - k
439
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
440
Var = sigma*np.linalg.inv(X.T @ X)
441
sd = np.sqrt( np.diag(Var) )
442
t_est = np.absolute(beta/sd)
443
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
444
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
445
446
447
elif (not instrumento is None) and (not index is None) :
448
449
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
450
451
index = index - 1
452
Z = X
453
Z[:,index] = z
454
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
455
x_est = Z @ beta_x
456
X[:,index] = x_est
457
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
458
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
459
460
return df
461
462
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
463
ols(X,Y)
464
465
466
467
### para cuando el n�mero de observaciones es 500: n=500
468
469
import random
470
import numpy as np
471
from scipy.stats import t #para t - student
472
import pandas as pd
473
474
#se requiere una funcion con 5 variables aleatorias
475
x1 = np.random.rand(500)
476
x2 = np.random.rand(500)
477
x3 = np.random.rand(500)
478
x4 = np.random.rand(500)
479
x5 = np.random.rand(500)
480
e = np.random.normal(0,1,500)
481
482
#funcion con las 5 variables y su t�rmino de error
483
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
484
485
#matriz de la funcion Y
486
X = np.column_stack((np.ones(500),x1,x2,x3,x4,x5))
487
488
#coeficiientes estimados de la matriz X
489
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
490
491
#indexing aleatorios para la matriz X
492
random.sample( range(500) , 500 )
493
494
495
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
496
497
if standar and Pvalue and (instrumento is None) and (index is None) :
498
499
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
500
501
y_est = X @ beta
502
n = X.shape[0]
503
k = X.shape[1] - 1
504
nk = n - k
505
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
506
Var = sigma*np.linalg.inv(X.T @ X)
507
sd = np.sqrt( np.diag(Var) )
508
t_est = np.absolute(beta/sd)
509
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
510
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
511
512
513
elif (not instrumento is None) and (not index is None) :
514
515
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
516
517
index = index - 1
518
Z = X
519
Z[:,index] = z
520
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
521
x_est = Z @ beta_x
522
X[:,index] = x_est
523
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
524
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
525
526
return df
527
528
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
529
ols(X,Y)
530
531
532
533
### para cuando el n�mero de observaciones es 800: n=800
534
535
import random
536
import numpy as np
537
from scipy.stats import t #para t - student
538
import pandas as pd
539
540
#se requiere una funcion con 5 variables aleatorias
541
x1 = np.random.rand(800)
542
x2 = np.random.rand(800)
543
x3 = np.random.rand(800)
544
x4 = np.random.rand(800)
545
x5 = np.random.rand(800)
546
e = np.random.normal(0,1,800)
547
548
#funcion con las 5 variables y su t�rmino de error
549
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
550
551
#matriz de la funcion Y
552
X = np.column_stack((np.ones(800),x1,x2,x3,x4,x5))
553
554
#coeficiientes estimados de la matriz X
555
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
556
557
#indexing aleatorios para la matriz X
558
random.sample( range(800) , 800 )
559
560
561
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
562
563
if standar and Pvalue and (instrumento is None) and (index is None) :
564
565
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
566
567
y_est = X @ beta
568
n = X.shape[0]
569
k = X.shape[1] - 1
570
nk = n - k
571
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
572
Var = sigma*np.linalg.inv(X.T @ X)
573
sd = np.sqrt( np.diag(Var) )
574
t_est = np.absolute(beta/sd)
575
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
576
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
577
578
579
elif (not instrumento is None) and (not index is None) :
580
581
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
582
583
index = index - 1
584
Z = X
585
Z[:,index] = z
586
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
587
x_est = Z @ beta_x
588
X[:,index] = x_est
589
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
590
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
591
592
return df
593
594
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
595
ols(X,Y)
596
597
598
599
### para cuando el n�mero de observaciones es 100: n=100
600
601
import random
602
import numpy as np
603
from scipy.stats import t #para t - student
604
import pandas as pd
605
606
#se requiere una funcion con 5 variables aleatorias
607
x1 = np.random.rand(100)
608
x2 = np.random.rand(100)
609
x3 = np.random.rand(100)
610
x4 = np.random.rand(100)
611
x5 = np.random.rand(100)
612
e = np.random.normal(0,1,100)
613
614
#funcion con las 5 variables y su t�rmino de error
615
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
616
617
#matriz de la funcion Y
618
X = np.column_stack((np.ones(100),x1,x2,x3,x4,x5))
619
620
#coeficiientes estimados de la matriz X
621
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
622
623
#indexing aleatorios para la matriz X
624
random.sample( range(100) , 100 )
625
626
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
627
628
if standar and Pvalue and (instrumento is None) and (index is None) :
629
630
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
631
632
y_est = X @ beta
633
n = X.shape[0]
634
k = X.shape[1] - 1
635
nk = n - k
636
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
637
Var = sigma*np.linalg.inv(X.T @ X)
638
sd = np.sqrt( np.diag(Var) )
639
t_est = np.absolute(beta/sd)
640
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
641
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
642
643
644
elif (not instrumento is None) and (not index is None) :
645
646
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
647
648
index = index - 1
649
Z = X
650
Z[:,index] = z
651
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
652
x_est = Z @ beta_x
653
X[:,index] = x_est
654
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
655
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
656
657
return df
658
659
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
660
ols(X,Y)
661
662
663
664
### para cuando el n�mero de observaciones es 5000: n=5000
665
666
import random
667
import numpy as np
668
from scipy.stats import t #para t - student
669
import pandas as pd
670
671
#se requiere una funcion con 5 variables aleatorias
672
x1 = np.random.rand(5000)
673
x2 = np.random.rand(5000)
674
x3 = np.random.rand(5000)
675
x4 = np.random.rand(5000)
676
x5 = np.random.rand(5000)
677
e = np.random.normal(0,1,5000)
678
679
#funcion con las 5 variables y su t�rmino de error
680
Y = 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 3.2*x5 + e
681
682
#matriz de la funcion Y
683
X = np.column_stack((np.ones(5000),x1,x2,x3,x4,x5))
684
685
#coeficiientes estimados de la matriz X
686
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
687
688
#indexing aleatorios para la matriz X
689
random.sample( range(5000) , 5000 )
690
691
692
def ols(M,Y, standar = True, Pvalue = True , instrumento = None, index = None):
693
694
if standar and Pvalue and (instrumento is None) and (index is None) :
695
696
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
697
698
y_est = X @ beta
699
n = X.shape[0]
700
k = X.shape[1] - 1
701
nk = n - k
702
sigma = sum(list( map( lambda x: x**2 , Y - y_est) )) / nk
703
Var = sigma*np.linalg.inv(X.T @ X)
704
sd = np.sqrt( np.diag(Var) )
705
t_est = np.absolute(beta/sd)
706
pvalue = (1 - t.cdf(t_est, df=nk) ) * 2
707
df = pd.DataFrame( {"tama�o_de_muestra": n , "coeficiente": beta , "error_est�ndar" : sd} )
708
709
710
elif (not instrumento is None) and (not index is None) :
711
712
beta = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
713
714
index = index - 1
715
Z = X
716
Z[:,index] = z
717
beta_x = np.linalg.inv(Z.T @ Z) @ ((Z.T) @ X[:,index] )
718
x_est = Z @ beta_x
719
X[:,index] = x_est
720
beta_iv = np.linalg.inv(X.T @ X) @ ((X.T) @ Y )
721
df = pd.DataFrame( {"coeficiente": beta , "coeficiente_IV" : beta_iv})
722
723
return df
724
725
#para mostrar la dataframe con el tama�o de muestra, coeficientes y el error est�ndar
726
ols(X,Y)
727
728
729
730
###### Fin del ejrecicio 3 ###### Fin del ejrecicio 3 ######
731
732
733
734
735
736
737
######EJERCICIO 4
738
739
import numpy as np
740
import match
741
import pandas
742
743
random.seed(175)
744
#Creando un proceso generador de datos con 8 variables (intercepto y 7 explicativas)
745
#Necesitamos 800 observaciones, por ello generaremos 800 n�meros enteros.
746
747
#Entonces se tiene a continuaci�n las siguientes 7 variables explicativas con distribuci�n normal
748
X1 = np.random.rand(800)
749
X2 = np.random.rand(800)
750
X3 = np.random.rand(800)
751
X4 = np.random.rand(800)
752
X5 = np.random.rand(800)
753
X6 = np.random.rand(800)
754
X7 = np.random.rand(800)
755
756
#Seguido a ello, la creaci�n del error bajo distribucion normal
757
u = np.random.normal(0, 1, 800)
758
759
#El modelo a estimar que tendremos es Y = b0 + b1*X1 + b2*X2 + b3*X3 + b4*X4 + b5*X5 + b6*X6 + b7*X7 +u
760
Y = 1 + 0.6*X1 + 0.5*X2 + 1.2*X3 + 2.5*X4 + 0.4*X5 + 0.8*X6 + 1.6*X7 +u
761
#Ahora, se juntar�n todos los vectores generados anteriormente en una matriz
762
763
matriz = np.column_stack((np.ones(800), X1, X2, X3, X4, X5, X6, X7))
764
print (matriz)
765
766
#Ahora, podemos hallar los betas o tambi�n llamados coeficientes estimados, mediante una transposicion de la matriz
767
betas = np.linalg.inv(matriz.T @ matriz) @ ((matriz.T)@ Y)
768
print (betas)
769
770
#Ahora ya se tiene un vector que contiene a los betas o coeficientes
771
#Entonces, a continuaci�n se estimar� los errores est�ndar de cada beta
772
773
def statistics.stdev(betas)
774
betas = betas**1/2
775
print (betas)
776