Curso R Tema2 PDF

Title Curso R Tema2
Author Ruben Espinoza
Course Estadistica
Institution Universidad Nacional Mayor de San Marcos
Pages 33
File Size 1.4 MB
File Type PDF
Total Downloads 81
Total Views 123

Summary

Curso de R...


Description

Tema 2. Estadística descriptiva con R y Rstudio

Tema 2. Estadística descriptiva con R y Rstudio ‘Tidy data’ –datos ordenados. RStudio solo admite una forma de introducir los datos: Tidy data (Datos ordenados). Los datos deben presentarse de la siguiente manera para que puedan ser analizados por Rstudio 

Cada variable forma una columna



Cada observación forma una fila



Cada tipo de unidad de observación forma una tabla

Importar una base de datos en R.

Vamos a trabajar con la siguiente tabla de datos id

edad imc

1

19

33.2

2

23

34.6

3

25

35

4

30

39.7

5

20

32

6

32

37.7

7

23

33.5

Primero lo pasamos a Excel (copiar). Una vez abierto nuestra base de datos, lo volvemos a guardar como CVS (delimitado por comas)

Estando en RStudio nos dirigimos a File > Import Dataset > From Text (Base)…

Escogemos el archivo (Archivo de valores…)

Se nos aparece la siguiente ventana y damos click en importar

Nos aparece la base de datos en la Ventana de Script y en la Ventana Environment

También pudimos haber importado directamente de la Ventana Environment, en la pestaña Import Dataset

Nota: RStudio también es capaz de importar directamente archivos de Excel, Stata Y SPSS, pero antes es necesario cargar paquetes File > Import Dataset > From Excel

Tenemos que cargar el paquete readxl 0.1

Nos vamos a la ventana inferior derecha y escogemos la pestaña Install

Resumir una base de datos.

Tenemos un objeto BaseDatos1 que contiene como su valor la tabla entera. BaseDatos1 es un tipo nuevo de objeto: un dataframe. Un dataframe es un objeto de dos dimensiones: 1) Columnas: cada columna contiene solo un tipo de datos. Columnas tiene nombres. 2) Filas: una fila para cada punto (paciente, prueba, lectura etc.). Las filas no suelen tener nombres.

Las funciones siguientes nos permiten obtener los nombres de las variables, los identificadores de las filas y las dimensiones de una data frame: names: Produce un vector con los nombres de las columnas. rownames: Produce un vector con los identificadores de las filas. dimnames: Produce una list formada por dos vectores: el de los identificadores de las filas y el de los nombres de las columnas. dim: Produce un vector con el número de filas y el número de columnas.

> dim(Basedatos1) [1] 7 3 > names(Basedatos1) [1] "id" "edad" "imc" > rownames(Basedatos1) [1] "1" "2" "3" "4" "5" "6" "7"

> str(Basedatos1) 'data.frame': 7 obs. of 3 variables: $ id : int 1 2 3 4 5 6 7 $ edad: int 19 23 25 30 20 32 23 $ imc : num 33.2 34.6 35 39.7 32 37.7 33.5 > summary(Basedatos1) id edad imc Min. :1.0 Min. :19.00 Min. :32.00 1st Qu.:2.5 1st Qu.:21.50 1st Qu.:33.35 Median :4.0 Median :23.00 Median :34.60 Mean :4.0 Mean :24.57 Mean :35.10 3rd Qu.:5.5 3rd Qu.:27.50 3rd Qu.:36.35 Max. :7.0 Max. :32.00 Max. :39.70

Crear un dataframe desde cero Además de trabajar con data frames importados o predefinidos, también podemos crearlos. Para construir un data frame a partir de unos vectores, se usa la función data.frame aplicada a los vectores en el orden en el que queramos disponer las columnas de la tabla; de esta manera, las variables tomarán los nombres de los vectores. Estos nombres también se pueden especificar en el argumento de la función data.frame, entrando cada columna con una construcción de la forma

Nombre de la variable=Vector con el contenido de la variable. Vamos a ilustrar esta función con un ejemplo sencillo. Vamos a construir un data frame que contenga algunos datos sobre pacientes; concretamente, este data frame tendrá tres variables: una primera columna con el sexo del paciente, la segunda columna con su edad en años y la tercera con su número de ingresos anteriores. > Sexo =c("Hombre","Hombre","Mujer","Hombre","Hombre","Hombre","Mujer") > Edad =c(17,18,20,18,18,18,19)

