Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG1/Grupo_9_r.R
2714 views
1
#Grupo _ 9
2
3
#20180783 Romina Garibay
4
#20183566 Marissa Vergara
5
#20163164 Lisbeth Morales
6
7
8
############Ej.1############
9
10
11
v <- sample(0:500, size = 20) #vector cuyos datos estén entre 0 y 500, el vector tiene 20 datos
12
v
13
14
for (i in v){ #aplicando la condicion
15
if(i >= 0 & i <= 100){
16
print(i^0.5)
17
}
18
else if(i > 100 & i <= 300){
19
print(i-5)
20
}
21
else if (i > 300){
22
print(50)
23
}
24
} #se imprime los resultados de dependiendo del tipo de valor que hay en el vector
25
26
27
############Ej.2############
28
29
fescalar <- function(x){
30
if(! is.array(x)) stop("Error: el tipo de variable no es un vector o matriz.") #se verifica que es vector o matriz
31
32
M1 <- matrix(0,dim(x)[1],dim(x)[2]) #si es vector o matriz, se aplica la condicion de rescalar
33
34
for (i in seq(dim(x)[2])){
35
m <- x[,i]
36
M1[,i] <- round((x[,i] - min(m))/(max(m)-min(m)),2)
37
}
38
return(M1)
39
}
40
41
#generar vector (debe contar con 100 observaciones)
42
v <- matrix(sample.int(100,size=100,replace=TRUE),nrow=100,ncol=1)
43
fescalar(v)
44
45
#generar matrix (100 x 50)
46
M<-matrix(sample.int(100,size=500,replace=TRUE),nrow=100,ncol=50)
47
fescalar(M)
48
49
50
51
52
############Ej.3############
53
54
#Proceso generador de datos con 5 variables (1 + x1 + x2 + x3 + x4 )
55
set.seed(756)
56
x1 <- runif(10000)
57
x2 <- runif(10000)
58
x3 <- runif(10000)
59
x4 <- runif(10000)
60
e <- rnorm(10000)
61
62
Y <- 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + e #10 000 observaciones
63
64
mat <- cbind(Y,matrix(1,length(Y), 1),x1,x2,x3) # se deja de lado x4 (por indicacion de tarea)
65
#"==>estime los coeficientes de un modelo de regresión lineal omitiendo una variable explicativa"
66
#"del proceso generador de datos."
67
head(mat)
68
69
70
#se piden muestras de 10 a 5000
71
72
muestra <- c(10,50,80,120,200,500,800,1000,5000)
73
74
#para cada muestra evaluar los betas y errores estandar:
75
76
for (m in muestra) {
77
78
elegidos=sample(seq(10000) , m,replace=F) #1. eleccion de observaciones al azar para el tamaño de muestra m
79
observ=mat[elegidos,] #2. construir matriz con observaciones elegidas
80
81
#2.a. matriz de X elegidas
82
X=observ[, -c(1)]
83
#2.b. matriz de Y elegidas
84
Y=observ[, 1]
85
86
87
#3.obtener betas
88
beta <- solve(t(X) %*% X) %*% (t(X) %*% Y)
89
beta
90
91
#4. obtener sd
92
y_est <- X %*% beta
93
n <- dim(X)[1]
94
k <- dim(X)[2] - 1
95
df <- n -k
96
sigma <- sum(sapply(Y - y_est, function(x)x^2))/ df
97
var <- sigma*solve(t(X) %*% X)
98
99
sd <- sapply(diag(var), sqrt)
100
101
#5. crear array para colocar el valor de la muestra en el dataframe
102
tamano=matrix(m,length(beta), 1)
103
104
105
#6. crear dataframe
106
table <- data.frame(tamano,beta,sd)
107
108
#7. Resultado
109
print(table)
110
}
111
112
113
114
############Ej.4############
115
#Proceso generador de datos con 8 variables (1 + x1 + x2 + x3 + x4 + x5 + x6 + x7)
116
set.seed(756)
117
x1 <- runif(800)
118
x2 <- runif(800)
119
x3 <- runif(800)
120
x4 <- runif(800)
121
x5 <- runif(800)
122
x6 <- runif(800)
123
x7 <- runif(800)
124
e <- rnorm(800)
125
126
Y <- 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 2*x5 + 3*x6 + 1.5*x7 + e #800 observaciones
127
128
X <- cbind(matrix(1,800),x1,x2,x3,x4,x5,x6,x7) #x con 1 intercepto y 7 variables x
129
head(X)
130
131
132
#definir funcion:
133
#Incluye,
134
#argumento de que incluye intercepto por default
135
#argumento de heterocedasticidad (es homocedastico por default)
136
137
138
ols <- function(M, Y, standar =T, Pvalue = T, intercepto = T, homocedastico =T) {
139
#1. obtener beta
140
beta <- solve(t(M) %*% M) %*% (t(M) %*% Y) #los betas no se alteran por ser homo o heterocedastico
141
142
y_est <- M %*% beta
143
y_mean <- mean(Y)
144
n <- dim(M)[1]
145
k <- dim(M)[2] - 1
146
df <- n -k
147
148
ee=sapply(Y - y_est, function(x) x^2)
149
150
SCR=sum(ee)
151
SCT=sum(sapply(Y - y_mean, function(x) x^2))
152
153
154
#2. Root Mse
155
root_mse=(SCR/n)^(1/2)
156
157
#3. R cuadrado
158
R_cuadrado=1-SCR/SCT
159
160
#Primera respuesta en vector:
161
vector <- c("rootmse",root_mse,"Rcuadrado",R_cuadrado)
162
print(vector)
163
164
#En el caso de ser homocedastico evaluar:
165
if (standar & Pvalue & intercepto & homocedastico) {
166
167
sigma2 <- SCR/ df
168
169
Var <- sigma2*solve(t(M) %*% M)
170
sd <- sapply(diag(Var), sqrt)
171
172
t.est <- abs(beta/sd)
173
pvalue <- 2*pt(t.est,df=df, lower.tail = FALSE)
174
175
L.inf <- beta - 1.96 * sd
176
L.sup <- beta + 1.96 * sd
177
178
table <- data.frame(OLS = beta, standar.error =sd, value =pvalue, Lim.inferior= L.inf, Lim.superior =L.sup)
179
180
return(table)
181
}
182
183
#En el caso de no ser homocedastico evaluar
184
else if (homocedastico==F) {
185
186
white=diag(n)*ee
187
188
VarCorg=solve(t(M) %*% M)%*%t(M)%*%white%*%M%*%solve(t(M) %*% M)
189
190
sd= sapply(diag(VarCorg), sqrt)
191
192
t.est <- abs(beta/sd)
193
194
pvalue <- 2*pt(t.est,df=df, lower.tail = FALSE)
195
196
L.inf <- beta - 1.96 * sd
197
L.sup <- beta + 1.96 * sd
198
199
table <- data.frame(OLS = beta, standar.error =sd, value =pvalue, Lim.inferior= L.inf, Lim.superior =L.sup)
200
return(table)
201
}
202
}
203
204
#Caso homocedastico
205
ols(X,Y)
206
207
208
#Caso heterocedastico
209
ols(X,Y,homocedastico = F)
210
#Cuando hay heterocedasticidad, la varianza modificada afecta el error estandar, pvalue, limites.
211
#No cambia los R2 y Rootmse pues solo explican como los betas estimados ajustan la linea de regresion,
212
#y con la matriz de white los betas no han cambiado.
213
214
215