Uso: Emplee la herramienta de búsqueda por palabra (en Google Chrome es "Ctrl+F") para encontrar información sobre el comando que usted requiera.


Aspectos generales

  • Consultar sobre un comando en R
    ?nombre_del_comando
    Ejemplo:
    ?boxplot

  • Exportar archivo de código R hacia PDF, Microsoft Word o HTML
    Resulta útil para ahorrar tiempo al momento de presentar las soluciones en las evaluaciones.
    Abrir en RStudio el archivo .R que desea exportar y presione “Ctrl+Shift+K”.
    Seleccione en cuál de los tres formatos presentados desea exportar el archivo y listo.
    Importante: Es posible que necesite instalar la librería “knitr” para que funcione la exportación; así que, si no funcionó, ejecute install.packages("knitr") en la consola de RStudio y después intente de nuevo.
    Importante: Tenga cuidado con la longitud de las líneas de código en su archivo, pues, tras exportar el archivo via “Ctrl+Shift+K”, si una línea de código es muy larga, esta no se escribirá por completo en el archivo exportado. Por ejemplo, si intenta exportar un archivo que contenga la siguiente línea:

datos <- haven::read_sav("http://portal.susalud.gob.pe/wp-content/uploads/archivo/base-de-datos/2015/CUESTIONARIO%2001%20-%20CAPITULOS.sav")
  • Uso de tildes
    Si empleas tildes en tu código, selecciona la opción UTF-8 al momento de guardar el archivo para ellas no desaparezcan. Asimismo, cuando cargues un archivo con tildes, selecciona en RStudio "File" y luego "Reopen with encoding" para que se muestren en el código.

  • Ejecutar código seleccionado
    Resaltar el código relevante y presionar "Ctrl+R".

  • Vaciar la consola de RStudio
    Ingrese a la consola y presione "Ctrl+L"

  • Data environment
    "obs." y "variables" se pueden interpretar como filas y columnas de un dataset, respectivamente.

  • Convertir código en comentario
    Resalta el texto que quieres que sea comentario y presiona "Ctrl+shift+C".

  • Crear una función
    Ejemplos:

reescalar <- function(x) 3*x 

media <- function(x){
   suma  <- sum(x)      # suma
   n     <- length(x)   # número de elementos
   media <- suma/n      # calcula media 
   media
}
  • Código más ordenado en RStudio
    #* subtítulo ----
    Apretar "Ctrl+Shift+O" para abrir el menú de subtítulos.

  • Redondear número para obtener un entero

round(n,0)  # Redondear a "n" sin decimales.
  • Añadir un elemento a una lista
lista <- append(lista,elemento)  # 'elemento' se añade al final de 'lista'.
lista <- append(elemento,lista)  # 'elemento' se añade al inicio de 'lista'.
  • Cantidad de filas
    nrow(datos)

  • Lista de valor repetido

rep(valor,n)  # Donde "m" es la cantidad de veces que desees se repita ese "valor" fijo pero arbitrario.
  • Lista formada por las sumas por filas de un data set
    rowSums(datos)

  • Lista de progresión aritmética

seq(a,b,by=n) # Lista de "a" a "b", via incrementos de n.
  • Convención de R para cálculo de proporciones
    Por defecto, R considera las proporciones sobre los casos que no son NA, es decir, de la forma: #casos_favorables/(#casos_totales - #valores_NA_en_el_dataset) .


Manipulación de los datos

  • Ver las primeras n filas de los datos
    head(datos,n)

  • Ver las últimas n filas de la datos
    tail(datos,n)

Lectura de los datos

  • Asignar directorio para cargar archivos
setwd("C:/")  # En este caso asignamos el disco C como directorio.
  • Archivos de tipo .csv
library(haven)
datos <- read.csv("datos_edadesposos.csv")  
names(datos)  # Ver los nombres de las columnas.
  • Buscar a mano el archivo, iniciando en el directorio seleccionado.
library(haven)
datos <- read.csv(file.choose())
  • Archivos de excel
library(readxl) 
setwd("C:/Users/HP/Downloads/") 
datos <- read_excel("datos_edadesposos.xlsx") 
  • Para escoger el archivo excel a mano
library("readxl") 
datos <- read_excel(file.choose())
  • Desde enlace web
