Introducción a R

Autores: Amparo Baíllo y José R. Berrendero

Temas

  1. Simulación e inferencia estadística básica
  2. Gráficos
  3. Introducción a la programación en R

Distribuciones de probabilidad

Funciones Prefijos
Función de distribución p
Función cuantílica q
Función de densidad (continuas) o de probabilidad (discretas) d
Generación de números aleatorios r

Distribuciones de probabilidad

Algunas cuestiones:

Simulación

Para obtener n valores sin reemplazamiento del vector x:

x <- 1:5
sample(x, 3)
## [1] 2 5 4

Para obtener n valores con reemplazamiento del vector x:

sample(x, 8, rep=TRUE)
## [1] 2 2 3 4 3 3 4 2

¿Cómo se obtiene una permutación?

Simulación

x = seq(-4,4,0.1)
dN = dnorm(x,mean=0,sd=1)
XN = rnorm(200,mean=0,sd=1)
hist(XN,freq=FALSE)
lines(x,dN,type='l')

Simulación

x <- rnorm(50*1000)
x <- matrix(x, nrow=50, ncol=1000)
medianas <- apply(x, 2, median)
medianas <- replicate(1000, median(rnorm(50)))

Descripción de datos

X = rnorm(1000,3,0.5) # Generamos 1000 datos de una normal de media 3 y desviación típica 0.5.

Histograma de X:

hist(X)

H = hist(X,freq=FALSE) # H es un objeto histograma, con información sobre intervalos y frecuencias

H$breaks
## [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
boxplot(X)

Descripción de datos

mean(X)
## [1] 2.966825
quantile(X,c(0.25,0.75))
##      25%      75% 
## 2.619882 3.282909
sd(X)
## [1] 0.5113741
var(X)
## [1] 0.2615034

Intervalos de confianza y contrastes

Contraste para una proporción

En una encuesta a 200 personas, 130 se han mostrado contrarias a las reformas económicas del gobierno. ¿Podemos decir (a nivel \(\alpha=0.05\)) que más de la mitad de la población es contraria a las reformas?

Principales opciones de prop.test

alternative = c("two.sided", "less", "greater")

p=NULL

conf.level = 0.95

correct = TRUE

Ejemplo

prop.test(130, 200, alternative='greater')
## 
##  1-sample proportions test with continuity correction
## 
## data:  130 out of 200, null probability 0.5
## X-squared = 17.405, df = 1, p-value = 1.51e-05
## alternative hypothesis: true p is greater than 0.5
## 95 percent confidence interval:
##  0.5903019 1.0000000
## sample estimates:
##    p 
## 0.65

Ejemplo

prop.test(13, 20, alternative='greater')
prop.test(130, 200, p=0.6, alternative='greater')

Contraste para una media

Los siguientes datos corresponden al consumo de carne (libras por persona consumidas en un año) en una muestra de 16 personas elegidas al azar en barrios de clase media de pequeñas ciudades norteamericanas:

  118, 110, 117, 120, 119, 126, 115, 112, 112, 113, 122, 125, 130, 115, 118, 123

Con estos datos, ¿se puede afirmar con un nivel de significación de \(\alpha=0.05\), que el consumo medio de carne es superior a 115 libras por persona?

Contraste para una media

x <- c(118, 110, 117, 120, 119, 126, 115, 112, 112, 113, 122, 125, 130, 115, 118, 123)
mean(x)
## [1] 118.4375
sd(x)/sqrt(16)
## [1] 1.414121

Hay que comprobar si \[ \frac{\bar{x}-115}{s/\sqrt{n}} = \frac{118.4-115}{1.414}=2.431 \] es suficientemente grande para hacer la afirmación.

Principales opciones de t.test

alternative = c("two.sided", "less", "greater")

mu=0

var.equal = FALSE

y = NULL

Principales opciones de t.test

paired = FALSE

conf.level = 0.95

Ejemplo

t.test(x, mu=115, alternative='greater')
## 
##  One Sample t-test
## 
## data:  x
## t = 2.4308, df = 15, p-value = 0.01404
## alternative hypothesis: true mean is greater than 115
## 95 percent confidence interval:
##  115.9585      Inf
## sample estimates:
## mean of x 
##  118.4375

Principales opciones de var.test

alternative = c("two.sided", "less", "greater")

ratio=1

conf.level = 0.95

###
Práctica 3: intervalos de confianza y contrastes

Ajuste por mínimos cuadrados

El comando lm se utliza para calcular la recta que ajusta por mínimos cuadrados una nube de puntos

x <- -5:5
epsilon <- rnorm(10, sd=2)
y <- 2 + 3*x + epsilon
## Warning in 2 + 3 * x + epsilon: longitud de objeto mayor no es múltiplo de
## la longitud de uno menor
lm(y~x)
## 
## Call:
## lm(formula = y ~ x)
## 
## Coefficients:
## (Intercept)            x  
##       2.843        2.822