> Ingresos =c(2,0,0,1,1,1,0) > DatosPac= data.frame(Sexo,Edad,Ingresos) > DatosPac Sexo Edad Ingresos 1 Hombre 17 2 2 Hombre 18 0 3 Mujer 20 0 4 Hombre 18 1 5 Hombre 18 1 6 Hombre 18 1 7 Mujer 19 0

Puesto que iremos modificando este data frame, vamos a guardar una copia de seguridad (un backup) en DatosPacbk para poder recuperar su estado original si lo necesitamos. > DatosPacbk=DatosPac

Para crear un data frame con el editor de datos, lo primero que hay que hacer es crear un data frame con la primera fila, y luego abrirlo con el editor para ir añadiendo filas (y columnas, si se desea).

>DatosPac2=data.frame(Sexo=c("Hombre"),Edad=c(17),Ingresos=c(2)) > fix(DatosPac2)

Acceder a variables dentro de una base de datos Vamos a consultar algunas características del data frame DatosPac.

> str (DatosPac) 'data.frame': 7 obs. of 3 variables: $ Sexo : Factor w/ 2 levels "Hombre","Mujer": 1 1 2 1 1 1 2 $ Edad : num 17 18 20 18 18 18 19 $ Ingresos: num 2 0 0 1 1 1 0 > rownames (DatosPac) [1] "1" "2" "3" "4" "5" "6" "7"

Vemos que la primera variable es un factor con dos niveles, y las otras dos son vectores numéricos (num). Vemos también que R ha asignado como identificadores de las filas los números del 1 al 7, pero los considera palabras. Para modificar los identificadores de las filas, podemos usar la instrucción rownames(data frame)=vector con los nombres de las filas. Como cada

identificador ha de determinar el individuo al que corresponde la fila, conviene que estos identificadores sean todos diferentes. > rownames(DatosPac)=paste("Alumno",1:7,sep=" ") > DatosPac Sexo Edad Ingresos Alumno 1 Hombre 17 2 Alumno 2 Hombre 18 0 Alumno 3 Mujer 20 0 Alumno 4 Hombre 18 1 Alumno 5 Hombre 18 1 Alumno 6 Hombre 18 1 Alumno 7 Mujer 19 0

Podemos modificar los nombres de las filas y de las columnas simultáneamente con la instrucción dimnames(data frame)=list(vector con los nombres de las filas, vector con los nombres de las columnas). Por ejemplo, vamos a cambiar de golpe en d.f1 los identificadores de las filas, para que ahora sean números romanos, y los nombres de las variables, para que pasen a ser V1,V2,V3:

> dimnames(DatosPac)=list(c("I","II","III","IV","V","VI","VII"),c("V1","V2","V3")) > DatosPac V1 V2 V3 I Hombre 17 2 II Hombre 18 0 III Mujer 20 0 IV Hombre 18 1 V Hombre 18 1 VI Hombre 18 1 VII Mujer 19 0

Para modificar entradas concretas de un data frame, podemos usar el editor de datos que se abre con fix, # Volvemos a la copia guardada > DatosPac=DatosPacbk > fix(DatosPac)

Agregamos una fila y una columna mas

Vemos si se han producido los cambios > DatosPac Sexo Edad Ingresos Peso 1 Hombre 17 2 48.5 2 Hombre 18 0 65.5 3 Mujer 20 0 67.4 4 Hombre 18 1 58.6 5 Hombre 18 1 56.2 6 Hombre 18 1 55.5 7 Mujer 19 0 56.2 8 Hombre 21 2 65.3

Estadística descriptiva con R Y R-Studio.

Datos cuantitativos Ejemplo 9.1. Hemos pedido las edades a un grupo de 15 pacientes del pabellón de odontología. Las respuestas, en años, han sido las siguientes:

18; 22; 16; 19; 23; 18; 35; 16; 45; 20; 20; 22; 40; 18; 45:

> edades=c(18,22,16,19,23,18,35,16,45,20,20,22,40,18,45)

# Frecuencias absolutas > table ( edades ) edades 16 18 19 20 22 23 35 40 45 2 3 1 2 2 1 1 1 2

# Frecuencias relativas > round(prop.table(table(edades)),2) edades 16 18 19 20 22 23 35 40 45 0.13 0.20 0.07 0.13 0.13 0.07 0.07 0.07 0.13

# Frecuencias absolutas acumuladas

> cumsum(table(edades)) 16 18 19 20 22 23 35 40 45 2 5 6 8 10 11 12 13 15

# Frecuencias relativas acumuladas