enlace <-"https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer/breast-cancer.data" 
datos <- read.table(enlace, sep=",",stringsAsFactors=TRUE)

# En caso sea un archivo de tipo .sav: 
library(haven) 
datos<- read_sav("http://portal.susalud.gob.pe/wp-content/uploads/archivo/base-de-datos/2015/CUESTIONARIO%2002%20-%20CAPITULOS.sav")

datos <- haven::read_sav("http://portal.susalud.gob.pe/wp-content/uploads/archivo/base-de-datos/2015/CUESTIONARIO%2001%20-%20CAPITULOS.sav")
  • Exportar un data.frame de R a un archivo en Excel
# Llamemos datos a un data.frame ya definido previamente en el código. 
library(writexl) 
write_xlsx(datos,"directorypath/nombre-del-archivo-por-crear.xlsx")
  • Exportar un data frame de R a un archivo .csv
write.csv(nombre_data_frame,"nombre_archivo.csv", row.names=T) 
# El "row.names = T" es para preservar la separación via columnas que posee el data frame por exportar.
  • Conseguir qué variables se presentan en los datos
etiquetas_todos <- sapply(datos, attr,"label") 
DT::datatable(data.frame(etiquetas_todos))
  • Conseguir los labels de las variables del data frame (datos)
    library(labelled)
    val_labels(datos)

  • Obtener ciertos elementos de un data frame
    Ejemplos:

# Considere un data frame llamado "datos"
datos[1:5,]
datos[c(1,4,5),]
datos[datos$bmi > 40,]
datos[datos$bmi < 40 & datos$edad > 50,]
  • Cambiar los nombres de las variables en un data.frame
colnames(datos) <- c("nombre.1","nombre.2",...,"nombre.n") 
rownames(datos) <- c("nombre.1","nombre.2",...,"nombre.n")
  • Resumen de los datos
summary(datos) # También te muestra la cantidad de valores "NA" en "datos".

# También puedes usar:
library(skimr)
skimr::skim(datos)
  • Gráfico de barras
table(datos)  # Muestra en la consola los resultados respecto a las frecuencias. 
barplot(table(data),xlab="titulo x",ylab="Frecuencia",main="Distribución de x")  

# Para datos numéricos puedes usar table:
nombre_tabla <- table(datos > 5)  # Te devuelve las cantidades de valores en "datos" mayores y menores, respectivamente, que 5. 
nombre_tabla
# En ese caso, puedes acceder a los elementos de tal tabla via los comandos nombre_tabla[1] y nombre_tabla[2] 
# También puedes emplear prop.table(table(datos > 5)) .
  • Frecuencia acumulada
    barplot(cumsum(lista_de_frecuencias_de_los_datos))

  • Porcentaje acumulado
    barplot(100*( (cumsum(lista_de_frequencias_de_los_datos)) / sum(lista_de_frequencias_de_los_datos) ) )

  • Proporciones de las frecuencias de los datos

prop.table(table(datos)) 

# Más ordenado y compacto que prop.table . 
janitor::tabyl(datos) 

# Parecido al comando anterior, pero mejor. 
summarytools::freq(datos, order = "freq")   
  • Histograma
hist(datos)  # Las alturas de los rectángulos son las frecuencias 
hist(datos,prob=T) # Las alturas de los rectángulos son la proporción respecto a la frecuencia. 
lines(density(datos)) # Graficar encima del histograma la aproximación de la función densidad. 
  • Mostrar más de un histograma en un mismo gráfico
# Ejemplo: 
set.seed(42) 
p1 <- hist(rnorm(500,4))                     # centered at 4 
p2 <- hist(rnorm(500,6))                     # centered at 6 
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,10))  # first histogram 
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,10), add=T)  # second 
  • Diagrama de caja
boxplot(datos) 
boxplot(datos, outline = FALSE) # No graficar los valores atípicos.

# Añadir un boxplot encima de otro boxplot, en el mismo gráfico 
boxplot(datos.1) 
boxplot(datos.2,add=TRUE,border="red")
  • Obtener solo los datos de tipo distinto a "NA"
    nuevos.datos <-subset(datos, !is.na(datos))

  • Diagrama de cajas comparando una variable cuantitativa con una cualitiativa
    boxplot(datos$variable.cuantitativa ~ datos$variable.cualitativa, datos)
    Ojo que debe ser en ese orden, primero la variable cuantitativa (eje Y), y luego la variable cualitativa (eje X).

  • Boxplots múltiples en una misma imagen, respecto a categorias dentro de categorías  