Ajuste por mínimos cuadrados

plot(x,y, pch=16, cex=1.5, bty='l')
abline(lm(y~x), lwd=2, col='red')
abline(a=2, b=3, lty=2)

Gráficos

Gráficos: comandos de alto nivel

Uso Argumento
Tipo de gráfico (puntos, líneas) type='l'
Leyendas de los ejes xlab=, ylab=
Rango de los ejes xlim=c(min,max), ylim=c(min,max)
Título main=
Subtítulo sub=

Gráficos: comandos de bajo nivel

Los que más se usan son:

Uso Commando
Añadir puntos \((x_i,y_i)\) points(x,y)
Añadir líneas lines(x,y)
Dibuja una recta \(y=a+bx\) abline(a,b)
Dibuja una recta \(y=c\) abline(h=c)
Dibuja la recta de regresion abline(lm(y~x))
Añade título title()
Añade una leyenda en \((x,y)\) legend(x,y,legend)

Gráficos: parámetros

Gráficos: parámetros

Algunos de los parámetros más usados

Parámetro Uso
bg Color del fondo (véase colors())
bty Tipo de ejes (‘o’,‘l’,‘c’,‘7’,‘u’,‘]’
cex Tamaño de los símbolos y texto
col Color de los símbolos y texto
lty Tipo de líneas (1, continua; 2, discontinua; 3, puntos;…)
lwd Ancho de líneas (por defecto, lwd=1)
pch Tipo de símbolo

Gráficos: ejemplo

x <- rnorm(50)
y <- x + rnorm(50, sd=0.5)
plot(x,y,cex=1.1,pch=16,col='blue',bty='l')
abline(lm(y~x), lwd=2,col='red',lty=2)

Representa los siguientes gráficos

Función seno entre 0 y \(2\pi\) (en color azul, línea el doble de gruesa)

Representa los siguientes gráficos

Función coseno entre 0 y \(2\pi\) (en color rojo, línea discontinua)

Representa los siguientes gráficos

Cambiamos el tipo de ejes y añadimos línea vertical gruesa en \(\pi\)

Representa los siguientes gráficos

Añadimos un punto en \((4,0)\)

Representa los siguientes gráficos

Añadimos título y leyenda:

Código final completo

x <- seq(0, 2*pi, 0.01)
y <- sin(x)
plot(x,y, t='l', col='blue', lwd=2, bty='l')
lines(x, cos(x), col='red', lty=2)
abline(v=pi, lwd=3)
points(4,0,pch=16)
legend('bottomleft', c('seno','coseno'),lty=c(1,2),lwd=c(2,1),col=c('blue','red'))
title('Funciones seno y coseno')

Gráficos en paneles

x <- rnorm(50)
y <- x + rnorm(50, sd=0.5)
layout(matrix(1:4, 2))
hist(x)
boxplot(x)
plot(x,y)
plot(x,y)
abline(lm(y~x))

Gráficos en paneles

Matriz de diagramas de dispersión

colores <-c(rep('red', 50), rep('green', 50), rep('blue', 50))
pchn = 21
pairs(iris, bg=colores, pch=pchn)

Matriz de diagramas de dispersión

Introducción a la programación con R

nombre <- function(arg1=val1,arg2=val2,...){
...
expresiones de R
...
}

Introducción a la programación con R

Antes de utilizar una función hay que cargarla en el área de trabajo. Para ello, hay varias alternativas:

  1. Escribir el código directamente en la consola (solo funciones muy sencillas)
  2. Escribir el código en un fichero de texto, marcarlo con el ratón y copiarlo en la consola (o usar el botón Run en RStudio)
  3. Escribir el código en un fichero de texto, guardar el fichero en el directorio de trabajo y ejecutar source(fichero)
Práctica 5: introducción a la programación

Elaboración de informes dinámicos

Esquema de trabajo

Tenemos que seguir los pasos siguientes:

Algunas opciones respecto al código

Argumento Opción por defecto Efecto
eval TRUE Ejecuta el código e incluye los resultados
echo TRUE Se incluye el código junto con los resultados
warning TRUE Incluir los avisos
fig.width 7 Anchura (en pulgadas) de los gráficos
fig.height 7 Altura (en pulgadas) de los gráficos

Ejercicio

En este fichero tenéis los resultados (años 2009 y 2010) de las pruebas de nivel que la Comunidad de Madrid realizó en los colegios de primaria.

El fichero contiene tres variables: tipo (colegio público, concertado o privado), nota09 (el resultado medio de cada colegio en 2009) y nota10 (el resultado medio de cada colegio en 2010).

Escribir un breve informe dinámico que incluya una descripción gráfica de estos datos.