Ejercicio

Tomando en cuenta la siguiente base de datos:

sexo<-c("Mujer","Hombre","Hombre","Hombre","Hombre","Mujer","Hombre","Mujer",
        "Mujer","Mujer","Hombre","Mujer","Mujer" ,"Mujer","Hombre" ,"Hombre",
        "Hombre" ,"Mujer" ,"Mujer" ,"Mujer")
talla<-c(49,48,47,43,49,48,50,51,50,46,49,48,49,50,50,50,51 ,50,49,49)
peso<-c(3.150,2.030,2.200,3.000,2.770,2.550,3.855,3.997,3.100,2.550,
        3.350,2.616,3.118,3.750,2.800,3.340,3.320,NA,3.050,2.860)
     
datos<-data.frame(sexo,talla,peso)   
datos

Pregunta 1:

Construya una función propia de R llamada descriptivos, la cual, a partir de un conjunto de datos cuantitativos le permita:

  1. Visualizar en una sola gráfica el boxplot y el histograma de la variable que ingresemos.

  2. Visualizar los resúmenes numéricos: media, mediana, moda, varianza, desviación estándar, coeficiente de variación, cuartil 1, cuartil 2, cuartil 3, número de atípicos, coeficiente de asimentría y coeficiente de curtosis

descriptivos<-function(pp,na.rm=F){
  ifelse(na.rm == T ,pp <- as.vector(na.omit(pp)), pp <- pp)
  Media<-mean(pp)
  q1<-boxplot(pp, plot = F)
  Mediana<-median(pp)
  moda<-function(pp){
    m1<-names(table(pp)[table(pp)==max(table(pp))])
    ifelse(length(m1)==1 ,m1, NA)}
  Varianza <- sum((pp - Media)^2) / length(pp)
  D.est. <- sqrt(Varianza)
  C.V. <- (D.est. / Media)
  n.atip<-length(q1$out)
  Curtosis<-psych::kurtosi(pp, type = 2,na.rm=F)
  Asimetria<-psych::skew(pp,type = 2,na.rm=F)
  par(mfrow = c(1, 2))
  boxplot(pp, horizontal = F,main= "Boxplot",col="purple")
  hist(pp , xlab = "", ylab = "", main= "Histograma",col="purple")
  par(mfrow = c(1, 1))
  c("media"=(Media),"mediana"=Mediana,"moda"=moda(pp),
    "varianza"=Varianza,"D.est."=D.est.,
    "c.v"=C.V.,"Q1"=q1$stats[2,1],"Q3"=q1$stats[4,1],
    "n.atip"=n.atip,"asimetria"=Asimetria,
    "curtosis"=Curtosis)
}
descriptivos(datos$talla)

##       media     mediana        moda    varianza      D.est.         c.v 
## 48.80000000 49.00000000          NA  3.26000000  1.80554701  0.03699891 
##          Q1          Q3      n.atip   asimetria    curtosis 
## 48.00000000 50.00000000  1.00000000 -1.77292223  4.21580251
descriptivos(datos$peso)
##     media   mediana      moda  varianza    D.est.       c.v        Q1        Q3 
##        NA        NA    "2.55"        NA        NA        NA   "2.693"    "3.33" 
##    n.atip asimetria  curtosis 
##       "0"        NA        NA
descriptivos(datos$peso,na.rm=T)

##                media              mediana                 moda 
##   "3.02136842105263"               "3.05"               "2.55" 
##             varianza               D.est.                  c.v 
##  "0.258638864265928"  "0.508565496535036"   "0.16832290064045" 
##                   Q1                   Q3               n.atip 
##              "2.693"               "3.33"                  "0" 
##            asimetria             curtosis 
## "0.0684931228159632" "-0.183933301650606"

Pregunta 2.

Considere las siguientes tablas de frecuencia:

Construya una función propia de R llamada “agrupcentral”, que le permita calcular la media, mediana y moda de estos datos. La función deberá admitir únicamente como input los intervalos y las frecuencias absolutas de las tablas.

Intervalos Fr. Absolutas
[42,44) 1
[44,46) 0
[46,48) 2
[48,50) 9
[50,52) 8
Intervalos Fr. Absolutas
[3, 7) 20
[7, 11) 25
[11,15) 30
[15,19) 15
agrupcentral<-function(x,fa){
  lenght<-sum(fa)
  mitadput<-x[-length(x)]+diff(x)/2
  prom<-sum(fa*mitadput)/lenght
  ac<-cumsum(fa)
  me<-if((sum(fa))%%2==0){
    sum(fa)/2
  }else{
    ((sum(fa))+1)/2
  }
  i<-ac-me
  median<-if(sum(i==0) !=0){
    x[which(i==0)+1]
  }else{
    mmin<-min(which(i>0),x[which(i==0)+1])
    x[mmin]+((((lenght/2)-ac[mmin-1])/(ac[mmin]))*(diff(x)[1]))
  }
  int<-min(which(i>0))
  fi_i<-(fa[is.na(which.max(fa)-1)]=fa[(which.max(fa)-1)])
  fi_ii<-(fa[is.na(which.max(fa)+1)]=fa[(which.max(fa)+1)])
  f_i<-(max(fa))
  num<-(f_i-fi_i)
  den<-(f_i-fi_i)+(f_i-fi_ii)
  MODA<-x[int]+(num/den)*(diff(x)[1])
  c("Moda"=MODA,"Media"=prom,"Mediana"=median)
}
agrupcentral(x=c(42,44,46,48,50,52),fa=c(1,0,2,9,8))
##     Moda    Media  Mediana 
## 49.75000 49.30000 49.16667
agrupcentral(x=c(3,7,11,15,19),fa=c(20,25,30,15))
##     Moda    Media  Mediana 
## 12.00000 10.77778 11.00000