Está en la página 1de 11

Apuntes de Metodos Estadsticos con R

Prof: Mara Ignacia Vicuna


Pontificia Universidad Catolica de Chile

1. Introduccion
R es un software estadstico de libre acceso el cual puede ser utilizado en diferentes sistemas ope-
rativos como Windows, MacOS y Linux. R es un lenguaje de programacion en el que se introducen
codigos para posteriormente ser ejecutados. Una de las grandes ventajas de R es que es un pro-
grama de codigo abierto en el que miles de personas de todo el mundo colaboran en el desarrollo
de nuevas metodologas, de manera que se pueden acceder a los paquetes descargandolos como
tambien compartir los propios paquetes con otros.

2. Preliminares
2.1. Instalacion de R
La descarga del archivo de instalacion de R se realiza desde uno de los links de abajo dependiento
del sistema operativo:

Microsoft Windows: http://cran.r-project.org/bin/windows/base/


MacOS: http://cran.r-project.org/bin/macosx/
Linux: http://cran.r-project.org/bin/linux/

2.2. Consola y Editor de R


En la consola de R, se puede escribir directamente el codigo de R, y pulsar enter para ver el
valor. Sin embargo, esta no es la manera mas eficiente de trabajar en R. Si se quiere guardar el
trabajo, corregirlo, repetirlo, etc, es mas conveniente usar el editor de R. Se debe seleccionar
archivo, nuevo Script (documento en blanco del editor) en el cual se puede escribir los programas
y guardar. En sistema Windows, para mayor comodidad, se puede seleccionar la opcion Dividir
verticalmentedel menu Ventana de la consola. La ejecucion del codigo desde el script se hace desde
cualquier posicion de la lnea o seleccionando

Windows: tecla F5 o Control+R


MacOS: comand + enter

Se puede incluir comentarios que R no leera si utilizamos el smbolo # al comienzo de la lnea.

1
2.3. Instalacion de Paquetes
R contiene dos tipos de paquetes, los del tipo Base los cuales estan incorporados automaticamente
en la instalacion de R, y los paquetes de contribucion los cuales se deben descargar para su ins-
talacion. Ejecutando el comando getOpcion() en la consola se obtiene las aplicaciones que contiene
el paquete base

getOption("defaultPackages")
"datasets" "utils" "grDevices" "graphics" "stats" "methods"
library(help = "datasets")

Existe una gran variedad de paquetes de contribucion que son aporte de personas a lo largo del
mundo (los cuales son gratuitos). Se requiere conexion a internet para descargarlo e instalarlo y se
debe ejecutar

install.packages("nombre")

Una vez instaslado el paquete se carga con el comando library(nombre)

2.4. Operaciones Basicas en R


2.4.1. Funciones Comunes
suma: + raz cuadrada: sqrt() tangente: tan() productoria: prod()
resta: - elevado: logaritmo: log() exponencial: exp()
multiplicacion: * coseno: cos() : pi() valor absoluto: abs()
division: / seno: sin() sumatoria: sum() ordenar: sort()

2.4.2. Tipos de Objetos


