0% encontró este documento útil (0 votos)
9 vistas31 páginas

1 Parcial Sim Digital

El documento describe la simulación como una técnica numérica para experimentar con sistemas mediante relaciones matemáticas. Se abordan métodos de generación de números aleatorios, incluyendo el método de Monte Carlo, y se presentan algoritmos para su implementación en R. También se discuten aplicaciones de la simulación, pruebas estadísticas de uniformidad e independencia, y se proporcionan ejemplos de código en R para facilitar su uso.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
9 vistas31 páginas

1 Parcial Sim Digital

El documento describe la simulación como una técnica numérica para experimentar con sistemas mediante relaciones matemáticas. Se abordan métodos de generación de números aleatorios, incluyendo el método de Monte Carlo, y se presentan algoritmos para su implementación en R. También se discuten aplicaciones de la simulación, pruebas estadísticas de uniformidad e independencia, y se proporcionan ejemplos de código en R para facilitar su uso.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Resúmen sim digital 1er corte.

Qué es una simúlación.

Técnica numérica para conducir experimentos, que comprenden relaciones matemáticas


y lógicas, necesarias para describir el comportamiento de un sistema en el tiempo.

Sistema
TENDENCIAS SIMULACION
Gen numeros aleatorios

Simulacion montecarlo

Metodo para estimar el valor de una cantidad desconocida usando los principios de
estadistica inferencial:

Dado que es una dist uniforme, esta integral entre 0 y 1, es lo mismo que decir la media
para una generacion de numeros aleatorios con dist uniforme.

Generacion numeros aleatorios.


Alg para metodo multiplicativo congruencial

1. Definir funcion <- function(semilla, a, m, n)

2. Crear vector para guardar numeros generados

3. Asignar semilla inicial numeros[1] <- primer valor (semilla)

4. Ciclo for que usa la ecuacion para generar numeros

5. Return de esos numeros generados

6. Parametros de la ecuacion, semilla, a, m,n

7. Numeros_generados <- funcion(parametros)

8. Print(numeros_generados)
Alg para metodo de generadores congruenciales lineal

1. Definir funcion <- function(semilla, a, c,m, n)

2. Crear vector para guardar numeros generados

3. Asignar semilla inicial numeros[1] <- primer valor (semilla)

4. Ciclo for que usa la ecuacion para generar numeros

5. Return de esos numeros generados

6. Parametros de la ecuacion, semilla, a, m,n

7. Numeros_generados <- funcion(parametros)

8. Print(numeros_generados)

Si se desea tener los numeros normalizados (entre 0 y 1), se dividen los numeros
generados entre m
Para encontrar el periodo del generador para X_o semillas, (con n mayor a 16 para que
haya un periodo)

(mismos 8 pasos anteriores, solo que en vez de semilla inicial, se crea un vector de
semillas donde van a estar las X_0 semillas)

9. Ciclo for para recorrer el vector semillas (semilla in semillas)

10. Crear vector que guarde los numeros generados por la funcion que genera los
numeros pseudoaleatorios dados parametros (semilla, a,m,n)

11. Imprimir la semilla que genera esos numeros y los numeros generados por esa
semilla

12. Otro for dentro del for anterior para encontrar el periodo (donde se repite el valor
inicial)

13. Break

APLICACIONES GENERACION DE NUMEROS PSEUDOALEATORIOS

Integración Monte carlo


Hacer el cambio de variable en los limites de integración para que quedé entre 0 y 1, que
son los limites en los cuales el generador de numeros aleatorios nos va a dar una dist
uniforme
( 𝑥−𝑎)
𝑦 = ( 𝑏−𝑎)

Para el metodo Monte carlo

1. Generar puntos aleatorios y_i en el intervalo [0,1] (con runif)

2. Evaluar la función h(y_i) en esos puntos

3. Calcular el promedio de esos valores de h(y_i) y usarlos como estimación de la


integral.

Alg. Dependiendo de la función que sea dada para integrar (con limites de integración
entre a y b)
Parametros y,a,b

1. Asignar a una variable la funcion dada (x), g <- funcion(x) { return(funcion)}

2. Asignar la funcion h con el cambio de variable como dice la ecuación, donde “g” es
la variable con la funcion asignada del punto anterior

.h <- funcion(parametros) {return(h(y) como en la formula)}

3. Hacer la integracion metodo monte carlo (al haber hecho ya el cambio de variable
del punto anterior, se evalua esta funcion en los numeros generados
aleatoriamente, con limites 0,1)

Montecarlo <-funcion(g,a,b,N)

