Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Grupo 1/Grupo 1.R
2714 views
1
2
########################################### GRUPO 1 ############################################
3
4
##################################### Miembros del grupo ######################################
5
6
# 20163197, Enrique Alfonso Pazos
7
# 20191894, Ilenia Ttito
8
# 20151595, Rodrigo Ramos
9
# 20193469, Luis Eguzquiza
10
# 20163377, Jean Niño de Guzmán
11
12
13
########################################## Pregunta 1 ##########################################
14
15
#Creaci?n del Vector con n?meros aleatorios
16
17
Vector<-(sample(0:500, 20)) #Se indica que se cree un vector con 20 n?meros aleatorios entre 0 y 500
18
19
sort(Vector) #Se ordena el Vector para que los valores vayan de menor a mayor.
20
21
#Creaci?n de If Statement
22
#Se indica que cada valor del Vector se reemplazar? dependiendo de en que rango se encuentre.
23
for (i in sort(Vector)) {
24
25
#Se determina el valor que tomar? cada valor del Vector acorde al rango indicado el la tarea.
26
#Y una vez obtenido el resultado, se imprimir? el resultado que cada valor obtuvo despue?s de pasar por el If Statement.
27
#Rango de 0 a 100
28
if(i >= 0 & i < 100)
29
#Se eleva a la 0.5
30
print(i ^ 0.5 )
31
#Rango de 10 a 300
32
else if(i > 100 & i <= 300)
33
#Se resta 5
34
print(i - 5 )
35
#Rango de 300 a m?s
36
else if(i > 300 )
37
#Se reemplaza con 50
38
print(50)
39
}
40
41
########################################## Pregunta 2 ##########################################
42
43
escalonar <- function(x) {
44
# La primera condición es para establecer que, en caso no ser una matriz, no continuará el proceso
45
# y mostrará un mensaje de error.
46
if (! is.matrix(x)) stop("No es un vector o matriz")
47
48
# Ahora, pongo la segunda condición, en la que indicaré los criterios para que pase la matriz,
49
# Me voy a valer del número de filas como condición: número de filas = 100
50
else if (nrow(x)==100) {
51
# Extraigo el mínimo y máximo valor de cada columna. Esto me genera un vector con el máximo y otro con el mínimo
52
# valor de cada columna; max y min son esos vectores respectivamente.
53
min <- apply(x, 2, min) #Margin = 2 significa que tomará las columnas como criterio.
54
max <- apply(x, 2, max)
55
56
# Hago una iteración con el número de filas de la matriz sin la necesidad de crear una lista previamente.
57
for (i in 1:4) {
58
# Extraeré cada fila de la matriz de acuerdo al valor que tome i en cada iteración
59
# y hago el proceso de escalonamiento. El proceso lo "reescribo" sobre la misma matriz.
60
x[i,]<- (x[i,]- min)/(max-min)
61
}
62
}
63
# En caso no pasar por las otras dos condiciones, ingresa aquí el vector.
64
else {
65
# Como estoy trabajando sobre un vector, extraigo el mínimo y máximo valor de cada fila.
66
min <- apply(x, 1, min) #Margin = 1 significa que tomará la fila como criterio.
67
max <- apply(x, 1, max)
68
# Hago el proceso de escalonamiento y lo "reescribo" sobre la misma matriz.
69
x <- (x- min)/(max-min)
70
}
71
return(x)}
72
73
# Hacemos las pruebas tanto para una matriz como para un vector:
74
x <- matrix(rnorm(500), 100, 50)
75
escalonar (x)
76
77
78
z <- matrix(rnorm(100), 1, 100)
79
escalonar (z)
80
81
82
########################################## Pregunta 3 ##########################################
83
84
# Generamos los valores aleatorios con una poblacion de 10000
85
x1 <- runif(10000, 0, 1)
86
x2 <- runif(10000, 0, 1)
87
x3 <- runif(10000, 0, 1)
88
x4 <- runif(10000, 0, 1)
89
x5 <- runif(10000, 0, 1)
90
e <- rnorm(10000,0,1)
91
92
#Se crea una lista con los diferentes tamanios de muestra
93
numMuestras <- list(10, 50, 80, 120, 200, 500, 800, 100, 5000)
94
95
96
#Creamos un bucle, para que itere el codigo con los diferentes tamanos de muestra
97
98
DF <- list ()
99
#Se pone un for para que itere cada vez que pase con una cantidad diferente de muestra
100
for (i in 1:length(numMuestras)){
101
102
k=numMuestras[[i]]
103
104
#Especificamos un k=i que contenga el n�mero de tama�os de cada muestra
105
x1_m = sample(x1, k=i)
106
x2_m = sample(x2, k=i)
107
x3_m = sample(x3, k=i)
108
x4_m = sample(x4, k=i)
109
110
#Se plantea un data frame para cada valor de la muestra
111
df<-data.frame(dplyr::sample_n(
112
data.frame(
113
bind_cols(x1,x2,x3,x4))%>%
114
setNames(c("x1","x2","x3","x4")),
115
size=k))
116
DF[[i]] <- df%>%
117
mutate(muesta=k)
118
119
Y <- 1 + 0.8*x1_m + 1.2*x2_m + 0.5*x3_m + 1.5*x4_m + e
120
121
#Plantemos el modelo OLS (MCO)
122
ols <- function(M, Y, instrumento = NULL, index = NULL){
123
124
if (standar & is.null(instrumento) & is.null(index)){
125
beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)
126
y_est <- M %*% beta ## Y estimado
127
n <- dim(M)[1] # filas
128
k <- dim(M)[2] - 1 # variables sin contar el intercepto
129
}
130
131
if ( !is.null(instrumento) & !is.null(index) ){
132
beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)
133
index <- index + 1
134
}
135
}
136
}
137
138
DF_all<-map_df(DF, bind_rows)
139
rm(df, DF, k, i)
140
141
142
########################################## Pregunta 4 ##########################################
143
144
# Creamos un proceso generador de datos con 8 variables y 800 observaciones.
145
set.seed(757) #Semilla
146
147
x1 <- runif(800)
148
x2 <- runif(800)
149
x3 <- runif(800)
150
x4 <- runif(800)
151
x5 <- runif(800)
152
x6 <- runif(800)
153
x7 <- runif(800)
154
e <- rnorm(800,0,1)
155
156
#Iteraci?n de generaci?n de proceso
157
158
Y <- 1 + 0.7*x1 + 1.1*x2 + 0.9*x3 + 1.5*x4 + 0.6*x5 + 0.3*x6 + 0.1*x7 + e
159
160
X <- cbind(matrix(1,800), x1,x2,x3,x4,x5,x6,x7)
161
head(X)
162
163
164
MCO <- function(Y, X,Iis.null,His.null) {
165
# Calculcar beta y las dimensiones de n y k
166
# dependiendo de si tiene o no intercepto
167
if (Iis.null) {
168
beta <- solve(t(X) %*% X) %*% (t(X) %*% Y)
169
beta
170
n <- X.shape[0]
171
k <- X.shape[1] - 1
172
} else if (! Iis.null) {
173
beta <- solve(t(X) %*% X) %*% (t(X) %*% Y)
174
beta
175
n <- X.shape[0]
176
k <- X.shape[1]
177
}
178
return(beta)
179
180
# Calculo de Y estimado, SCR, SCT, Sigma(s2)
181
Yhat = X %*% beta
182
Yerror = Y-Yhat
183
Yerror2 = '^'(Yerror, 2)
184
185
SCR =(t(Yerror) %*% Yerror)
186
Ydesv = Y - (matrix(1,n)*mean(Y))
187
SCT =(t(Ydesv) %*% Ydesv)
188
nk=n-k
189
s2= SCR/nk
190
191
}
192
# Calculo de Matriz de Varianzas y Covarianzas dependiendo
193
# si considero ajuste de White o no
194
if (His.null) {
195
MatVarCov <- (solve(t(X) %*% X))*s2
196
} else if(! His.null) {
197
V <- np.diag(Yerror2)
198
MatVarCov <- (solve(t(X) %*% X) %*% (t(X) %*% V %*% X) %*% solve(t(X) %*% X))
199
}
200
201
202
203
##error est?ndar
204
sd <- sapply(diag(MatVarCov) , sqrt)
205
206
#Limite superior
207
limsup <- beta + 1.96*(sd)
208
209
#L?mite inferior
210
liminf <- beta - 1.96*(sd)
211
212
#p-value
213
t_est <- abs(beta/sd)
214
pvalue <- 2 * pt(t.est, df = nk, lower.tail = FALSE)
215
216
#R-cuadrado
217
R2 <- 1-(SCR/SCT)
218
Root_MSE <- math.sqrt((t(Yerror) %*% Yerror)/800)
219
dataf <- data.frame( "Betas"= beta, "standar_error" = sd, "Pvalue" = pvalue)
220
221
return (dataf)
222
223
print(MCO(Y, X))
224
225
226
227