variable: x = 3+4
vector: x = c(1,2,3,4,5)
secuencia: x=seq(-1,1,0.05)
repeticion: x = rep(1,100)
vector con caracteres: x = c("Probabilidades", .Estadstica")
matriz: A<-matrix(c(1,2,3,4,5,6,7,8,9),ncol =3,nrow = 3)
multiplicacion matrices: A %* %A

2.4.3. Operaciones Logicas

<, >, <= y >= son los operadores menor, mayor, menor igual y mayor igual respectivamente.
== es el operador de igualdad.
& , | son los operadores y,o respectivamente.

2.4.4. Ayuda de R

Signo pregunta + el nombre del comando: Por ejemplo: ?matrix

2
3. Manejo de Datos
3.1. Importar Datos
Importar datos de archivo texto: read.table(), la cual tiene muchas opciones, pero las mas im-
portantes son read.table(archivo.txt",header=FALSE,dec=".") donde

archivo.txt archivo que se quiere importar


header TRUE si la primera lnea del archivo contiene nombre de las variables
dec caracter que separa los numeros decimales

Tambien se puede usar comando read.table(file.choose()) donde da la opcion de buscar el


archivo.

Importar datos de archivo excel: desde la hoja de datos seleccionando el area deseada y se copia en
el portapapeles usando ctrl+c en Windows o cmd+c en MacOS y luego se ejecuta en R:

Windows: datos = read.table(clipboard")


MacOS datos = read.table(pipe("pbpaste"))

3.2. Exportar Datos


Se exportan datos de tipo texto con el comando write.table().Las opciones mas habituales son:

write.table(Datos,file= "archivo.txt",sep="\t",na="NA",dec=".")}.

Los nuevos datos se guardaran en la ubicacion del directorio que se esta usando. Para ver cual es el
directorio que esta usando R, se usa el comando getwd() y para cambiar la ubicacion del directorio
se usa el comando setwd(). Por ejemplo, si queremos guardar la base de datos en el escritorio, hay
que ejecutar el comando setwd( /Users/Desktop")

3.3. Ciclos y Ejecucion Condicional


El comando if() es para realizar construcciones condicionales a partir de un argumento logico.
Por ejemplo,

if(x>1){2*x}
else{-x}

De esta manera, si el valor de x es mayor que uno la funcion logica es verdadera y debe ejecutar
2 x, por el contrario ejecuta x.

Para realizar ciclos se utiliza el comando for(). Por ejemplo,

3
x=c()
for(i in 1:100){
x[i] = i^2
}

As el ciclo va de la iteracion 1 hasta 100, y rellena cada componente del vector x por el valor de i
elevado a 2.

3.4. Crear Funciones


Para crear una funcion en R, se utiliza el comando function(). Por ejemplo, el siguiente codigo
crea una funcion que calcula la varianza de los datos:

varianza = function(x){
sum((x - mean(x))^2)/n
}

Luego a partir de un conjunto de datos, para calcular la varianza utilizando la funcion debemos
ejecutar varianza(datos).

3.5. Filtros en una variable


Por ejemplo, si x = c(1,1,2,2,0,0,0,0,0,1) en donde 0 representa si es estudiante, 1 si es ayu-
dante y 2 si es profesor. As, para seleccionar solo los estudiantes debemos ejecutar x[x==0],
y si se quiere seleccionar a los son profesores o ayudantes se debe ejecutar x[x==1|x==2]

4. Estadstica Descriptiva
Las funciones mean(), var(),sd(), median(),min(), max() y quantile(), IQR()
calculan la media, varianza, desviacion estandar, mediana, mnimo, maximo, cuantiles y rango in-
tercuantil de una variable numerica. La funcion summary() entrega un resumen de las medidas
descriptivas principales. Resumenes por grupo de variables: mediante funcion apply()
Las funciones table() y prop.table() obtienen las distribuciones de frecuencias absolutas y re-
lativas respectivamente.

4.1. Graficos
Grafico de puntos plot()
Diagrama de barras: barplot()
Diagrama de sectores: pie()
Histograma: hist()
Diagrama de cajas: boxplot()
superponer lneas lines()

4
5. Distribuciones de Probabilidad
Distribucion densidad o masa Funcion de Distribucion Funcion cuantil Muestras aleatorias
Binomial(n, p) dbinom(x, n, p) pbinom(x, n, p) qbinom(prob,n, p) rbinom(N ,n, p)
Poisson() dpois(x, ) ppois(x, ) qpois(prob,) rpois(N ,)
Geometrica(p) dgeom(x, p) pgeom(x, p) qgeom(prob,p) rgeom(N, p)
BinNeg(a, p) dnbinom(x, a, p) pnbinom(x, a, p) qnbinom(prob,a, p) rnbinom(N, a, p)
Uniforme(a, b) dunif(x, a, b) punif(x, a, b) qunif(prob,a, b) runif(N, a, b)
Exponencial() dexp(x, ) pexp(x, ) qexp(prob,) rexp(N, )
Normal(, 2 ) dnorm(x, , ) pnorm(x, , ) qnorm(prob,, ) rnorm(N, , )
Gamma(, ) dgamma(x, a, ) pgamma(x, a, ) qgamma(prob,a, ) rgamma(N, a, )
tstudent() dt(x, ) pt(x, ) qt(prob,) rt(N, )

6. Estimacion Puntual
6.1. Estimacion Maximo Verosmil
El paquete MASS contiene la funcion fitdistr() que calcula los estimadores maximos verosmiles
y los errores estandar asociados a una funcion de distribucion a partir de un conjunto de datos.
Por ejemplo ajuste =fitdistr(datos,densfun = "densidad") donde densidad es el modelo a
ajustar: geometric,Poisson, negative binomial, normal,exponential,gamma,beta,etc...

Tambien se puede calcular usando la funcion optimize() que calcula el maximo de la funcion de
verosimilitud. Por ejemplo, para el caso Binomial(n, p),

L = function(p, x) prod(dbinom(x, size = 1, prob = p))


optimize(L, interval = c(0, 1), x = datos, maximum = TRUE)

Si se quiere graficar funciones de verosimilitud que dependen de dos parametros (como el caso
Normal), el comando persp() realiza graficos en 3d. Ademas con el comando contour() se pueden
graficar las curvas de nivel de la funcion.

7. lntervalos de Confianza
Suponga que una variable aleatoria proviene de una poblacion con media y varianza 2 y se
extrae una muestra aleatoria de tamano n. Denotemos por X1 , ..., Xn la muestra.

7.1. Intervalo de Confianza para :


Poblacion n 2 Intervalo de Confianza
Normal - conocido library(TeachingDemos)

z.test(x, sigma, conf.level =1-alpha)$conf.int

Normal pequeno desconocido t.test(x,conf.level =1-alpha)$conf.int

Cualquiera grande conocido library(TeachingDemos)

z.test(x, sd(x), conf.level =1-alpha)$conf.int

5
7.2. Intervalo de Confianza para 2 :
Poblacion Intervalo de Confianza
Normal library(TeachingDemos)

sigma.test(x, sigma = sd(x),conf.level =1-alpha)$conf.int

7.3. Intervalo de Confianza para p:


Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion Bernoulli(p) y n grande

Intervalo de Confianza
prop.test(x,conf.level =1-alpha)$conf.int

Muestras Independientes:

Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion N (x , x2 ) e Y1 , ..., Ym es una
muestra aleatoria desde una poblacion N (y , y2 ).

7.4. Intervalo de Confianza para x y :


x2 y y2 Intervalo de Confianza
conocidas mean(x) - mean(y)+c(-1,1)*qnorm(1-alpha/2)*sqrt(sigma2x/n + sigma2y/m)

desconocidas e iguales t.test(x,y,conf.level=1-alpha,var.equal=T)$conf.int

desconocidas y distintas t.test(x,y,conf.level=1-alpha)$conf.int

7.5. Intervalo de Confianza para x2 /y2 :

Intervalo de Confianza
var.test(x,y,conf.level=1-alpha)$conf.int

Muestras Dependientes o Pareadas:

Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion N (x , x2 ) e Y1 , ..., Ym es una
muestra aleatoria desde una poblacion N (y , y2 ).

7.6. Intervalo de Confianza para x y :


Intervalo de Confianza
t.test(x,y,paired = TRUE, conf.level = 1-alpha)$conf.int

8. Test de Hipotesis
Suponga que se dispone una poblacion de una variable aleatoria con media y varianza 2 y se
extrae una muestra aleatoria de tamano n. Denotemos por X1 , ..., Xn la muestra.

6
8.1. Test de Hipotesis para :

H0 : = 0
Poblacion H1 Test de Hipotesis
H1 : 6= 0 library(TeachingDemos)

z.test(x, mu = mu0, sigma, alternative = "two.sided", conf.level = 1-alpha)


Normal
2
H1 : > 0 library(TeachingDemos)
conocido
z.test(x, mu = mu0, sigma, alternative = "greater", conf.level = 1-alpha)

H1 : < 0 library(TeachingDemos)

z.test(x, mu = mu0, sigma, alternative = "less", conf.level = 1-alpha)

Poblacion H1 Test de Hipotesis


Normal H1 : 6= 0 t.test(x, mu = mu0, alternative = "two.sided", conf.level = 1-alpha)

2 desconocido H1 : > 0 t.test(x, mu = mu0, alternative = "greater", conf.level = 1-alpha)

n pequeno H1 : < 0 t.test(x, mu = mu0, alternative = "less", conf.level = 1-alpha)

Poblacion H1 Test de Hipotesis


H1 : 6= 0 library(TeachingDemos)

z.test(x, mu = mu0, sd(x), alternative = "two.sided", conf.level = 1-alpha)


Cualquiera
H1 : > 0 library(TeachingDemos)
2 conocido
z.test(x, mu = mu0, sd(x), alternative = "greater", conf.level = 1-alpha)
n grande
H1 : < 0 library(TeachingDemos)

z.test(x, mu = mu0, sd(x), alternative = "less", conf.level = 1-alpha)

8.2. Test de Hipotesis para 2 :

H0 : 2 = 02

Poblacion H1 Test de Hipotesis


Normal H1 : 2 6= 02 library(TeachingDemos)

sigma.test(x, sigma = sigma0, alternative ="two.sided", conf.level =1-alpha)

H1 : 2 > 02 library(TeachingDemos)

sigma.test(x, sigma = sigma0, alternative ="greater", conf.level =1-alpha)

H1 : 2 < 02 library(TeachingDemos)

sigma.test(x, sigma = sigma0, alternative ="less", conf.level =1-alpha)

8.3. Test de Hipotesis para p:


Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion Bernoulli(p) y n grande

H0 : p = p0

7
H1 Test de Hipotesis
H1 : p 6= p0 prop.test(x, p = p0, alternative="two.sided",correct = TRUE, conf.level =1-alpha)

H1 : p > p0 prop.test(x, p = p0, alternative ="greater", correct = TRUE, conf.level =1-alpha)

H1 : p < p0 prop.test(x,p = p0, alternative ="less", correct = TRUE, conf.level =1-alpha)

Muestras Independientes:

Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion N (x , x2 ) e Y1 , ..., Ym es una
muestra aleatoria desde una poblacion N (y , y2 ).

8.4. Test de Hipotesis para x y :

H0 : x y =
x2 y y2 conocidas
H1 Test de Hipotesis
H1 : x y =
6 Region rechazo: abs((mean(x)-mean(y)-delta)/(sqrt(sigma2x/n + sigma2y/m)))>qnorm(1-alpha/2)

H1 : x y > Region rechazo: (mean(x)-mean(y)-delta)/(sqrt(sigma2x/n + sigma2y/m))>qnorm(1-alpha)

H1 : x y < Region rechazo: (mean(x)-mean(y)-delta)/(sqrt(sigma2x/n + sigma2y/m))<-qnorm(1-alpha)

x2 = y2 = 2 desconocidas
H1 Test de Hipotesis
H1 : x y 6= t.test(x,y,mu=delta, alternative="two.sided",conf.level=1-alpha,var.equal=T)

H1 : x y > t.test(x,y,mu=delta, alternative="greater",conf.level=1-alpha,var.equal=T)

H1 : x y < t.test(x,y,mu=delta, alternative="less",conf.level=1-alpha,var.equal=T)

x2 y y2 distintas y desconocidas
H1 Test de Hipotesis
H1 : x y 6= t.test(x,y,mu=delta, alternative="two.sided",conf.level=1-alpha,var.equal=F)

H1 : x y > t.test(x,y,mu=delta, alternative="greater",conf.level=1-alpha,var.equal=F)

H1 : x y < t.test(x,y,mu=delta, alternative="less",conf.level=1-alpha,var.equal=F)

8.5. Test de Hipotesis para x2 /y2 :

H0 : x2 /y2 = 1
H1 Test de Hipotesis
H1 : x2 /y2 6 1
= var.test(x,y,alternative="two.sided",conf.level=1-alpha)

H1 : x2 /y2 >1 var.test(x,y,alternative="greater",conf.level=1-alpha)

H1 : x2 /y2 <1 var.test(x,y,alternative="less",conf.level=1-alpha)

8
8.6. Test de Hipotesis para px py :
Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion Bernoulli(px ) e Y1 , ..., Ym es
una muestra aleatoria desde una poblacion Bernoulli(py ), con n y m grandes.
Para utilizar el comando prop.test() debemos previamente crear una matriz con los datos de
la siguiente manera: tabla = matrix(c(n11,n12,n21,n22),2,2,byrow=TRUE), donde n11 es el
numero de exitos de la muestra X, n12 es el numero de fracasos de la muestra X, n21 es el numero
de exitos de la muestra Y , n22 es el numero de fracasos de la muestra Y .

H0 : px py = 0

H1 Test de Hipotesis
H1 : px py =
6 0 prop.test(tabla, alternative = "two.sided", correct = FALSE))

H1 : px py > 0 prop.test(tabla, alternative = "greater", correct = FALSE))

H1 : px py < 0 prop.test(tabla, alternative = "less", correct = FALSE))