> round(cumsum(prop.table(table(edades))),2) 16 18 19 20 22 23 35 40 45 0.13 0.33 0.40 0.53 0.67 0.73 0.80 0.87 1.00 >

#La moda

> edades=c(18,22,16,19,23,18,35,16,45,20,20,22,40,18,45) > as.numeric(names(which(table(edades)==max(table(edades))))) [1] 18

#La media > mean(edades) [1] 25.13333

#La mediana > median(edades) [1] 20

Datos ordinales Cuando trabajamos con datos ordinales, el orden de los niveles de los datos permite calcular no sólo las frecuencias absolutas y relativas que veíamos en la lección anterior, y que para variables ordinales se definen del mismo modo, sino también frecuencias acumuladas. Es decir, no sólo podemos contar cuántas veces hemos observado un cierto dato, sino también cuántas veces hemos observado un dato menor o igual que él.

Ejemplo. Tenemos una muestra de 20 estudiantes de quienes sabemos la calificación que han sacado en un examen. Clasificamos estas calificaciones en Suspenso (S), Aprobado (A), Notable (N) y Sobresaliente (E) y consideramos su orden natural S < A < N < E. Las calificaciones que han obtenido son las siguientes:

A; A; N; S; S; A; N; E; A; A; S; S; S; A; E; N; N; E; S; A: Vamos a calcular y representar gráficamente las frecuencias acumuladas de la muestra de calificaciones del Ejemplo 8.1. Entraremos dichas calificaciones como un factor ordenado, porque es la manera natural de guardar una variable ordinal en R. > notas=ordered(c("A","A","N","S","S","A","N","E","A","A","S","S","S","A","E","N","N","E ","S","A"), levels =c("S","A","N","E")) > notas [1] A A N S S A N E A A S S S A E N N E S A Levels: S < A < N < E

# Frec . absolutas > table(notas) notas SANE 6743

# Frec . absolutas acumuladas > cumsum(table(notas)) S A N E 6 13 17 20

# Frec . relativas acumuladas > cumsum(prop.table(table(notas))) S A N E 0.30 0.65 0.85 1.00

# Grafico > barplot(table(notas),main="Diagrama de barras de frecuencias absolutas de notas")

> barplot(cumsum(table(notas)),main ="Diagrama de barras de frecuencias acumuladas de notas")

Acceder a datos categóricos en R. Supongamos que tenemos una variable cualitativa guardada en un vector o un factor,1 como por ejemplo: > Respuestas=factor(c("No","No","Si","No","Si","No","No","Si")) > Respuestas [1] No No Si No Si No No Si Levels: No Si

Con R, la tabla de frecuencias absolutas de un vector que representa una variable cualitativa se calcula con la función table. > table(Respuestas) Respuestas No Si 5 3

Los nombres de las columnas de una tabla unidimensional se obtienen con la función names. > names(table(Respuestas)) [1] "No" "Si"

La tabla de frecuencias relativas de un vector se puede calcular aplicando la función prop.table a su table. El resultado vuelve a ser una tabla de contingencia unidimensional.

> prop.table(table(Respuestas)) Respuestas No Si 0.625 0.375

Generación de tablas de frecuencias y de doble entrada.

La función table también permite construir tablas de frecuencias conjuntas de dos o más variables.

A modo de ejemplo, supongamos que el vector

Respuestas, de la sección anterior, contiene las respuestas a una pregunta dadas por unos individuos cuyos sexos tenemos almacenados en un vector Sexo, en el mismo orden que sus respuestas. En este caso, podemos construir una tabla que nos diga cuántos individuos de cada sexo han dado cada respuesta. > Respuestas=c("No","No","Si","No","Si","No","No","Si") > Sexo=c("M","M","M","H","H","H","H","H")

#H es hombre , M es mujer

> table(Respuestas,Sexo) Sexo Respuestas H M No 3 2 Si 2 1 > table(Sexo,Respuestas) Respuestas Sexo No Si H 3 2 M 2 1

El resultado es, en ambos casos, una tabla de contingencia como antes, pero ahora bidimensional, puesto que cada entrada tiene dos dimensiones, una por cada variable, como en una matriz. La función prop.table sirve para calcular tablas bidimensionales de frecuencias relativas conjuntas de pares de variables. Pero en el caso bidimensional tenemos dos tipos de frecuencias relativas, que definen, para cada par de variables, tres tablas diferentes: Las frecuencias relativas globales: para cada par de niveles Las frecuencias relativas marginales: dentro de cada nivel de una variable

