Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG1/Grupo_4_r.R
2714 views
1
###############################################################################
2
# #
3
# TAREA 1 - GRUPO 4 #
4
# #
5
###############################################################################
6
7
8
9
10
#------------------------------------------------------------------------------#
11
# #
12
# PREGUNTA 1 #
13
# #
14
#------------------------------------------------------------------------------#
15
16
17
18
#Creamos un vector de 20 elementos, cuyos datos vayan del 0 al 500
19
20
x <- seq(from = 0, to = 500, by = 20)
21
22
23
#Construimos el primer if statement (w), que sacará la raíz cuadrada a cada uno de los elementos que cumplan con la condición de estar entre 0 y 100.
24
25
w <- sqrt(x)
26
27
if (w > 1 & w < 100) {
28
print("verdadero")
29
} else {
30
print( "falso")
31
32
}
33
34
35
#Construimos el segundo if statement (p), que le restará 5 a cada uno de los elementos que cumplan con la condición de estar entre 100 y 300.
36
37
p <- x-5
38
39
if (p > 100 & p <= 300){
40
print("verdadero")
41
} else {
42
print( "falso")
43
44
}
45
46
#Construimos el último if statement (q), que igualará a 50 a cada uno de los elementos que cumplan con la condición de ser mayores a 300.
47
48
q <- 50
49
50
if (q > 300){
51
print("verdadero")
52
} else {
53
print( "falso")
54
55
}
56
57
58
59
60
#------------------------------------------------------------------------------#
61
# #
62
# PREGUNTA 2 #
63
# #
64
#------------------------------------------------------------------------------#
65
66
67
# Creamos el vector (v) con 100 observaciones
68
69
v <- array(sample(1:100, 50, replace=T), c(100,1))
70
71
72
73
#Creamos la matriz (m) de dimensiones 100 x 50
74
75
m <- array(sample(1:100, 50, replace=T), c(100,50))
76
77
78
79
80
# Creamos la función escalar que nos dará un mensaje de error si el objeto introducido no es una matriz o vector
81
# Si el objeto introducido en la función es vector o matriz, la función calculará el escalar usando los valores mínimos y máximos de cada columna y reescalará la matriz o vector de acuerdo a dichos valores.
82
83
escalar <- function(M) {
84
85
if(! is.array(M)) stop("x debe ser una matriz o vector")
86
87
a <- apply(M,2, min)
88
b <- apply(M,2, max)
89
e <- (M-b)/(a-b)
90
91
result= M*e
92
93
94
return(result)
95
96
}
97
98
99
#Aplicamos la función a nuestro vector para que nos devuelva el vector reajustado por el escalar.
100
101
print(escalar(v))
102
103
104
#Aplicamos la función a nuestra matriz para que nos devuelva la matriz reajustada por el escalar.
105
106
print(escalar(m))
107
108
109
110
111
#------------------------------------------------------------------------------#
112
# #
113
# PREGUNTA 3 #
114
# #
115
#------------------------------------------------------------------------------#
116
117
set.seed(756)
118
119
120
x1 <- runif(10000)
121
x2 <- runif(10000)
122
x3 <- runif(10000)
123
x4 <- runif(10000)
124
x5 <- runif(10000)
125
e <- rnorm(10000)
126
127
# Poblacional regression
128
129
Y <- 1 + 0.7*x1 + 1.6*x2 + 0.3*x3 + 1.8*x4 + e
130
131
X <- cbind(matrix(1,1000), x1,x2,x3,x4)
132
head(X)
133
134
#inv(X) or solve (X)
135
136
beta <- solve(t(X) %*% X) %*% (t(X) %*% Y)
137
beta
138
139
m <- c(10,50,80,120,200,500,800)
140
141
142
143
144
145
#------------------------------------------------------------------------------#
146
# #
147
# PREGUNTA 4 #
148
# #
149
#------------------------------------------------------------------------------#
150
151
152
set.seed(756) # Porque permite que los numeros aleatorios no cambien al correr los códigos
153
x1 <- runif(800)
154
x2 <- runif(800)
155
x3 <- runif(800)
156
x4 <- runif(800)
157
x5 <- runif(800)
158
x6 <- runif(800)
159
x7 <- runif(800)
160
e <- rnorm(800)
161
162
#### El t?rmino de perturbación o error se diferencia porque tiene distribución normal, con media 0 y desviación estándar 1.
163
164
#Instrumento
165
166
z <- rnorm(800)
167
168
# Poblacional regression (Data Generating Process GDP)
169
170
Y <- 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 2.5*x5 + 0.8*x6 + 1.7*x7 + e
171
X <- cbind(matrix(1,800), x1,x2,x3,x4,x5,x6,x7)
172
173
ols <- function(M, Y , standar = T, Pvalue = T , instrumento = NULL, index = NULL){
174
175
176
if (standar & Pvalue & is.null(instrumento) & is.null(index)){
177
178
beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)
179
180
y_est <- M %*% beta ## Y estimado
181
n <- dim(M)[1] # filas
182
k <- dim(M)[2] - 1 # variables sin contar el intercepto}
183
df <- n- k ## grados de libertad
184
sigma <- sum(sapply(Y - y_est , function(x) x ^ 2))/ df
185
186
Var <- sigma*solve(t(M) %*% M)
187
sd <- sapply(diag(Var) , sqrt) ## raíz cuadrado a los datos de la diagonal principal de Var
188
189
t.est <- abs(beta/sd)
190
pvalue <-2*pt(t.est, df = df, lower.tail = FALSE) ## pt : t - student densidad
191
lim_inf = beta - 1.96 * sd ## Dato para hallar los l?mites superiores e inferiores del intervalo del confianza
192
lim_sup = beta + 1.96 * sd
193
table <- data.frame(OLS = beta,
194
standar.error = sd, P.value = pvalue, L?mite_inferior : lim_inf, L?mite_superior : lim_sup)
195
196
197
}
198
199
200
if ( !is.null(instrumento) & !is.null(index) ){
201
202
beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)
203
204
index <- index + 1
205
206
Z <- X
207
Z[,index] <- z ## reemplazamos la variable endógena por el instrumento en la matrix de covariables
208
209
beta_x <- solve(t(Z) %*% Z) %*% (t(Z) %*% X[,index])
210
211
x_est <- Z %*% beta_x
212
X[,index] <- x_est ## se reemplaza la variable x endógena por su estimado
213
214
beta_iv <- solve(t(X) %*% X) %*% (t(X) %*% Y)
215
216
table <- data.frame(OLS= beta,
217
OLS.IV = beta_iv)
218
219
}
220
221
return(table)
222
}
223
224
225
226
227
228
229