# Ejemplo: 
library(readxl) 
setwd("C:/Users/HP/Desktop/") 
datos <- read_excel("Mate_II_PCs_Secciones_A_y_D.xlsx") 
notas = data.frame(Sección = datos$Seccion,PC1 = datos$PC1,PC2= datos$PC2,PC3 = datos$PC3,PC4 = datos$PC4) 
tabla <- reshape2::melt(notas, id.var = "Sección", value.name ="Nota",variable.name = "Práctica") 
require(ggplot2) 
ggplot(data = tabla, aes(x=Práctica, y=Nota) + geom_boxplot(aes(fill=Sección)) )
  • Tabla de contingencia
tabla_conti <- table(datos.1,datos.2) 
tabla_conti 
tabla1 <- 100*prop.table(tabla_conti, margin=1)  # margin = 1: porcentaje por filas; =2, por columnas. 
round(tabla1,2) 

# Ejemplos: 
factor1 <- factor(c("<6",">=6")) 
normal <- c(70,198) 
sobrepeso <- c(12,14) 
tabla <- data.frame(Tiem_lac_exc = factor1, normal,sobrepeso) 
tabla
  • Función densidad
    No es bueno usar cuando tienes pocos datos. Si tienes más de 50 datos, úsala entonces.
    density(datos)
    plot(density(datos))

  • Función densidad acumulada

Fn = ecdf(datos) 
# Por convención, ecdf(.) descarta los valores de tipo NA en la dataset "datos". 
plot(Fn,xlab="data",ylab="Densidad acumulada",main="Función de densidad acumulada") 
lines(ecdf(datos.2),col=2) # Inserta otra función densidad sobre la misma gráfica. "Col" asigna un cierto color. 
Fn(m) # Proporcion de datos cuyo valor es menor o IGUAL a m.
  • Mostrar más de un gráfico en la misma imagen
# Ejemplo: 
par(mfrow=c(1,2))  # mfrow=c(1,n) es para tener n gráficas en una misma imagen. 
barplot(100*prop.table(tabla_sexo), ylim=c(0,100),names.arg = c("Hombre","Mujer"), ylab="Porcentaje") 
barplot(100*prop.table(tabla_contrato), ylim=c(0,100),col=1:6, ylab="Porcentaje",xaxt="n") 
  • Gráfico de variable discreta con las imagenes unidas via líneas punteadas
    plot(variable_discreta, valores_asociados)
    lines(variable_discreta,valores_asociados,lty=2)

  • Más detalle en los ejes de una gráfica
    # Ejemplo:

axis(1, seq(0,10,1))    # axis(2, rango_en_eje_y)
  • Resaltar puntos en el gráfico
# Ejemplo: 
x <- (-1):10 
points(x,ppois(x, lambda = 2.5), col = "dark red", pch=19) 
  • Graficar una función
# Ejemplo: 
f <- function(x) (1/60)*exp(-x/60) 
plot(f(-1:500), type='l')
  • Vector de resultados tras evaluar una cierta función
# Ejemplo: 
f <- function(x) (1/60)*exp(-x/60) 
F <- function(x) integral(f, 0, x) 
sapply(0:10,F) # Lista formada por F(i) con i en {0,1,2,...,10}.
  • Incluir leyenda en el gráfico
# Ejemplo: 
# Datos 
plot(prop.table(table(datos$Y)),xlab="Y",ylab="Proporción",ylim=c(0,0.3)) 
# Modelo 
points(0:max(datos$Y) +0.1,dpois(0:max(datos$Y),2),type='h', xlab='',ylab='',col=2, ylim=c(0,0.3)) 
# Leyenda 
legend(4,0.6, legend=c("Modelo","Datos"), col=c("red","blue"), pch=15,bty="n")
# 4: coordenada x , 0.6: coordenada y
# bty = "o"  # Incluir caja alrededor de la leyenda 
# bty = "n"  # No incluir aquella caja.
  • Graficar función escalonada
    Basta emplear type = "s" dentro del plot( … ) adecuado.