# Global

> prop.table(table(Sexo,Respuestas)) Respuestas Sexo No Si H 0.375 0.250 M 0.250 0.125

#Por sexo > prop.table(table(Sexo,Respuestas),margin =1) Respuestas Sexo No Si H 0.6000000 0.4000000 M 0.6666667 0.3333333

#Por respuesta > prop.table(table(Sexo,Respuestas),margin =2) Respuestas Sexo No Si H 0.6000000 0.6666667 M 0.4000000 0.3333333

De esta manera: La tabla prop.table(table(Sexo,Respuestas)) nos da la fracción del total que representa cada pareja (sexo, respuesta): por ejemplo, un 25% del total de la muestra son mujeres que han contestado que no.

La tabla prop.table(table(Sexo,Respuestas), margin=1) nos da la fracción que representa cada respuesta dentro de cada sexo: por ejemplo, un 66.67% de las mujeres han contestado que no. La tabla prop.table(table(Sexo,Respuestas), margin=2) nos da la fracción que representa cada sexo dentro de cada respuesta: por ejemplo, las mujeres representan el 40% del total de las personas que han contestado que no.

En general, podemos calcular tablas de frecuencias de cualquier número de variables, no sólo de una o dos. Veamos un ejemplo tridimensional. Supongamos que, además de los vectores > Respuestas =c("No","No","Si","No","Si","No","No","Si") > Sexo =c("M","M","M","H","H","H","H","H")

tenemos un tercer vector con las nacionalidades de los individuos representados en estos dos vectores: > Pais =c(" Francia "," Alemania "," Italia "," Italia "," Italia "," Italia ", " Alemania "," Francia ")

Podemos calcular entonces una tabla de frecuencias absolutas para las ternas (sexo, respuesta, país). > Respuestas=c("No","No","Si","No","Si","No","No","Si") > Sexo=c("M","M","M","H","H","H","H","H") > Provincia=c("Arequipa","Junin","Lima","Lima","Lima","Lima","Junin","Arequipa") > table(Sexo,Respuestas,Provincia) , , Provincia = Arequipa

Respuestas Sexo No Si H 0 1 M 1 0 , , Provincia = Junin Respuestas Sexo No Si H 1 0 M 1 0 , , Provincia = Lima Respuestas Sexo No Si H 2 1 M 0 1

También podemos utilizar el comando ftable > ftable(Sexo,Respuestas,Provincia) Provincia Arequipa Junin Lima Sexo Respuestas H No 0 1 2 Si 1 0 1 M No 1 1 0 Si 0 0 1

Como en el caso bidimensional, las tablas correspondientes se calculan aplicando prop.table # Frecuencias relativas

> prop.table(table(Sexo,Respuestas,Provincia)) , , Provincia = Arequipa Respuestas Sexo No Si H 0.000 0.125 M 0.125 0.000 , , Provincia = Junin Respuestas Sexo No Si H 0.125 0.000 M 0.125 0.000 , , Provincia = Lima

Respuestas Sexo No Si H 0.250 0.125 M 0.000 0.125

# Frecuencias relativas globales , en formato plano > prop.table(ftable(Sexo,Respuestas,Provincia)) Provincia Arequipa Junin Lima Sexo Respuestas H No 0.000 0.125 0.250 Si 0.125 0.000 0.125 M No 0.125 0.125 0.000 Si 0.000 0.000 0.125

> # Frecuencias relativas por provincia > prop.table(table(Sexo,Respuestas,Provincia),margin =3) , , Provincia = Arequipa Respuestas Sexo No Si H 0.00 0.50 M 0.50 0.00 , , Provincia = Junin Respuestas Sexo No Si H 0.50 0.00 M 0.50 0.00 , , Provincia = Lima Respuestas Sexo No Si H 0.50 0.25 M 0.00 0.25

# Frecuencias relativas por sexo y provincia > prop.table(table(Sexo,Respuestas,Provincia),margin=c(1 ,3)) , , Provincia = Arequipa Respuestas Sexo No Si H 0.0000000 1.0000000 M 1.0000000 0.0000000 , , Provincia = Junin Respuestas Sexo No

Si

H 1.0000000 0.0000000 M 1.0000000 0.0000000 , , Provincia = Lima Respuestas Sexo No Si H 0.6666667 0.3333333 M 0.0000000 1.0000000