Muestras Dependientes o Pareadas:

Suponga que X1 , ..., Xn es una muestra aleatoria desde una poblacion N (x , x2 ) e Y1 , ..., Ym es una
muestra aleatoria desde una poblacion N (y , y2 ).

8.7. Test de Hipotesis para x y :

H0 : x y =

H1 Test de Hipotesis
H1 : x y =
6 t.test(x,y, alternative="two.sided",mu=delta, paired = TRUE, conf.level = 1-alpha)

H1 : x y > t.test(x,y, alternative="greater",mu=delta, paired = TRUE, conf.level = 1-alpha)

H1 : x y < t.test(x,y, alternative="less",mu=delta, paired = TRUE, conf.level = 1-alpha)

8.8. Potencia del Test


Para cada uno de los test vistos anteriormente se puede calcular la funcion potencia. Por ejemplo,
para el caso en que la muestra aleatoria de tamano n provenga de una poblacion Nomal(, 2 ),
donde 2 es conocido, y se desea sea testear H0 : = 0 se tiene que la funcion potencia (que
depende del valor de 1 de la hipotesis alternativa) esta dada por

H1 Potencia del Test


H1 : 6= 0 1-pnorm(qnorm(1-alpha/2,mean=0,sd = 1) + (mu0-mu1)*sqrt(n)/sigma, mean=0,sd=1) +

