Organizaci贸n de Datos
ORGANIZACIÓN DE DATOS
R con R
ORGANIZACIÓN DE DATOS I.
OBJETIVO Emplear comandos, funciones y librerías para realizar un análisis descriptivo apropiado.
II.
DESCRIPCIÓN En este tema se proporcionan algunos procedimientos para la clasificación, la tabulación y la representación de los datos. Estos procedimientos conducen a la formación de cuadros o tablas de frecuencias y a representaciones gráficas. Clasificación de Variables: 1) Cualitativas - Nominal - Jerárquica 2) Cuantitativas - Discreta - Continua
III.
CASO APLICATIVO Se tiene un conjunto de registros del Hospital Centro de Salud Materno de San Bartolomé. Se desea realizar análisis exploratorio de las variables. Data: http://rconr.webcindario.com/data/bartolome.txt Descripción de variables:
IV.
caso edad estado partos peso sexo
: : : : : :
Número de caso Edad de la madre Estado civil de la madre Número de partos de la madre Peso del hijo en kg Sexo del hijo
DESARROLLO Para el desarrollar la aplicación se tomará en cuenta la clasificación de la variable; primero se hará la organización tabular y después realizar la gráfica correspondiente. Entonces empezaremos con la lectura de los datos.
1
ORGANIZACIÓN DE DATOS
R con R
SOLUCIONARIO DE LA APLICACIÓN > getwd() #Identificar la dirección de trabajo [1] "C:/Users/DANNY/Documents" > setwd("G:/R") #Asignar la dirección donde se desea trabajar > dir() #Ver los archivos de
la carpeta de trabajo
[1] "bartolome.txt" "notas.txt" > data<-read.table("bartolome.txt", header=TRUE) #Leer la data > head(data) #Muestra los 6 primeros registros caso edad estado partos peso sexo 1 1 25 Conviv 2 2.90 Femenino 2 2 22 Conviv 2 2.90 Femenino 3 3 32 Conviv 4 4.04 Masculino 4 4 22 Conviv 1 4.35 Femenino 5 5 18 Casada 1 3.60 Masculino 6 6 21 Casada 3 3.50 Masculino > str(data) #Muestra el tipo de dato de las variables 'data.frame': 45 obs. of 6 variables: $ caso : int 1 2 3 4 5 6 7 8 9 10 ... $ edad : int 25 22 32 22 18 21 20 19 23 26 ... $ estado: Factor w/ 3 levels "Casada","Conviv",..: 2 2 2 2 1 1 3 1 1 1 ... $ partos: int 2 2 4 1 1 3 2 1 3 2 ... $ peso : num 2.9 2.9 4.04 4.35 3.6 3.5 3.2 3 3.6 2.8 ... $ sexo : Factor w/ 2 levels "Femenino","Masculino": 1 1 2 1 2 2 2 1 2 2 ... > names(data) #Muestra los nombres de las variables [1] "caso"
"edad"
"estado" "partos" "peso"
"sexo"
> attach(data) #Para jalar las variables de manera directa
A. VARIABLES CUALITATIVAS > fa<-table(estado)#Frecuencia absoluta > fa estado Casada
Conviv Soltera
26
17
2
> fr<-fa/length(estado)#Frecuencia relativa > fr estado Casada
Conviv
Soltera
0.57777778 0.37777778 0.04444444 > fp<-fr*100 #Frecuencia porcentual > fp estado Casada
Conviv
Soltera
57.777778 37.777778
4.444444
2
ORGANIZACIร N DE DATOS
R con R
> barplot(fa, ylab="Frecuencia Absoluta", main="Estado Civil") #Grรกfico de barras
> color<-c("lightblue", "mistyrose", "lightcyan") > barplot(fa,y lab="Frecuencia Absoluta", main="Estado Civil", col=color)#A color
> barplot(fa, ylab="Frecuencia Absoluta", main="Estado Civil", col=rainbow(3))#3 colores
> pie(fa) #Grรกfico de pastel
3
ORGANIZACIĂ&#x201C;N DE DATOS
R con R
> pie(fa,labels=c("Casada","Conviviente","Soltera"),main="Estado Civil",col=rainbow(3),init.angle=90)
> dotchart(as.numeric(fa),labels=c("Casada","Conviviente","Soltera"),main="Estado Civil",col=rainbow(3))
B. VARIABLES CUANTITATIVAS > ##DISCRETAS > fa<-table(partos) > fa partos 1
2
3
4
5
12 16 11
3
3
> fr<-fa/length(partos) > fr partos 1
2
3
4
5
0.26666667 0.35555556 0.24444444 0.06666667 0.06666667 > Fa<-cumsum(table(partos)) #Forma general > Fa<-cumsum(fa) #Empleando la frecuecia absoluta > Fa 1
2
3
4
5
12 28 39 42 45
4
ORGANIZACIÓN DE DATOS
R con R
> Fr<-cumsum(table(partos)/length(partos)) > Fr<-cumsum(fr) > Fr 1
2
3
4
5
0.2666667 0.6222222 0.8666667 0.9333333 1.0000000 > fp<-fr*100 > fp partos 1
2
3
4
5
26.666667 35.555556 24.444444
6.666667
6.666667
4
5
> Fp<-cumsum(fp) > Fp 1
2
3
26.66667
62.22222
86.66667
93.33333 100.00000
GRÁFICA: > plot(fa,main="Número de partos",col=rainbow(5), type="h")
> ##CONTINUAS > k<-sqrt(length(peso)) > k<-1+3.3*log(length(peso), 10) > k<-round(k) > k [1] 6 > fa<-table(cut(peso, breaks=k)) > fa (2.62,2.96]
(2.96,3.3]
11
14
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 13
3
2
2
5
ORGANIZACIĂ&#x201C;N DE DATOS
R con R
> Fa<-cumsum(fa) > Fa (2.62,2.96]
(2.96,3.3]
11
25
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 38
41
43
45
> fr<-fa/length(peso) > round(fr, digits=3) (2.62,2.96]
(2.96,3.3]
0.244
0.311
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 0.289
0.067
0.044
0.044
> Fr<-cumsum(fr) > round(Fr, digits=3) (2.62,2.96]
(2.96,3.3]
0.244
0.556
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 0.844
0.911
0.956
1.000
> fp<-fr*100 > round(fp, digits=2) (2.62,2.96]
(2.96,3.3]
24.44
31.11
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 28.89
6.67
4.44
4.44
> Fp<-cumsum(fp) > round(Fp, digits=2) (2.62,2.96]
(2.96,3.3]
24.44
55.56
(3.3,3.64] (3.64,3.97] (3.97,4.31] (4.31,4.65] 84.44
91.11
95.56
100.00
GRĂ FICA: > min(peso) [1] 2.62 > max(peso) [1] 4.65 > R<-max(peso)-min(peso) > tic<-R/k > tic<-signif(tic, digits = 2) > tic [1] 0.34 > ptos<-min(peso)+(0:k)*(max(peso)-min(peso))/k > ptos [1] 2.620000 2.958333 3.296667 3.635000 3.973333 4.311667 4.650000
> hist(peso, breaks=ptos, main="Peso del Bebe", col=rainbow(k))
6
ORGANIZACIĂ&#x201C;N DE DATOS
R con R
> L<-hist(peso, breaks=ptos, main="Peso del Bebe", col=rainbow(k)) > lines(c(min(L$breaks),L$mids,max(L$breaks)),c(0,L$counts,0),tipe="l",col="black") Mensajes de aviso perdidos In plot.xy(xy.coords(x, y), type = type, ...) : "tipe" is not a graphical parameter
> plot(fr,type="o", main="Poligono de Frecuencias", ylab="Frecuencia Relativa", col=2)
> mark.class<-c(1:k) for(i in 1:k){ mark.class[i]<-round((ptos[i]+ptos[i+1])/2,2) }
> plot(mark.class,as.numeric(fa), type="o", main="Poligono de Frecuencias", ylab="Frecuencia Absoluta", col=2)
7
ORGANIZACIĂ&#x201C;N DE DATOS
R con R
> plot(mark.class,as.numeric(fr), type="o", main="Poligono de Frecuencias", ylab="Frecuencia Relativa", col=2)
> plot(Fr, type="o", main="Ojiva", ylab="Frecuencia Relativa", col=4)
> LSi<-rep(0,k) > for(i in 1:k){ + LSi[i]<-round(ptos[i+1],2) + }
> plot(LSi, Fr, type="o", main="Ojiva", ylab="Frecuencia Relativa", col=4)
8
ORGANIZACIÓN DE DATOS
V.
R con R
FUNCIONES CREADAS:
##### FUNCION PARA TABLA DE FRECUENCIAS Y GRÁFICAS (Cualitativa) ##### table.freq <- function(x){ freq.abs <- table(x) freq.rel <- round(freq.abs/length(x), digits=3) freq.porc <- round(freq.rel*100, digits=1) cat("\n", "Tabla de Frecuencias:", "\n") table <- cbind(freq.abs, freq.rel, freq.porc) cat("\n", "Categoría") colnames(table)=c("Frec.Abs.", "Frec.Rel.", "Frec.Porc.") print(table) etiq <- paste(levels(x), freq.porc, "%", sep=" ") n <- as.numeric(length(table(x))) par(mfrow=c(2,2)) dotchart(as.numeric(freq.abs), labels=paste(freq.abs, levels(x)), main=substitute(x), col=rainbow(n)) pie(freq.abs, main=substitute(x) , labels=paste(freq.porc, sep="","% ", levels(x)),
col=rainbow(n))
barplot(freq.abs, main=substitute(x), legend.text=freq.abs, col=rainbow(n), ylab="fa") } ##### > table.freq(estado) Tabla de Frecuencias: Categoría
Frec.Abs. Frec.Rel. Frec.Porc.
Casada
26
0.578
57.8
Conviv
17
0.378
37.8
Soltera
2
0.044
4.4
9
ORGANIZACIÓN DE DATOS
R con R
##### FUNCION PARA TABLA DE FRECUENCIAS Y GRÁFICAS (Cuantitativa-Discreta) ##### table.freq <- function(x){ freq.abs <- table(x) freq.rel <- round(freq.abs/length(x), digits=3) freq.porc <- round(freq.rel*100, digits=1) cat("\n","Tabla de Frecuencias:", "\n") table <- cbind(freq.abs, freq.rel, freq.porc) cat("\n","Valor") colnames(table)=c("Frec.Abs.", "Frec.Rel.", "Frec.Porc.") print(table) n <- as.numeric(length(table(x))) plot(freq.abs, main=paste("N° ",substitute(x)), ylab="Frecuencia Absoluta", col=rainbow(n), type="h")
} ##### > table.freq(partos) Tabla de Frecuencias:
Valor
Frec.Abs. Frec.Rel. Frec.Porc.
1
12
0.267
26.7
2
16
0.356
35.6
3
11
0.244
24.4
4
3
0.067
6.7
5
3
0.067
6.7
10
ORGANIZACIÓN DE DATOS
R con R
##### FUNCION PARA TABLA DE FRECUENCIAS Y GRÁFICAS (Cuantitativo-Continua) ##### table.freq <- function(x, d){ k <- 1+3.3*log(length(x), 10) k <- round(k) ptos <- min(x)+(0:k)*(max(x)-min(x))/k mark.class <- rep(0, k) for(i in 1:k){ mark.class[i] <- round((ptos[i]+ptos[i+1])/2, 2) } freq.abs <- table(cut(x, breaks=k)) freq.acum.abs <- cumsum(freq.abs) freq.rel <- round(freq.abs/length(x), digits=3) freq.acum.rel <- cumsum(freq.rel) freq.porc <- round(freq.rel*100, digits=d) freq.acum.porc <- cumsum(freq.porc) cat("\n","Tabla de Frecuencias:","\n") table <- cbind(mark.class,freq.abs,freq.acum.abs,freq.rel,freq.acum.rel,freq.porc,freq.acum.porc) colnames(table)=c("Marc.Clas", "Frec.Abs.", "fa_Acum.", "Frec.Rel.", "fr_Acum.", "Frec.Porc.", "p_Acum.")
print(k=k, table) par(mfrow=c(2, 2)) hist(x, breaks=ptos, main=substitute(x), col=rainbow(k)) L <- hist(x, breaks=ptos, main=substitute(x), col=rainbow(k)) L lines(c(min(L$breaks),L$mids,max(L$breaks)),c(0,L$counts,0),tipe="l",col="black") plot(freq.porc,type="o", main="Poligono de Frecuencias", ylab="Frecuencia Porcentual", col=2)
LSi <- rep(0, k) for(i in 1:k){ LSi[i] <- round(ptos[i+1], 2) } plot(LSi, freq.acum.rel, type="o", main="Ojiva", ylab="Frecuencia Relativa", col=4) } #####
11
ORGANIZACIĂ&#x201C;N DE DATOS
R con R
> table.freq(peso, 2)
Tabla de Frecuencias: Marc.Clas Frec.Abs. fa_Acum. Frec.Rel. fr_Acum. Frec.Porc. p_Acum. (2.62,2.96]
2.79
11
11
0.244
0.244
24.4
24.4
(2.96,3.3]
3.13
14
25
0.311
0.555
31.1
55.5
(3.3,3.64]
3.47
13
38
0.289
0.844
28.9
84.4
(3.64,3.97]
3.80
3
41
0.067
0.911
6.7
91.1
(3.97,4.31]
4.14
2
43
0.044
0.955
4.4
95.5
(4.31,4.65]
4.48
2
45
0.044
0.999
4.4
99.9
12