Medidas de tendencia central y de dispersión

  • Mediana
    median(datos)

  • Media
    mean(datos)

  • Cuantiles

# cuantil p de un dataset "datos":
quantile(datos, p)
# cuartiles de un dataset "datos":
quantile(datos,probs=c(0.25,0.5,0.75))
  • Rango
    range(datos)

  • Rango intercuartílico
    IQR(datos)

    Interpretación:
    Podemos interpretar el rango intercuartil como que la mitad de los valores obtenidos están concentrados en
    un intervalo [Q1,Q3] de tamaño Q3 - Q1.

  • Desviación estándar
    sd(datos)

  • Coeficiente de variación
    CV <- sd(datos)/mean(datos)
    Básicamente, CV<10 es muy bueno, entre 10 y 20 es bueno, entre 20 y 30 es aceptable y CV>30 no es bueno.

  • Coeficientes de asimetría

    • De Fisher
    Fisher <- function(x) mean((x - mean(x))^3)/sd(x)^3 
    Fisher(data_numerica)
    • De Pearson
    Pearson <- function(x) 3*(mean(x) - median(x))/sd(x) 
    Pearson(data_numerica)
  • Valores atípicos

# MANERA LENTA 
# Límite superior 
Ls = quantile(datos,0.75) + 1.5*IQR(datos) 
# Límite inferior 
Li = quantile(data,0.25) - 1.5*IQR(data) 
atipicos <- datos[datos > Ls | datos < Li] 
atipicos 
length(atipicos) # Cantidad de valores atípicos 
length(datos)    # Cantidad de datos. 

# MANERA RÁPIDA 
b <- boxplot(datos) 
b$out # Devuelve una lista formada por los valores atípicos. 
length(b$out) # Cantidad de valores atípicos.  

# Si ejecturas "b" (nombre del boxplot) en la consola, obtienes relevante sobre tal boxplot. 
# Basta la existencia de al menos un valor atípico para ya considerar al rango intercuartilico como mejor medida de dispersión que la desviación estándar. De manera análoga para la media y la mediana.


Modelo de regresión lineal simple

  • Gráfico de dispersión
    plot(datos.x,datos.y)

  • Añadir recta al gráfico 2D
    abline(a,m)
    Inserta la recta y = m*x + a en el gráfico 2D mostrado.

  • Cálculo a mano de beta0 y beta1

sd.y   = sd(data_y) 
# Si obtiene "NA", use sd(data,na.rm=T). Es para evitar las entradas vacías en nuestra data. 
sd.x   = sd(data_x) 
cor.xy = cor(data_y,data_x) 
mean.x = mean(data_x)
mean.y = mean(data_y) 
beta1  = cor.xy*sd.y/sd.x 
beta0  = mean.y - beta1*mean.x 
beta0 
beta1
  • Buscar mejor emparejamiento
pairs(data)   # Graficos de dispersión 
cor(databmi)  # Matriz de correlaciones
  • Recta de ajuste
recta = lm(datos_y ~ datos_x,datos) 
# data_y es la variable a ser explicada, la dependiente. 
# Con data_x y data_y dentro de data, como categorías. 
recta # Para ver beta0 y beta1

# También puedes ejecutarlo así: 
recta  = lm(datos$datos_y,datos$datos_x)

# Para añadir esa recta sobre el grafico relevante de dispersion, puedes emplear: 
abline(coef(recta))

# Línea vertical: 
abline(v = valor_de_x_fijo, lty = 2)    # lty también puede valer otros enteros positivos.

# Línea horizontal: 
abline(h = valor_de_y_fijo,col = n) # Donde n es un entero positivo o string como "blue".
  • Revisar qué tan bueno es ese ajuste lineal
# R-cuadrado y R-cuadrado ajustado 
summary(recta) 
library(performance) 
performance(recta)    

# Comentario de la profesora para añadir a conclusiones: 
# Para un modelo lm(Y~X) donde R^2 = 0.65: el modelo explica el 65% de la variabilidad de Y (la variable que estamos modelando). 
# Para un modelo lm(Y~X) donde R^2 ajustado = 0.65: Ajustando por el número de variables, 
# el modelo explica el 65% de la variabilidad de Y (la variable que estamos modelando).
  • Comparar rectas de ajuste lineal
    Tienes dos rectas de ajuste lineal obtenidas via lm(…): recta1 y recta2
    library(performance)
    compare_performance(recta1,recta2)
    Puedes incluir más de 2 argumentos dentro de compare_performance().

  • Caso cuando se usa una variable cualitativa en un modelo de regresión lineal simple

