Path: blob/main/Trabajo_grupal/WG1/Grupo_4_r.R
2714 views
###############################################################################1# #2# TAREA 1 - GRUPO 4 #3# #4###############################################################################56789#------------------------------------------------------------------------------#10# #11# PREGUNTA 1 #12# #13#------------------------------------------------------------------------------#14151617#Creamos un vector de 20 elementos, cuyos datos vayan del 0 al 5001819x <- seq(from = 0, to = 500, by = 20)202122#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.2324w <- sqrt(x)2526if (w > 1 & w < 100) {27print("verdadero")28} else {29print( "falso")3031}323334#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.3536p <- x-53738if (p > 100 & p <= 300){39print("verdadero")40} else {41print( "falso")4243}4445#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.4647q <- 504849if (q > 300){50print("verdadero")51} else {52print( "falso")5354}5556575859#------------------------------------------------------------------------------#60# #61# PREGUNTA 2 #62# #63#------------------------------------------------------------------------------#646566# Creamos el vector (v) con 100 observaciones6768v <- array(sample(1:100, 50, replace=T), c(100,1))69707172#Creamos la matriz (m) de dimensiones 100 x 507374m <- array(sample(1:100, 50, replace=T), c(100,50))7576777879# Creamos la función escalar que nos dará un mensaje de error si el objeto introducido no es una matriz o vector80# 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.8182escalar <- function(M) {8384if(! is.array(M)) stop("x debe ser una matriz o vector")8586a <- apply(M,2, min)87b <- apply(M,2, max)88e <- (M-b)/(a-b)8990result= M*e919293return(result)9495}969798#Aplicamos la función a nuestro vector para que nos devuelva el vector reajustado por el escalar.99100print(escalar(v))101102103#Aplicamos la función a nuestra matriz para que nos devuelva la matriz reajustada por el escalar.104105print(escalar(m))106107108109110#------------------------------------------------------------------------------#111# #112# PREGUNTA 3 #113# #114#------------------------------------------------------------------------------#115116set.seed(756)117118119x1 <- runif(10000)120x2 <- runif(10000)121x3 <- runif(10000)122x4 <- runif(10000)123x5 <- runif(10000)124e <- rnorm(10000)125126# Poblacional regression127128Y <- 1 + 0.7*x1 + 1.6*x2 + 0.3*x3 + 1.8*x4 + e129130X <- cbind(matrix(1,1000), x1,x2,x3,x4)131head(X)132133#inv(X) or solve (X)134135beta <- solve(t(X) %*% X) %*% (t(X) %*% Y)136beta137138m <- c(10,50,80,120,200,500,800)139140141142143144#------------------------------------------------------------------------------#145# #146# PREGUNTA 4 #147# #148#------------------------------------------------------------------------------#149150151set.seed(756) # Porque permite que los numeros aleatorios no cambien al correr los códigos152x1 <- runif(800)153x2 <- runif(800)154x3 <- runif(800)155x4 <- runif(800)156x5 <- runif(800)157x6 <- runif(800)158x7 <- runif(800)159e <- rnorm(800)160161#### El t?rmino de perturbación o error se diferencia porque tiene distribución normal, con media 0 y desviación estándar 1.162163#Instrumento164165z <- rnorm(800)166167# Poblacional regression (Data Generating Process GDP)168169Y <- 1 + 0.8*x1 + 1.2*x2 + 0.5*x3 + 1.5*x4 + 2.5*x5 + 0.8*x6 + 1.7*x7 + e170X <- cbind(matrix(1,800), x1,x2,x3,x4,x5,x6,x7)171172ols <- function(M, Y , standar = T, Pvalue = T , instrumento = NULL, index = NULL){173174175if (standar & Pvalue & is.null(instrumento) & is.null(index)){176177beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)178179y_est <- M %*% beta ## Y estimado180n <- dim(M)[1] # filas181k <- dim(M)[2] - 1 # variables sin contar el intercepto}182df <- n- k ## grados de libertad183sigma <- sum(sapply(Y - y_est , function(x) x ^ 2))/ df184185Var <- sigma*solve(t(M) %*% M)186sd <- sapply(diag(Var) , sqrt) ## raíz cuadrado a los datos de la diagonal principal de Var187188t.est <- abs(beta/sd)189pvalue <-2*pt(t.est, df = df, lower.tail = FALSE) ## pt : t - student densidad190lim_inf = beta - 1.96 * sd ## Dato para hallar los l?mites superiores e inferiores del intervalo del confianza191lim_sup = beta + 1.96 * sd192table <- data.frame(OLS = beta,193standar.error = sd, P.value = pvalue, L?mite_inferior : lim_inf, L?mite_superior : lim_sup)194195196}197198199if ( !is.null(instrumento) & !is.null(index) ){200201beta <- solve(t(M) %*% M) %*% (t(M) %*% Y)202203index <- index + 1204205Z <- X206Z[,index] <- z ## reemplazamos la variable endógena por el instrumento en la matrix de covariables207208beta_x <- solve(t(Z) %*% Z) %*% (t(Z) %*% X[,index])209210x_est <- Z %*% beta_x211X[,index] <- x_est ## se reemplaza la variable x endógena por su estimado212213beta_iv <- solve(t(X) %*% X) %*% (t(X) %*% Y)214215table <- data.frame(OLS= beta,216OLS.IV = beta_iv)217218}219220return(table)221}222223224225226227228229