En este caso: La tabla prop.table(table(Sexo,Respuestas,Provincia)) nos da la fracción que representa cada terna (sexo, respuesta, provincia) dentro del total de la muestra: por ejemplo, los hombres limeños que han contestado afirmativamente forman un 12:5% del total de individuos. La tabla prop.table(table(Sexo,Respuestas,Pais), margin=3) nos da la fracción que representa cada pareja (sexo, respuesta) dentro de cada provincia: por ejemplo, los hombres que han contestado que sí representan un 25% del total de individuos limeños. La tabla prop.table(table(Sexo,Respuestas,Pais), margin=c(1,3)) nos da la fracción que representa cada respuesta dentro de cada combinación de (sexo, país): por ejemplo, un 33:33% del total de hombres limeños ha contestado que sí.

Resumir y generar gráficos.

La función plot

> x=c(2 ,5 ,6 ,3 ,4) > y=c(1 ,7 ,3 ,2 ,1) > plot (x,y)

Diagramas de barras

El tipo de gráfico más usado para representar variables cualitativas son los diagramas de barras (bar plots). Como su nombre indica, un diagrama de barras contiene, para cada nivel de la variable cualitativa, una barra de altura su frecuencia; > x=c(3 ,2 ,5 ,1 ,3 ,1 ,5 ,6 ,2 ,2 ,2 ,1 ,3 ,5 ,2) > Respuestas =c("No","No","Si","No","Si","No","No","Si") > barplot ( table (x), main =" Diagrama de barras de frecuencias absolutas de la variable \"x\"")

> barplot ( prop.table ( table ( Respuestas )), main =" Diagrama de barras de frecuencias relativas \n de la variable \" Respuestas \"")

¡Atención! Como pasaba con prop.table, el argumento de barplot ha de ser una tabla, y, por consiguiente, se ha de aplicar al resultado de table o de prop.table, nunca al vector de datos original.

Se pueden especificar los colores de las barras usando el parámetro col. Si se iguala a un solo color, todas las barras serán de este color, pero también se puede especificar un color para cada barra, igualando col a un vector de colores. Por ejemplo,

> barplot ( table ( Respuestas ), col=c(" green "))

> barplot ( table ( Respuestas ), col=c("red"," blue "))

Grafico de barras en forma horizontal > barplot ( table (x), horiz = TRUE )

Barras apiladas

Si se aplica barplot a una tabla bidimensional, por defecto dibuja las barras de la segunda variable cortadas por la frecuencia de la primera variable: se le llama un diagrama de barras apiladas.

> Respuestas =c("No","No","Si","No","Si","No","No","Si") > Sexo =c("M","M","M","H","H","H","H","H") > table (Sexo , Respuestas ) Respuestas Sexo No Si H 3 2 M 2 1 > barplot ( table (Sexo , Respuestas ))

Barras adyacentes En vez de organizar las barras de la primera variable en una sola barra vertical, se pueden dibujar una junto a la otra añadiendo el parámetro beside=TRUE, obteniéndose de esta manera un diagrama de barras por bloques. Así, > barplot(table(Sexo,Respuestas),beside=TRUE)

Gráficos circulares > x=c(3,2,5,1,3,1,5,6,2,2,2,1,3,5,2) > Respuestas=c("No","No","Si","No","Si","No","No","Si") > pie (table(Respuestas),main="Diagrama circular de la variable\" Respuestas \"")

Diagramas de caja

Un diagrama de caja, o box plot, es un gráfico que resume algunos datos estadísticos de una variable cuantitativa > x=c(1,2,3,4,5,6,2,3,2,3,4,2,2,3,2,2,5,7,3,4,2,1,3,6) > boxplot(x)

Para dibujar varios diagramas de caja en un mismo gráfico, por ejemplo, para poder compararlos, basta aplicar la instrucción boxplot a todos los vectores simultáneamente. Por ejemplo,

> > > >

x=c(1,2,3,4,5,6,2,3,2,3,4,2,2,3,2,2,5,7,3,4,2,1,3,6) y=c(5,1,3,5,5,4,1,2,5,5,4,4,1,5,5,4,1,2,6,1) z=c(3,5,6,1,2,3,1,2,5,1,5,2,4,2,6,5,2,1,4,4,1,6,5,5,4,6,4,5,4,5) boxplot(x,y,z,names=c("x","y","z"))

Guardar gráficos En la Ventana Plots, nos vamos a la sub-pestaña Export. Podemos: 

Guardar como imagen



Guardar como PDF



Copiar directamente a nuestro documento ((Word o Power Point) mediante la opción Copy to clipboard...


Similar Free PDFs