# Ejemplo: datos que represente datosvef.csv 
modelo <- lm(vef ~ sexo, datos) # Donde sexo es "Hombre" o "Mujer" 
# En ese caso, R le asigna por su cuenta valores numéricos a "sexo" para poder hacer el modelo de regresión lineal 
# Puedes ver qué valores numéricos les asignó R via el comando: 
contrasts(factor(datos$sexo)) 
# Lo que está dentro de contrasts() debe ser de tipo "factor", por eso se le añade "factor" si es necesario. 


Regresión múltiple

# Ejemplos: 
modelo  = lm(variable_y ~ variable_x + variable_z) # Donde la variable_y es la que desea explicarse. 
modelo  # Ver los beta_i 
summary(modelo)
  • Predicciones del modelo
modelo  = lm(variable_y ~ variable_x + variable_z,datos) # Las variables z, x e y como parte de "datos". 
modelo 
datos_predichos <- predict(modelo, datos) 
# La función predict considera las variables denotadas en el lm de "modelo", por eso es que no requieres 
# añadir en el código que consideras cierta variable de "datos" nomás, no todo "datos".
  • Cálculo de un indicador de la eficiencia de ese modelo
residuales <- datos - datos_predichos 
sum(residuales^2) 
# También puedes usar ese indicador, suma de cuadrados de los errores, para comparar modelos. 
# Pero tal valor no considera el tamaño de la muestra. 
mean(residuales^2)          # También es válido como indicador. 
(mean(residuales^2))^0.5    # Error cuadrado promedio


Muestreo

  • Números pseudoaleatorios
set.seed(n)   # Donde n es un número cualquiera. 
sample(poblacion, size = m, replace = T)  
# El comando set.seed() debe estar justo una línea antes de usar sample.
  • Simple
sample(x=200, size =20 , replace=T) # x: Tamaño de poblacion, size: tamaño de muestra, replace = T: Muestreo con reposición.
sample(x=200, size =20 , replace=F) # x: Tamaño de poblacion, size: tamaño de muestra, replace = F: Muestreo sin reposición. 
poblacion <- 1:100 
sample(poblacion,size=10,replace=T)
  • Estratificado
    Nos fuerza a que se representen las partes de la población, incluso si son pequeñas.
    En ese sentido, hacer un muestreo simple para una encuesta nacional del Perú estaría mal.
    Puede ser con o sin reposición.

    Ejemplo:
    En la población, 2/3 son del estrato A y 1/3 es del estrato B. Entonces, en la muestra escogeremos lo siguiente:

    sample(poblacion [1:20] , size =10 , replace = T) # 2/3 
    sample(poblacion [21:30] , size =5 , replace = T) # 1/3


Diseños de estudio

  • Estudio ciego
    Queremos que las personas en los grupos no sepan qué están recibiendo, para que no alteren su comportamiento.


Aleatorización

  • Tiro de moneda justa
    sample(c(0,1), numero.de.tiros, replace=T)

  • Comparar los cuartiles entre grupo control y el otro
    by(datos$edad,datos$grupo,summary)

  • Comparar desviación entre grupo control y el otro
    by(datos$edad,datos$grupo,sd)

  • Selccionar aleatoriamente 2 grupos de un data set

# Tenemos un data frame llamado "datos". 
set.seed(2021) # Semilla cualquiera 
filas.seleccionadas <- sample(1:nrow(datos),tamaño.grupo.1) 
# Usualmente se escoge que el tamaño del grupo sobre el cual se crea el modelo sea  
# el 70% del tamaño de "datos" (grupo total/inicial) 
data.grupo.1 <- datos[filas.seleccionadas,] 
data.grupo.2 <- datos[-filas.seleccionadas,]  # Todas las filas, excepto por las asociadas a filas.seleccionadas.


Probabilidad

  • Obtener espacio muestral asociado a un experimento y cierta probabilidad