4. Generar # aleatorios con el runif(N),

5. Evaluar la funcion evaluada en esos puntos aleatorios con los limites de


integracion, hY<-(parametros, #aleatorios,a,b)

6. Calcular el promedio de los valores de hy (aprovechando que ahora es una funcion


descrita con valores aleatorios de dist uniforme) prome <- mean(hy)

7. Integral de montecarlo es igual a esa media, return(mean(hy))

8. Asignar los parametros, a<-0, b...., N <- #puntos aleatorios

9. Calcular integral, integral <- montecarlo(g,a,b,N)

10. Mostrar resultado Cat(“estimacion:”, integral,”\n”)

Recordatorio( la funcion que nos den entre a y b, es g(x), la funcion transformada con el
cambio de variable es h(y), runif genera los # aleatorios entre 0 y 1, “mean” es el promedio
de h(y))

Entre mas grande sea el valor de N, mejor será la estimación.


Similar a la integracion entre a y b, se busca hacer un cambio de variable que asemeje el 0
y el infinito de la funcion g(x) dada

1. Generar puntos aleatorios y_i entre [0,1]

2. Evaluar función h(y_i) en esos puntos

3. Calcular promedio valores h(y_i), estimacino de integral montecarlo


Alg int montecarlo entre 0 y infinito

1. Asignar a una variable g la funcion que sea dada, que recibe como parametro la
variable x que tenga esa funcion .g <- funcion(x) { return(funciondada(x))}

2. Crear funcion h con el cambio de variable para el h(y),donde como en la formula de

cambio de variable, en terminos de x, luego retorna la funcion g del


punto anterior con parametro X, que ahora depende de Y, y se completa el h(y)

como en la formula

3. Crear funcion monte_carlo <-function(con parametros la funcion dada y de entrada


los N # generados aleatoriamente)

4. Generar numeros aleatorios con runif

5. Evalua la funcion hy con esos numeros aleatorios, que recibe como parametros,
(los # generados aleatorios y la funcion con cambio de variable)

6. Promedio de los valores de hy, promedio <- mean(hy), return(mean(hy))

7. Asignar un valor para N, para los puntos generados

8. Resultado <- monte_carlo(parametros g,N)

9. Cat(“resultado”, resultado)

Recordatorios(funcion g es la funcion que nos den, funcionh(y) es la funcion con el cambio


de variable, runif genera # aleatorios, “sapply”h(y)<-sapply(y,h) evalua la funcion h(y) en
cada punto aleatorio y_i, mean calcula la media de h(y)) entre mas grande N mejor la
estimación de montecarlo
Test estadísticos de uniformidad e independencia
Util para datos <30, maxima dif entre 2 distribuciones, corresponde al estadistico D, si el
valor de la dif maxima entre dos distribuciones supera un valor critico de la tabla, se
rechaza la hipotesis nula.

1. Organizar los datos en una tabla

R(i) D+ D-

R(n)

2. Para cada R(i) calcular D + y D-

3. Luego buscar el valor mas grande de todos entre D+ y D-

4. Buscar en la tabla el valor critico D_alfa para el valor de significancia requerido

5. Si el valor D < D_alfa no se detecto diferencia entre la dist de R1...Rn y la dist


uniforme.

(al tratarse de una CDF, la probabilidad acumulada del 100% se reparte de forma uniforme
entre le numero de datos, esa es la idea del test, ver que tan cerca se encuentra estra dist
de numeros a la distribucion uniforme)
Codigo util para KS en R

Función “[Link]” que realiza el test de komogorov-smirnov

Muestra <- c(0,2,3,4,.....)

Resultado <- [Link](muestra, “punif”, 0,1)


Util para N>30, no solo evalua uniformidad, evalua cualquier dist de prob, comparando de
nuevo con la dist uniforme.

Es para N intervalos iguales, en los cuales se reparte la CDF, se cuentan los valores
Obtenidos, y los esperados, con N intervalos, se cuentan los valores obtenidos en ese
intervalo, y se resta con los valores esperados.

Entre mas bajo sea chi, mas cerca a un caso ideal, entre mas alto, algún valor del intervalo
recibe mas contribuciones.
Se define intervalo, anota la dist, se hacen las operaciones y se obtiene el valor chi, con el
que se va a comparar con el de la tabla.

Se compara para grados de libertad n-1

Codigo util en R para chi cuadrado, calvular valor chi para un alfa determinado

Qchisq(alfa, df=grados de libertad (n-1) , [Link] = FALSE)


Forma de identificar independencia entre los datos entre si

Se define un inicio i, y un salto L, y un M que es el entero mas grande tal que i+(M+1)L<_ N
(con N siendo los numeros en la secuencia)

1. Se hace la operacion de p_il y de o_pil

2. Se divide P_il entre O_pil, y se compara con el valor Z (qnorm), de una dist normal,
si este valor es mayor al del valor Z hay una correlacion positiva
3. La idea es acercarse a 0 lo mas posible, para acercarse a falta de independencia
entre los datos

Codigo util para valor Z en dist normal, valor de Z para cierto alfa, pa comparar

Qnorm(alfa, mean=0, sd=1, [Link] = FALSE)


CODIGOS de Rstudio

En la seccion inf derecha de Rstudio, se pude usar la pestaña help para tener
documentacion acerca de funciones de Rstudio.

X <- runif(n) # n valores generados de forma aleatoria dist uniforme

Sqrt(operacion) raiz cuadrada de lo que tenga adentro

Sum(sumatoria)

Cat(“mensaje”, argumento de ese texto o resultado, “otro resultado”, otro_resultado,


“\n”) #para imprimir un resultado

Mcg (minimos cuadrados generalizados)

Hist(histograma)

D <- [Link](x = arg, y = arg), crea una tabla de data con los argumentos

Plot (D), plotea lo que le de argumentos en X y Y)

#calcular una probabilidad estimada

Probabilidad <- coincidencias / num_simulaciones

#funcion piso, o floor, para operaciones discretas

F <- floor(runif(N)*+-/ etc, operacion, o nada)

#operaciones con length, el largo de un vector, para buscar coincidencias, o dividir una
sumatoria de una muestra entre el numero total de datos de dicha muestra

X <- Sum(muestra)/length(muestra)
Length(algo) != length(otro algo)

TUTORIAL R MARKDOWN DEL PROFESOR

title: "Tutorial R - Rmarkdown" author: "David Romo B., PhD" output: html_notebook

Esto es un enlace: R Markdown

Notebooks en R - R markdown
Subsección 1
Descripción sencilla del tutorial. Para agregar un bloque de código se puede utilizar
Ctrl+Alt+I:

plot(cars)
print('Hola mundo')

Puedo incluir ecuaciones utilizando la misma sintaxis de latex:

$$P(x<0)= \int_{-\inf}^{0} p(x)$$ donde $p(x)$ corresponde a la función de densidad de


probabilidad.

Por otro lado, el valor esperado de una variable aletoria discreta sería:

$$E[x] = \sum_{i=1}^k x_i*p(x_i)$$

pi_user = 3.14159

El valor de $\pi$ es r pi. Y el de pi_user es r pi_user

Nota 1: Esta es una nota Nota 2: Esta es una nota cursiva Nota 3: Esta es una nota tachada
Estructuras de control
Las estructuras de control permiten modificar el flujo de ejecución de un programa
dependiendo de las condiciones asociadas a variables o a la evaluación de expresiones.

Condicionales
Las estructuras condicionales permiten ejecutar diferentes bloques de código
dependiendo de determinadas condiciones:

x=10
#Edad de la persona
if (x>18) {
print("La persona es mayor de edad")
} else if (x==18){
print("La persona recién cumplió 18")
} else {
print("La persona es menor de edad")
}

Otro ejemplo:

r=5

if(r%%3==0){
print('El numero es divisible entre 3')
}else if(r%%2==0){
print('El número es par')
}else{
print('El numero no es divisible ni entre 2 ni entre 3')
}

También es posible asignar diferentes valores con la instrucción switch

x = "lugar"
y = switch(x, edad = 5, lugar="montaña", altura="1.75 cm")
print(y)

Estructuras repetitivas
Dentro de las estructucturas repetitivas podemos encontrar un par de estructuras que se
encuentran en una gran cantidad de lenguajes de programación: while y for.

y = 12
contador=0
while (y < 20) {
y = y + 1
contador = contador + 1
}
print(contador)
lugares= c("Floridablanca 16", "Piedecuesta 14", "Bucaramanga 14",
"Girón 7")
nodelugar = 0
for (x in lugares) {
t=nchar(x)
nodelugar = nodelugar + 1
print(paste("El lugar numero ", nodelugar, " tiene ", t,
"caracteres"))
}

La instrucción for también se puede ejecutar en una secuencia de números:

for(k in 1:10){
print(k)
}

Finalmente, se puede utilizar la estructura repeat para facilitar la construcción de bucles.


Se puede utilizar también la estructura next y break. Next continua directamente con la
siguiente iteración en el bucle, break finaliza la repetición de forma inmediata:

i=0
repeat{
i=i+1
if(i%%2==0)
next
print(i)
if(i==11)
break
}

Vectores
Una de las estructuras de datos básicas en el lenguaje R son los vectores. Esta estructura,
en esencia, contiene elementos de un único tipo. Estas son particularmente útiles para la
agrupación de elementos.

La manera más simple de crear un vector es usando el constructor c(). El constructor c()
se refiere a la combinación (combine) de elementos que genera un vector. Esto puede ser
usado para unir vectores, y así mismo, agregar elementos a un vector. De esta manera,
podemos agregar o combinar vectores con el fin de realizar diferentes tratamientos de
datos.

a <- c(10,15,20)
b <- c(12,14)

d <- c(a,b)
print(d)

print(a[1])

Se puede eliminar elementos usando el indizado con números negativos

c = d[-2]
print(d)
print(c)

También es posible generar secuencias de números con el operador :; alternativamente


es posible utilizar la función seq()
f <- 2:5
g <- seq(from=1,to=10,by=0.1)

print(f)
print(g)

Puedo utilizar indexación lógica para acceder a algunos de los elementos de un vector:

vector_idx <- 10:50


print(vector_idx%%2==1)
print(vector_idx[vector_idx%%2==1])

Listas y matrices
Listas
Las listas, son similares a los vectores, pero se pueden tener elementos de diferentes
tipos de dato. Para crear una lista, se puede utilizar la instrucción list().

x <- list() # De esta manera podemos crear una lista vacía


print(x)
y <- list(1, TRUE, "Fizz", 3.1) # Y así podemos crear una lista con
datos de cualquier tipo
print(y)

En R, los elementos de una lista pueden tener nombres asociados:

x <- list("Edades" = c(15, 17, 13), "Alturas" = c(1.68, 1.75, 1.40)) #


Creamos una lista dando nombre a cada uno de los elementos
print(x)
y <- list(c(15, 17, 13), c(1.68, 1.75, 1.40)) # O podemos crear la
lista
names(y) <- c("Grados", "Metros") # Y luego añadir los nombres
print(y)
Para acceder a un elemento de una lista con nombre, puedo utilizar el operador $:

x <- list("Años" = c(2001, 2004, 2008), "Bisiesto" = c(FALSE, TRUE,


TRUE)) # Tenemos esta lista
print(x$Año) # Y usando x$[Nombre] podemos acceder a los datos
correspondientes
print(x[2]) # puedo utilizar también los indices numéricos

Matrices
En R las matrices son vectores de 2 dimensiones. La creación de matrices puede hacerse
con el constructor matrix():

x <- matrix(1:4, nrow = 2, dimnames = list(c("X", "Y"), c("Cantidad",


"Altura")))
print(x) # Pasando una lista al parametro dimnames, con los nombres de
las filas y luego las columnas

En una matriz es posible acceder a los datos usando indices numéricos:

x <- matrix(1:9, nrow = 3, dimnames = list(c("X", "Y", "Z"),


c("Cantidad", "Altura", "Temperatura")))
print(x[1, ]) # Podemos acceder a la primera fila de la matrix
print(x[, 2]) # A la segunda columna
print(x[1:2, ]) # De la fila 1 a la 2
print(x[, 2:3]) # De la columna 2 a la 3
print(x[2, 1]) # O al elemento que está en la segunda fila y la
primera columna

Dataframes
Utilizaremos el dataframe cars que se encuentra disponible en R:

df1= cars
tail(df1)
summary(df1)
distancia = df1[,2]
print(distancia)

Para construir un dataframe a partir de un archivo csv, se puede utilizar la instrucción


[Link]. Ejemplo:

df <- [Link]('[Link]', header = T)

Funciones en R
Para definir funciones utilizo la siguiente sintaxis:

suma_3 <- function(n=10){


return(n+3)
}

suma_3()

Las funciones en R como en cualquier otro lenguaje son de suma importancia para evitar
la redundancia en el código y fomentar la reutilización de este. En R las funciones se
definen de la siguiente forma:

suma_bizarra <- function(x, y=2){


if(y%%2==0)
out <- x+y
else
out <- x
return(list(out, y))
}

suma_bizarra(10,6)
Visualización
t=seq(0,2*pi,pi/16)
f=sin(t)

plot(t,f)
boxplot(cars)

Pantallazos del mismo tutorial de R markdown del profesor.

También podría gustarte