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
Construya una función propia de R llamada descriptivos, la cual, a partir de un conjunto de datos cuantitativos le permita:
Visualizar en una sola gráfica el boxplot y el histograma de la variable que ingresemos.
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"
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