pnorm(qnorm(alpha/2,mean=0,sd = 1) + (mu0-mu1)*sqrt(n)/sigma, mean=0,sd=1)

H1 : > 0 1-pnorm(qnorm(1-alpha,mean=0,sd = 1) + (mu0-mu1)*sqrt(n)/sigma, mean=0,sd=1)

H1 : < 0 pnorm(qnorm(alpha,mean=0,sd = 1) + (mu0-mu1)*sqrt(n)/sigma, mean=0,sd=1)

9
En el caso en que 2 es desconocido y n pequeno, se utiliza la distribucion t-student del estadstico.

H1 Potencia del Test


H1 : 6= 0 1-pt(qt(1-alpha/2, df = n-1) + (mu0-mu1)*sqrt(n)/sd(x) ,df =n-1) +

pt(qt(alpha/2,df =n-1) + (mu0-mu1)*sqrt(n)/sd(x), df = n-1)

H1 : > 0 1-pt(qt(1-alpha, df = n-1) + (mu0-mu1)*sqrt(n)/sd(x) ,df =n-1)

H1 : < 0 pt(qt(alpha,df =n-1) + (mu0-mu1)*sqrt(n)/sd(x), df = n-1)

Para las pruebas t, existe un comando que calcula la funcion potencia:

power.t.test(n, delta = mu0-mu1,alternative = "one.sided", type= "one.sample")

