Introducción a R
Estadística II
Misraim GutiérrezFacultad de Ciencias UNAM
R es un poderoso software estadístico de distribución libre basado en el lenguaje S. No obstante, R tiene una interfase no muy amigable, por lo que se propone el uso de un editor como Tinn-R (en el caso de Windows) y RKWard
(en el caso de Linux). El uso del editor es totalmente opcional, ya que obviamente cada programa está hecho para trabajar por separado. En las siguientes transparencias daremos una introducción al mundo de R.
Puede obtenerse libremente de http://cran.r-project.org
R incluye varios manuales y, en particular, recomendamos la lectura de An Introduction to R. En el sitio de distribución de R se pueden encontrar una gran cantidad de notas, tutoriales, etc. que también recomendamos explorar.
Objetos
Las entidades que R crea y manipula se denominan objetos. En una sesión de trabajo en R los objetos que se crean se almacenan por nombre. La orden
> objects()
se puede utilizar para obtener ó mostrar los nombres de los objetos almacenados en R. Esta función es equivalente a la función
> ls()
Así, a la colección de objetos almacenados en cada momento se le conoce como espacio de trabajo (workspace)
Para eliminar objetos se utiliza la orden rm, por ejemplo > rm(a, b, c, x1, x2)
Los objetos creados durante una sesión de R pueden almacenarse en un archivo. Al finalizar la sesión, R pregunta si desea hacerlo. En caso afirmativo todos los objetos se almacenan en el archivo .RData1
Ayuda
Existen varias formas para accesar a la ayuda de R.
help() Documentación en linea de la función ayuda.
help(tema) Documentación en linea para algún tema o función en específico.
help("tema") Igual que la forma anterior. ?tema Igual que la forma anterior.
Sintaxis
Sintaxis y operadores comunes en R
Descripción Símbolo Ejemplo
Comentarios # # Este es un comentario
Asignación <- x<-log(2) multiplicación * a*b Exponencial ˆ 2ˆ2 Sucesión de x a y aumentando de c en c seq seq(x,y,c) Sucesión : 0:20
Aritmética Simple
R realiza operaciones de aritmética simple, en orden y convenciones usuales. >5+3 [1] 8 >4*4/45 0.3555556 >(2-34)/54*23 [1] -13.62963 >pi [1] 3.141593 >2i [1] 0+2i
Funciones comunes
Funciones
Descripción Simbolo
Raíz Cuadrada sqrt
Suma sum
Valor absoluto abs
Seno , coseno sin, cos
Logaritmo log
Exponencial ex exp
Factorial factorial
Números aleatorios Uniformes runif Números aleatorios normales rnorm
Distribución nomal dnorm,pnorm, qnorm
Varianza, Covarianza var, cov
Desviación estandar sd
Funciones Numéricas Simples
A continuación se muestran algunas funciones simples.
>sqrt(36) [1] 6 >abs(-2) [1] 2 log(2) [1] 0.6931472 > exp(4) [1] 54.59815 > sin(2+pi) -0.9092974 > cos(23) [1] -0.532833 > tan(2*pi) [1] -2.44921e-16
Vectores
R utiliza diferentes estructuras de datos. La estructura más simple es el vector, que es una colección ordenada de números. Para crear un vector, por ejemplo x, consistente en use la orden
x<- c(1, 1.5, 2, 2.5, 3)
Las asignaciones pueden realizarse también con la flecha apuntando a la derecha. Por lo que tambien se puede escribir de la forma
> c(10.4, 5.6, 3.1, 6.4, 21.7) -> x Si escribimos
> 1/x
[1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295 Se obtienen los inversos de cada entrada del vector x
Sucesiones
En R existen varias formas para generar sucesiones númericas, por ejemplo
Operador :
> 1:5
[1] 1 2 3 4 5
El operador : tiene prioridad en una expresión como la siguiente > 2*1:10
[1] 2 4 6 8 10 12 14 16 18 20 > n<-10
> 1:(n-1)
Función seq()
Esta función genera sucesiones más complejas y tiene algunos argumentos como from= valor inicial
to= valor final
by= paso de la sucesión length=longitud de la sucesión Por ejemplo
> z<- seq(from=1, to= 30, by= 3) > z
[1] 1 4 7 10 13 16 19 22 25 28 > length(z)
Función seq()
Otro ejemplo de la función seq() sería > seq(-5, 5, by=0.2)->s3 > s3 [1] -5 -4.8 · · · -2.2 [16] -2.0 -1.8 · · · 0.8 [31] 1.0 1.2 · · · 3.8 [46] 4.0 4.2 · · · 5.0 Genera el vector c(-5, -4.8,. . .,4.8, 5.0 )
Ejemplos de Matrices
Ejemplo 1
> d<- matrix(1:10, nrow=2, byrow=T)a #Matriz > d
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
abyrow=T, está pidiendo que la matriz se ordene por renglones
Ejemplo 2
> z<-matrix(1:20, ncol=5) #Matriz > z [,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20
Ejemplos de Matrices
Ejemplo 3
> z<-matrix(rnorm(12),4) > z [,1] [,2] [,3] [1,] -1.0477588 -1.7740875 0.7880992 [2,] 0.1817206 0.1843170 -0.5081660 [3,] -0.4223522 -0.9630552 0.5655456 [4,] 0.8871649 -0.4387159 0.2488602Sintaxis para Vectores y Matrices
Descripción Simbolo Ejemplo
Vector cero numeric(x) z<-numeric(x)
Matriz cero matrix(0,n,m) x<-matrix(0,n,m) i -ésimo elemento del vector a a[i] a[i]<-0 j -ésima columna del la matriz A A[,j] sum(A[,j])
Entrada aij de la matriz A A[i,j] x<-A[i,j]
Mutiplicacion de Matrices %* % x<- A %* % B
Transpuesta de la matriz A t t(A)
Funciones de Distribución
Distribución Nombre en R Argumentos (parámetros) Beta beta shape1, shape2, ncp Binomial binom size, prob
Cauchy cauchy location, scale Ji-Cuadrada chisq df, ncp
Exponencial exp rate
F f df1, df1, ncp
Gamma gamma shape, scale
Geométrica geom prob
Hipergeométrica hyper m, n, k Log-normal lnorm meanlog, sdlog
Logística logis location, scale Binomial negativa nbinom size, prob
Normal norm mean, sd
Poisson pois lambda
T t df, ncp
Para cada distribución, R soporta funciones que permiten calcular la función de distribución, F (x )=P(X≤x ), permite calcular cuantiles, la función de densidad y generar números pseudoaleatorios de la distribución.
Para construir el nombre de cada función, hay que utilizar el nombre de la distribución precedido de las letras:
‘d’ para la función de densidad ‘p’ para la función de distribución ‘q’ para calcular algún cuantil
En R es sencillo evaluar alguna función, por ejemplo la densidad de la normal estandar φ(x )=p1 2πe −x2/2 para x =2 > 1/sqrt(2*pi)*exp(-2) [1] 0.05399097
en lugar de estar escribiendo las fórmulas de esta forma, R facilita las cosa, basta con escribir
> dnorm(2) [1] 0.05399097
Distribución Binomial
Sabemos que si X∼Bin(n,p) su función de probabilidad es
P(X=x )= Ã n x ! px(1−p)n−x si x=0,1, . . . ,n 0 e.o.c
Para calcular el valor que toma la función de distribución en un cierto valor, por ejemplo, x=0, n=10 y probabilidad p=1/2 o x=2, n=20 y probabilidad p=1/3 podemos utilizar las siguientes lineas de código
> x<- 0 > n<- 10 > p<- 0.5 > pbinom(x,n,p) [1] 0.0009765625 > x<- 2 > n<- 20 > p<- 1/3 > pbinom(x,n,p) [1] 0.0546875
Distribución Poisson
Si X∼Poisson(λ) su función de probabilidad esta dada por
P(X=x )= (
e−λ λx
x ! si x=0,1, . . .
0 e.o.c
Queremos calcular valores que toma la función de distribución para un cierto valor x y una ciertaλ. > x<-2 > l<-1/2 > dpois(x,l) [1] 0.07581633 > x<-100 > l<-2/3 > dpois(x,l) [1] 1.353134e-176
Distribución Exponencial
Si X∼exp(λ) su función de densidad esta dada por
fX(x )=
(
λe−λx para x>0
0 si x≤0
Calcularemos el valor que toma la función de distribución para distintos valores de x yλ > x<-5 > l<- 1/2 > pexp(x,l) [1] 0.917915 > x<-15 > l<-2/5 > pexp(x,l) [1] 0.9975212
Función sort()
La función sort() nos permite ordenar datos en orden ascendente por ejemplo > z<-rnorm(20,0,1) > z [1] 0.93628286 -1.39570034 1.28577508 -1.49326245 -0.97826044 -0.21732865 [7] -1.26071179 0.74600006 -0.25445590 -0.12012232 -0.37061217 -2.03825519 [13] -0.78996640 0.56181197 2.47760047 0.97839840 -1.43885020 -0.43203742 [19] 0.99971017 -0.03361653 > sort(z) [1] -2.03825519 -1.49326245 -1.43885020 -1.39570034 -1.26071179 -0.97826044 [7] -0.78996640 -0.43203742 -0.37061217 -0.25445590 -0.21732865 -0.12012232 [13] -0.03361653 0.56181197 0.74600006 0.93628286 0.97839840 0.99971017 [19] 1.28577508 2.47760047
Estadística descriptiva
En R es facil calcular la media, desviación estandar, varianza y la mediana, por ejemplo
> x<- rnorm(50)# 50 valores aleatorios de la distribución normal > mean(x)# calcula la media del objeto x
[1] 0.03301363
> sd(x)# calcula la desviación estandar del objeto x
[1] 1.069454
> var(x)# calcula la varianza del objeto x
[1] 1.143731
> median(x)# calcula la mediana del objeto x
Cuantiles
Así como las medidas anteriores, se pueden calcular cuantiles de forma similar
> quantile(x)# calcula los principales cuantiles del objeto x
0 % 25 % 50 % 75 % 100 %
Gráficas
R nos facilita poder obtener gráficas y detallarlas con un título, subtítulo, nombrar los ejes e incluso poner texto dentro de las mismas gráficas.
Generar números aleatorios de una Uniforme
> x<- runif(50,0,2)# genera 50 números aleatorios en el intervalo (0,2)
> y<- runif(50,0,2)# genera 50 números aleatorios en el intervalo (0,2)
> plot(x,y,main="Titulo", sub="Subtitulo", xlab="X", ylab="Y",axes=T)# grafica los objetos x y y
> text(0.6,0.6,"texto (0.6,0.6)")# pone texto en la gráfica > abline(h=0.6,v=0.6)# pinta dos lineas referentes a la coordenada (0.6,0.6)
Histogramas
Generar números aleatorios de la Exponencial
##EXPONENCIAL > n<-100000 > t<-1/50 > d<-rexp(n,t) > d > hist(d,prob=TRUE,col="blue",main="Función
Exponencial",xlab="Números generados", ylab="Densidad") > curve(dexp(x,1/50),add=TRUE,col="black",lty=2,lwd=2) donde las ordenes
lty = Tipo de línea lwd= Ancho de línea
Ejemplos
Generar números aleatorios de la Normal
##NORMAL > n<-1000 > m<-2 > sd<-0.5 > d<-rnorm(n,m,sd) > d > hist(d,prob=TRUE,nclass=50,col="blue",main="NORMAL", ylim=c(0,0.8),xlab="Números generados", ylab="Densidad") > curve(dnorm(x,m,sd),add=TRUE,col="black",
Función de distribución acumulada empírica
Dada una muestra aleatoria X1,X2, . . . ,Xn. Sea S (x ) la función de distribución
empírica o muestral basada en la muestra definida como la proporción de valores muestrales menores o iguales que el valor especificado x es decir
S (x)=número de valores muestrales ≤x n
La función de distribución empírica se define en términos de las estadísticas de orden de la muestra, supongamos que las n observaciones muestrales son distintas, entonces S (x )= 0 si x<X(1) i n si X(i )≤x<X(i+1) 1 si X(n)≤x
Gráfica de la función empírica
Función ecdf
Si tenemos una muestra aleatoria y queremos saber como se comporta la gráfica de la función empírica, podemos utilizar la función ecdf la cual nos permitirá conocerla, por ejemplo si tenemos el vector
> x<-c(12,14,11,10,9,4,25,30,33,22)
Podemos graficar la distribución empírica de este vector con la siguiente línea de código
> plot(ecdf(x), col="blue", main="Distribución empírica", xlab="Valores ordenados")
Prueba Binomial
Ejemplo
Juan supone que un dado se encuentra sesgado a favor del numero cuatro. Decide realizar una prueba de hipótesis, cuando lanza el dado 15 veces y obtiene 6 veces el cuatro. Realizar la prueba conα =5 %
Solución
Como Juan supone que el dado esta sesgado a favor del número 4, podemos contruir la hipótesis alternativa, por lo que tenemos el siguiente contraste:
H0: p=1/6 vs H1: p>1/6
definimos T el número de veces que salio el 4 (O1, numero de elementos de la
clase 1), es decir, T=6 y como n=15,α =5 % y p∗=1/6 entonces
Como las hipótesis se plantearon al caso de cola superior, buscamos un cuantil t de tal suerte queP(T≥t)=0.05, o bien,P(T<t)=0.95. Entonces en R podemos calcular el cuantil usando las siguientes lineas de código:
> qbinom(c(0.05), size=15, prob=1/6, lower.tail=FALSE) [1] 5
entonces el cuantil es t=5. Sabemos que rechazamos H0 al nivel se significancia
αsi: T≥t, es decir, 6≥5, entonces rechazamos H0.
Valor p
pv= P(T≥tobs)= P(T≥6)= P(T>5) se puede calcular con la siguiente línea de
código
> pbinom(c(5), size=15, prob=1/6, lower.tail=FALSE) [0.02739411]
entonces 0.0274<0.05 tenemos que rechazamos H0.Por lo tanto, podemos decir
Prueba de Kruskal-Wallis
La prueba no paramétrica de Kruskal-Wallis consiste en analizar k muestras independientes, para k≥3. Si tenemos K muestras aleatorias independientes posiblemente de distintos tamaños de k poblaciones distintas.
Muestra 1 Muestra 2 · · · Muestra i · · · Muestra k
X11 X21 Xi 1 Xk1 X12 X22 Xi 2 Xk2 . . . . . . . . . . . . X1n1 X2n2 · · · Xini · · · Xknk
Donde se desea probar
H0: Todas las k poblaciones tienen
función de distribución idéntica vs
H1: Al menos una de las poblaciones
Supongamos que tenemos tres 3 muestras independientes con los siguientes valores Muestra 1 2.9, 3.0, 2.5, 2.6, 3.2
Muestra 2 3.8, 2.7, 4.0, 2.4 Muestra 3 2.8, 3.4, 3.7, 2.2, 2.0
R nos proporciona una manera rápida de obtener los resultados de esta prueba para analizar estas tres muestras de la siguiente manera:
> x <- c(2.9, 3.0, 2.5, 2.6, 3.2) # Observaciones de la muestra 1
> y <- c(3.8, 2.7, 4.0, 2.4) # Observaciones de la muestra 2
> z <- c(2.8, 3.4, 3.7, 2.2, 2.0) # Observaciones de la muestra 3
> kruskal.test(list(x, y, z)) Obteniendo
Kruskal-Wallis rank sum test data: list(x, y, z)
Kruskal-Wallis chi-squared = 0.7714, df = 2, p-value = 0.68
donde
chi-squared = Estadístico de prueba
Prueba Ji-Cuadrada
Sean N observaciones de una v.a X con distribución FX(x ) desconocida y dichas observaciones se pueden clasifican en K clases o el número de resultados posibles obtenidos al hacer cierto experimento, además las observaciones son una muestra aleatoria. Se necesita tener los datos a probar organizados en una tabla de distribuciones de frecuencias. Sea
Hipótesis
H0: FX(x )=F0(x ) ∀x vs H1: FX(x )6=F0(x ) p.a x
donde F0(x ) es la distribución completamente especificada que es propuesta por el
investigador. a) Se calcula p∗
j la probabilidad de que una observación de la v.a X este en la
clase j , bajo el supuesto de que la hipótesis nula H0 es verdadera (la
distribución que se quiere probar F0(x )).
b) Se calculan los valores esperados ej=p∗jN para j=1,2, . . . ,K que representan
las frecuencias esperadas en un total de N observaciones del experimento bajo la hipótesis nula H0.
Estadístico de prueba
El estadístico de prueba esta dado por:
Q= K X j=1 (fj−ej)2 ej
Regla de decisión
Regla de decisiónEl estadístico Q se compara contra el cuantilχ2
(k−1,1−α). Rechazamos H0 al nivel
de significanciaαsi:
Q> χ2(K−1),(1−α)
La Ji-Cuadrada es una aproximación que se puede usar con confianza cuando todas las ej>5. Si esto no ocurre, se sugiere colapsar clases adyacentes hasta que
Ejemplo
La altura en centímetros, que ha ganado una conífera en su primer año despues de ser plantada, se denota por la variable X . El valor de X se mide con una m.a de 86 coníferas y los resultados obtenidos fueron los siguientes:
X <35 35-45 45-55 55-65 >65 Total
fi 10 18 28 18 12 N=86
Probar la hipótesis de que la variable aleatoria X se puede modelar usando una distribución N(50,152) con un nivel de significanciaα =5 %.
Solución
Usando el siguiente código obtendremos la solución: > w<-pnorm(c(35), mean=50, sd=15, lower.tail=TRUE) > w
[1] 0.1586553
# Primer valor esperado
> e1<-w*86
# P(X<= b) derechas de cada intervalo
> x<- pnorm(c(45,55,65), mean=50, sd=15, lower.tail=TRUE) > x
# P(X<= a) Probabilidades izquierdas de cada intervalo
> y<- pnorm(c(35,45,55), mean=50, sd=15, lower.tail=TRUE) > y
[1] 0.1586553 0.3694413 0.6305587
# Valores esperados e2,e3,e4
> e234<-(x-y)*86 > e234
[1] 18.12760 22.45609 18.12760
# P(X>= 65)
> z<-pnorm(c(65), mean=50, sd=15,lower.tail=FALSE) > z
[1] 0.1586553
# Valor esperado e5
> e5<-z*85
> ei<-c(e1, e234, e5) > ei
# Frecuencias > fi<-c(10,18,28,18,12) # Estadistico > Q<-sum((fi-ei)ˆ2/ei) > Q [1] 2.507534 #Cuantil de Ji-Cuadrada > qchisq(c(0.95), df=4, lower.tail=TRUE) [1] 9.487729
Rechazamos H0 al nivel de significancia αsi: Q> χ(k−1,1−α), es decir,
2.507532 ≯ 9.487729, entonces no rechazamos H0. Por lo tanto podemos decir
Prueba de Lilliefors para normalidad
En esta prueba se tiene X1,X2, . . . ,Xn, una muestra aleatoria de tamaño n de una
población con función de distribución desconocida. Se calculan la media y desviación muestrales X=1 n n X i=1 Xi y S= v u u t 1 n−1 n X i=1 (Xi−X )2
Se calculan los valores estandarizadosde la muestra
Zi=
Xi−X
Esta prueba es como la Prueba de Kolmogorov-Smirnov solo que la función empírica S (x) es de los valores estandarizados y no de los originales. Se desea probar las hipótesis
H0: La muestra aleatoria proviene de
una población con distribución normal, con media y varianza desconocidas
vs
H1: La muestra aleatoria proviene de
una población con distribución distinta a la de una normal
Estadístico
El estadístico de prueba esta dado por la máxima distancia vertical
T1=sup
x |F (x )−S (x )|
Rechazar H0 al nivel de significanciaαsi:
T1>t1n−α
Ejemplo
Quince estudiantes de primer año tenían puntuaciónes de rendimiento de la siguiente manera
481 620 642 515 740 562 395 615 596 618 525 584 540 580 598
Pruebe para normalidad usando la prueba de Lilliefors usando un nivel de significanciaα =5 %
Los cálculos para obtener el resultado de esta prueba serán en base a las transparencias anteriores para familiarizarnos con las operaciones hasta el momento vistas y el entorno de R.
Solución
Las siguientes líneas muestran una posible solución al ejemplo. Primero calculamos X y S ## Datos > Xi<-c(481,562,525,620,395,584,642,615,540,515,596,580,740,618,598) ##Media y Desviación > M<-mean(Xi) > M [1] 574.0667 > S<-sd(Xi) > S [1] 78.8221
Ordenando los datos, estandarizandolos y evalundolos en la función F (x)=N(0,1) tenemos ## Datos ordenados > Xo<-sort(Xi) > Xo [1] 395 481 515 525 540 562 580 584 596 598 615 618 620 642 740
## Datos estandarizados ordenados
> Zi<-(Xo-M)/S > Zi [1] -2.2717824 -1.1807179 -0.7493668 -0.6224988 -0.4321969 -0.1530873 [7] 0.0752750 0.1260222 0.2782637 0.3036373 0.5193129 0.5573733 [13] 0.5827469 0.8618564 2.1051625 ## F(x)=N(0,1) > F<-pnorm(Zi,0,1) > F [1] 0.01154983 0.11885741 0.22681808 0.26680696 0.33279916 0.43916470
Como no hay empates podemos generar la función empírica con la función seq() y tomar las distancias de los datos ordenados y los evaluados en F (x )=N(0,1) de la siguiente manera ## Distribución empírica > Em<-seq(1/15,1,1/15) > Em [1] 0.06666667 0.13333333 0.20000000 0.26666667 0.33333333 0.40000000 [7] 0.46666667 0.53333333 0.60000000 0.66666667 0.73333333 0.80000000 [13] 0.86666667 0.93333333 1.00000000 ## Diferencia |F(x)-S(x)| > D<-abs(F-Em) > D [1] 0.0551168392 0.0144759282 0.0268180775 0.0001402889 0.0005341699 [6] 0.0391646962 0.0633353752 0.0168094838 0.0095950474 0.0473687677 [11] 0.0351046181 0.0886362103 0.1466985249 0.1277166053 0.0176385830
Solo falta tomar el valor máximo de estos valores para saber quien es el estadístico T=supx ¯ ¯F (x )−S (x ) ¯ ¯ ## Supremo > Sup<-max(D) > Sup [1] 0.1466985
y buscando en tablas del estadístico de Lilliefors el valor t0.9515 =0.219 y la regla de decisión esta dada por T1>t1n−α, es decir, 0.1466985249 ≯ 0.219. Por lo que se no
rechazamos la hipótesis H0, por lo tanto la muestra de los estudiantes proviene de
Prueba de Shapiro-Wilk para normalidad
Esta prueba consta de una muestra aleatoria de tamaño n, X1,X2, . . . ,Xn, una
función F (x ) desconocida. Se calcula el valor
D= n X i=1 (Xi−X )2= n X i=1 Xi2−nX2
donde X es la media muestral.
Se ordenan la muestra en orden ascendente
X(1)≤X(2)≤ · · · ≤X(n)
Se buscan en tablas los coeficientes a1,a2, . . . ,ak donde k es aproximadamente n2,
Queremos contrastar las hipótesis H0: F (x ) se distribuye normal con
media y varianza desconocida vs
H1: F (x) no es una distribución normal
Estadístico
Se calcula el estadístico W = 1 D " n X i=1 ai ³ X(n−i+1)−X(i )´ #2 ObservaciónW cercano a 1 significa que la muestra se comporta como una muestra normal, si W es muy pequeño, lejos de 1, no se parece a la normal.
Rechazar H0 al nivel de significanciaαsi:
W<wαn
donde wαnes el cuantil que se busca en tablas del estadístico de Shapiro-Wilk. R nos permite realizar este contraste de la siguiente manera:
>z<-c(-1.79, 1.04, 0.46, 0.99, 0.27, 0.76, -0.43, -0.95, 0.14, 0.59) > shapiro.test(z)
Obteniendo
Shapiro-Wilk normality test data: z
W = 0.8914, p-value = 0.1756 donde
Prueba de Kolmogorov-Smirnov
Esta prueba se basa en las diferencias entre la hipotética función de distribución acumulada F∗(x ) y la función de distribución empírica de la muestra Sn(x )∀x .
Sea X1,X2, . . . ,Xnuna m.a de una v.a X asociada a una función de distribución
desconocida, denotada por FX(x ).
Sea F∗(x ) la función de distribución completamente especificada con la que se
haran las hipótesis (H0). Para el caso de dos colas tenemos las hipótesis
H0: FX(x )=F∗(x ) ∀x vs H1: FX(x )6=F∗(x ) p.a x
Estadístico
El estadístico de prueba esta dado por D=sup
x |F
∗(x )−S
Ejemplo
Diez estudiantes realizan una prueba de 100 reactivos, obteniendo los siguientes resultados
95 80 40 52 60 80 82 58 65 50
Probar la hipótesis nula que la proporción de respuestas correctas esta dada por la función F∗(x )= 0 x<0 x2(3−2x) 0≤x≤1 1 x>1 Solución
Para la solución de este problema, nombramos un objeto con los datos de los estudiantes, generamos la funcion F∗(x ) y realizamos la prueba de
> x<- c(0.4,0.5,0.52, 0.58, 0.60, 0.65, 0.8, 0.8, 0.82, 0.95) > F<-xˆ2*(3-2*x)
> ks.test(x,F)
Por lo que R nos da los siguiente
Two-sample Kolmogorov-Smirnov test data: x and F
D = 0.3, p-value = 0.7591
alternative hypothesis: two-sided Warning message:
Si nuestro ploblema fuera realizar la prueba de dos colas con una función F∗(x )=N(5,6,122) y teniendo la muestra
4.8 6.2 6.0 5.9 6.6 5.5 5.8 5.9 6.3 6.6 6.2 5.0 tendríamos las siguientes lineas de código
> x<-c(4.8, 6.2, 6.0, 5.9, 6.6, 5.5, 5.8, 5.9, 6.3, 6.6, 6.2, 5.0) > ks.test(x, pnorm, mean=5.6, sd=1.2)
Obteniendo el siguiente resultado
One-sample Kolmogorov-Smirnov test data: x
D = 0.3162, p-value = 0.1814 alternative hypothesis: two-sided Warning message:
In ks.test(x, pnorm, mean = 5.6, sd = 1.2) : cannot compute correct p-values with ties
Lectura de archivos
En R es muy sencillo la lectura de archivos externos. El usuario puede utilizar editores de texto para llevar a cabo este tipo de acciones.
Función read.table()
Para poder leer una hoja de datos directamente, el archivo externo debe reunir las condiciones adecuadas. La forma más sencilla es:
La primer línea del archivo debe contener el nombre de cada variable de la hoja de datos.
En cada una de las siguientes líneas, el primer elemento es la etiqueta de la fila, y a continuación deben aparecer los valores de cada variable.
Así, el archivo tiene la forma siguiente:
Precio Superficie Área
01 52 111 830
Las instrucciones para realizar la lectura de un archivo con extensión .txt es la siguiente:
En Windows
> casas<- read.table("G:/home/mizra/archivo.txt")En Linux
> casas<- read.table("/home/mizra/archivo.txt")En ocasiones no se dispone de etiquetas por renglón. En este caso tambien es posible la lectura de los datos y R añadirá unas etiquetas predeterminadas. Así, el archivo tendra la siguiente forma:
Precio Superficie Área
52 111 830
54 128 710
56 147 987
el cual podrá leerse utilizando un parámetro adicional.
En Windows
> casas<- read.table("G:/home/mizra/archivo.txt", header=T)
En Linux
Como leer una un archivo de Excel y OpenOffice
Función attach()
La función attach() puede tener como argumento el nombre de una lista o de una hoja de datos y permite conectar la lista o la hoja de datos directamente.
Función read.csv()
La función read.csv() nos ayudará para poder leer un archivo desde Excel. La indicación necesaria es guardar una copia de nuestro archivo de Excela con extención .csv
Teniendo ya una copia de nuestro archivo con extensión .cvs las instrucciones para cargar nuestro archivo de Excel en R son las siguientes:
En Windows
data<-read.csv("G:/home/mizra/mieloma.csv") attach(data) dataEn Linux
data<-read.csv("/home/mizra/mieloma.csv") attach(data) dataSi nosotros estamos interesados solo en algunos datos de nuestra hoja de cálculo, por decir los primeros 8 pacientes, R nos proporciona una manera sencilla para usar estos datos. Se tiene que seleccionar la parte que se requiere de nuestra hoja de cálculo y copiarla
Enseguida se escriben las siguientes instrucciones
En Windows
data<-read.table(" clipboard") dataEn linux
data<-read.table("clipboard") data Obteniendo > data<-read.table("clipboard") > data V1 V2 V3 V4 1 t estatus x1 x2 2 18 1 0 0 3 9 1 0 1 4 28 0 0 0 5 31 1 0 1Gráficos
R es un paquete muy importante y versátil en cuestiones gráficas. Es posible utilizarlas para mostrar una amplia variedad de gráficos estadísticos. En R existe una lista de parámetros gráficos que pueden utilizarse para adaptar los gráficos.
Ordenes gráficas
Dos grupos de ordenes gráficas son:
Alto nivel. Son funciones que crean un nuevo gráfico, posiblemente con ejes, etiquetas, títulos, etc
Bajo nivel. Son funciones que añaden información a un gráfico existente, tales como puntos adicionales, líneas, curvas y etiquetas
Argumentos para gráficos de alto nivel
Existe una serie de argumentos que pueden usarse en los gráficos de alto nivel.
add=TRUE
Obliga a la función a comportarse como una función de nivel bajo, de modo que el gráfico que genere se superpondrá al gráfico actual, en lugar de borrarlo (solo en algunas funciones)
axes=FALSE
Impide que se generen los ejes. Útil para generar ejes personalizados usando la función axis. El valor predeterminado es axes=TRUE, que incluye los ejes.
main="cadena"
sub="cadena"
Pone un subtítulo al gráfico, aparece abajo del eje X con tamaño de letra pequeño
type=
Este argumento controla el tipo de gráfico producido, de acuerdo a las siguientes instrucciones:
type="p" Dibuja puntos individuales, este es el valor predeterminado type="l" Dibuja líneas
type="b" Dibuja puntos y lineas que los unen
type=" o" Dibuja puntos y lineas que los unen, cubriéndolos type="h" Dibuja líneas verticales desde cada punto al eje X
Función plot()
Como ya hemos visto, una de las funciones gráficas más útiles en R es la función plot(), que es una función genérica, es decir, el tipo de gráfico producido depende de la clase del primer argumento.
Por ejemplo, si x e y son vectores
> x<-c(12,11,35,15,44,1,145,87,65,21,44) > y<-c(15,44,78,65,32,52,88,17,24,51,61) > plot(x,y)
Otras representaciones gráficas
Gráficos de comparación de distribuciones
Existen otras funciones gráficas que producen otros tipos de gráficos, para poder comparar distribuciones.
qqnorm(x)
Representa el vector x sobre los valores esperados normales
qqline(x)
Añade una recta que pasa por los cuantiles de la distribución y de los datos.
qqplot()
Esta función nos permitirá analizar mediante un gráfico conocido como cuantil-cuantil o “Q-Q plot” examinar datos cuidadosamente, comparando las
Por ejemplo, si generamos 50 números pseudoaleatorios normales y exponenciales, y hacemos la gráfica Q-Q plot de la siguiente manera
> z<-rnorm(50,0,1) > y<-rexp(50,0.5)
> qqplot(z,y, main="Q-Q plot", xlab=" exp", ylab="norm", pch=20) > qqline(y)
Gráficas de cajas
Función boxplot()
Esta función nos permitirá comparar gráficamente dos muestras mediante un diagrama de cajas.
Por ejemplo, si tenemos dos métodos con los siguientes valores
Método A:79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02
Método B:80.02, 79.94, 79.98, 79.97, 79.97, 80.03, 79.95, 79.97
Queremos comparar gráficamente estos dos métodos. Generando dos vectores con estos valores y utilizando la función boxplot()
>A<-c(79.98, 80.04, 80.02, 80.04, 80.03, 80.03, 80.04, 79.97, 80.05, 80.03, 80.02, 80.00, 80.02)
Obtenemos
cuyo gráfico nos muestra que el primer grupo tiende a tener mayores resultados que el segundo grupo.