# Ejemplo con tiro de dos dados: 
library(prob) 
posibles_resultados = 1:6 
espacio_muestral = urnsamples(posibles_resultados,size = 2,  # Número de dados lanzados. replace = T, # Reemplazo. ordered = TRUE) # ¿Importa el orden? Sí: TRUE 
# Tamaño del espacio muestral 
n.omega <- dim(espacio_muestral)[1] 
# Evento A: La suma de los resultados es mayor a 5 
# número de elementos en A:
cond_A  =  (rowSums(espacio_muestral) > 5) # rowSums: suma de elementos de una fila. 
# cond_A es una lista formada por TRUE o FALSE, en caso cumplan la condición los casos testeados. 
nA = sum(cond_A) 
nA 
# Probabilidad 
pA = nA/n.omega 
pA 
# Evento B: La diferencia de los resultados es 2 
cond_R = (abs(espacio_muestral$X1 - espacio_muestral$X2) == 2) 
sum(cond_R)/nOmega # Probabilidad deseada
  • Técnicas de conteo

    • Factorial
      factorial(n) # n!

    • Permutación
      permutacion = function(n,k) factorial(n)/factorial(n-k) # permutacion(4,2)

    • Combinatoria
      combinatoria = function(n,k) factorial(n)/(factorial(k)*factorial(n-k)) # combinatoria(4,2)

  • Independencia
    Respecto a 2 variables en una base de datos, podemos revisar si ambas variables (eventos) son independientes via el uso de una apropiada tabla de contingencia.


Variables aleatorias

  • La profesora recomienda que cuando comparemos un modelo probabilístico con un conjunto de datos,
    hagamos la comparación con el histograma de los datos, no con la aproximación de la función densidad
    de los datos (density(datos)), puesto que, si el tamaño del data set es pequeño, esto sesgaría a la   función densidad empírica.

  • Esperanza y varianza

    Interpretación
    E(X): Es el valor al que se aproxima la media de los resultados obtenidos en los experimentos, a medida que realizemos cada vez más de estos. Si X es una variable aleatoria continua, entonces también puede interpretarse E(X) como el valor que esperaríamos observar al realizar el experimento asociado a X.

    Var(X): Es el cuadrado de cuanto se espera que varien los valores del experimento con respecto a su valor esperado.
    Un valor grande (pequeño) significa que los resultados del experimento varian bastante (poco) con respecto a su valor esperado.

  • Maneras de presentar la gráfica de la funcion de probabilidad f(x)

# Ejemplo: 
plot(dbinom(1:50,50,0.5),type="p")   # Puntos en la gráfica 
plot(dbinom(1:50,50,0.5),type="l") # Líneas en la gráfica (medio que la hace parecer continua a a gráfica de variable discreta)
  • Distribución Bernoulli
library(Rlab) 
# Función de distribución 
dbern(0,prob=0.7) # Probabilidad de que falle el experimento, cuando la proabilidad de éxito vale 0.7.

# Función de distribución acumulada 
pbern(0, prob=0.7) # Vale 0.3 . 
pbern(1, prob=0.7) # Vale 1 .

# Simulación 
rbern(n,prob=p) # n es la cantidad de datos que quieres para la simulación.
  • Distribución Binomial
# Función de distribución 
dbinom(0, size=10, p=0.5) 
# Size es la cantidad de experimentos Bernoulli independientes realizados; p, la probabilidad de éxito del experimento de Bernoulli.

# Función de distribución acumulada 
pbinom(m, size=10, p=0.5)

# Simulación 
rbinom(n,size,p)
  • Distribución hiper geométrica
    Parecida a la binomial, pero se realizan los experimentos SIN reposición, mas, aún de manera independiente.
    Cuando la población es mayor que 100 y la probabilidad de éxito es menor o igual a 10%, entonces se puede aproximar via una binomial.

    Denotemos las siguientes variables:
    x: Número de éxitos en la muestra.
    m: Número de éxitos en la población.
    n: Número de fracasos en la población.
    k: Número de extracciones realizadas (tamaño de la muestra seleccionada)

    dhyper(x,m,n,k)  # m: número de éxitos, n: número de fracasos, k: tamaño de la muestra 
    phyper(x,m,n,k)  # Probabilidad acumulativa 
    qhyper(x,m,n,k) 
    rhyper(cantidad_de_datos_por_simular,m,n,k)
  • Distribución Poisson

dpois(x,lambda) # P(X=x)  
ppois(x,lambda) # Probabilidad acumulativa 
qpois(x,lambda) 
rpois(n,lambda)

Variables aleatorias continuas

  • Cálculo (eficiente) de los cuartiles de un modelo probabilístico
# Ejemplo: 
# Definamos la función de densidad 
densidad <- function(x) (3/100^3)*(x^2) # Con x entre 0 y 100. 

# Función de distribución acumulada 
densi_acumulada <- function(x) pracma::integral(densidad,0,x) # Con x positivo. 

auxiliar <- function(x,cuantil_deseado) abs(densi_acumulada(x)-cuantil_deseado) 
# Cuantil 0.5 
optimize(auxiliar,c(0,100), 0.5)$minimum

# optimize(funcion_auxiliar, extremos del intervalo sobre el cual se va a buscar el cuantil pedido ( [0;100] en el ejemplo pasado) , valor entre 0 y 1)  
  • Integrar función densidad
library(pracma) 
# Ejemplo: 
funcion.densidad <- function(x) (1/60)*(exp(-x/60)) 
integral(funcion.densidad,0,60)    # P(0 < X < 60) 
integral(funcion.densidad,60,Inf)  # P(60 < X > infinito) 
# Puedes emplear -Inf como "menos infinito", siempre y cuando la integral por calcular serep de antemano que converge.
  • Exponencial
    dexp(x, rate = lambda)
    pexp(q, lambda)
    qexp(p, lambda)
    rexp(n,lambda)

  • Ejemplo de comparación entre modelo exponencial y datos

# Modelo vs Datos 
library(haven) 
# Encuesta Nacional ENSUSALUD 2015: Pacientes 
salud.paciente <- read_sav("http://portal.susalud.gob.pe/wp-content/uploads/archivo/base-de-datos/2015/CUESTIONARIO%2001%20-%20CAPITULOS.sav") 
# Datos de pacientes: Duración de atención 
attr(salud.paciente$C1P14,"label") 
hist(salud.paciente$C1P14,prob=T, xlab="Duraciónn de atenciónn", ylab="Densidad",main="") 
x  = seq(0,80,by=0.1) 
points(x,dexp(x,rate=0.08),col=2,type="l") 
points(x,dexp(x,rate=0.09),col=3,type="l") 
points(x,dexp(x,rate=0.1),col=4,type="l") 
legend(50,0.08,legend=c(0.08,0.09,0.1), title = expression(lambda), bty ="n",pch=15,col=2:4)
  • Función Gamma
    Esto es extra al tema de v.a. continuas, pero lo incluyo acá pues podría ser necesario usarse en las dos siguientes distribuciones.
    gamma(x)

  • Distribucion Gamma

dgamma(x, shape, rate)    # = dgamma(x,r,lambda)  # rate = tasa 
pgamma(x, shape, rate) 
qgamma(x, shape, rate)
rgamma(n,r,lambda)
  • Distribucion Weibull
dweibull(x, shape, scale)  # = dweibull(x,alpha,beta) # scale = 1/rate (= 1/lambda, cuando shape vale 1) 
pweibull(x,alpha,beta) 
qweibull(x,alpha,beta)
rweibull(n,alpha,beta)
  • Distribución Normal
dnorm(x,media,desviacion.estandar) 
pnorm(x,media,desviacion.estandar) 
qnorm(x,media,desviacion.estandar) 
rnorm(n,media,desviacion.estandar)
  • Distribución Student
dt(x, df) # df = Degrees of freedom "=" número de observaciones - 1 (como lo usaremos en el curso) 
pt(q, df) 
qt(p, df) 
rt(n, df)


Intervalo de confianza

  • Para el caso C contemplado en clase (semana 14):
# Forma rápida de hallar el intervalo de confianza: 
t.test(datos, conf.level = 0.95) 
# Podemos usarlo en el caso B también, pero mínimo debe cumplirse que el tamaño de la muestra es mayor o igual a 30.
  • Prueba de hipótesis
t.test(datos,mu=media_planteada,conf.level = 0.95) 
# Por default, t.test considera significancia de 5% . 

Ejemplo:
\(H_0 : \mu \leq 50\)
t.test(datos,mu=50, alternative = "greater")

\(H_0 : \mu \geq 50\)
t.test(datos,mu=50, alternative = "less")