8.9. Test de Bondad de Ajuste: 2 de Pearson


Sea X1 , ..., Xn una muestra aleatoria simple de tamano n proveniente de una poblacion. Las pruebas
de bondad de ajuste tienen por objetivo determinar si los datos se ajustan a una determinada
distribucion. De esta manera, se quiere testear

H0 : X tiene distribucion f (y, 0 )


H1 : X no tiene distribucion f (y, 0 )

Se debe agrupar los valores de la variable aleatoria en un numero finito de clases. Suponga que
X1 , ..., Xn toma valores en las clases: C1 , C2 , C3 , .., Ck
Sea Oi =Numero de individuos de la muestra en la clase Ci y sea P (X Ci ) = i , i = 1, ..., k se
tiene que ki=1 Oi = n y ki=1 i = 1. As las hipotesis a testear es equivalente a:
P P

H0 : 1 = 01 , 2 = 02 , ..., k = 0k
H1 : al menos un i 6= 01 con i = 1, ..., k

El comando que realiza el test 2 de bondad de ajuste es chisq.test(obs, p=p0)) donde obs es un
vector de largo k y corresponde al numero de invididuos observados en la muestra que pertenece a la
categora Ci con i = 1, .., k y p0 corresponde a las probabildades bajo H0 , es decir, (01 , 02 , ..., 0k ).
Hay que tener cuidado con el valor-p que entrega el test, ya que cuando se estiman parametros de
la poblacion hay que corregir los grados de libertad. Es conveniente utilizar el estadstico y calcular
el valor-p a parte como pchisq(X2,df = k-g-1, lower.tail = FALSE) donde X2 es el valor del
estadstico del text, g es el numero de parametros a estimar.

9. Analisis de Regresion
La funcion cor() calcula la correlacion entre dos variables. Si la funcion de entrada es una matriz
de datos calcula las correlaciones de la variables entre s. El comando cor.test() realiza el test de
correlacion, cuya sintaxis basica es la siguiente:

10
cor.test(x,y,alternative= c("two.sided", "less","greater"), conf.level = 1 - alpha)

Para ajustar una regresion lineal se utiliza la funcion lm(). La funcion summary() entrega un
resumen del ajuste, reportando los estimadores de los coeficientes del modelo, su error estandar,
prueba de significancia, R2 entre otros. Por ejemplo, para ajustar una regresion lineal simple, donde
y es la variable dependiente y x es la variable independiente,

modelo = lm(y~x)
summary(modelo)

La tabla Anova del modelo se realiza con el comando anova(modelo)

Ahora, si se tienen mas predictores, denotados por x1 , x2 , ..., xp el ajuste de la regresion multiple
se hace mediante,

modelo = lm(y~x1+x2 + ....+ xp)


summary(modelo)

Ademas, para ajustar un modelo sin intercepto basta poner un -1 al comienzo:

modelo = lm(y~ -1 + x1+x2 + ....+ xp)


summary(modelo)

Ahora, si se tiene un predictor que es una variable categorica, por ejemplo: sexo de un individuo,
donde toma el valor 0 si es hombre y 1 si es mujer. Debemos especificar que dicha variable es ca-
tegorica (de lo contrario lo tomara como una variable numerica) utilizando el comando as.factor()
y en el ajuste la funcion lm automaticamente crea una variable dummie. De esta manera, si se ajusta
una regresion de y con la variable sexo, se debe ejecutar

sexo = as.factor(sexo)
modelo = lm(y~ sexo)
summary(modelo)

Para realizar predicciones para un valor dado de la variable independiente se utiliza la funcion
predict(modelo,newdata, inverval,level) donde,

modelo modelo de regresion lineal


newdata valores de la variable independiente para los que se haran predicciones
interval confidence o prediction
level nivel de significancia de los intervalos

11