#Taller 4

Pregunta 1

Invoque y copie las primeras 5 filas de la tabla de datos survey.

Nota: De no tenerlo en su espacio de trabajo, explique cómo lograría su invocación.

library(MASS) # descargamos la librería donde se encuentran los datos
data(survey) # descargamos los datos
head(survey,5) # invocamos las 5 primeras filas
##      Sex Wr.Hnd NW.Hnd W.Hnd    Fold Pulse    Clap Exer Smoke Height      M.I
## 1 Female   18.5   18.0 Right  R on L    92    Left Some Never  173.0   Metric
## 2   Male   19.5   20.5  Left  R on L   104    Left None Regul  177.8 Imperial
## 3   Male   18.0   13.3 Right  L on R    87 Neither None Occas     NA     <NA>
## 4   Male   18.8   18.9 Right  R on L    NA Neither None Never  160.0   Metric
## 5   Male   20.0   20.0 Right Neither    35   Right Some Never  165.0   Metric
##      Age
## 1 18.250
## 2 17.583
## 3 16.917
## 4 20.333
## 5 23.667

Pregunta 2

Explique brevemente de que se trata éste estudio.

Rpta: Los datos contienen las respuestas de 237 estduiantes de estadistica 1 de la Universidad de Adelayda en Australia, contiene 12 variables entre las que se encuentran la edad, genero, medida de la palma de las manos, su mano dominante, pulso, altura, entre otras.

Pregunta 3

Dentro de las variables bajo estudio que significa Wr.Hnd y W.Hnd.

Wr.Hnd = palmo (distancia desde la punta del pulgar hasta la punta del dedo meñique de la mano extendida) de la mano de escritura, en centímetros.

W.Hnd = la misma medida de Wr.Hnd pero en la mano que no escribe (no dominante)

Pregunta 4

Haga un resumen numérico de cada una de las variables de interés.

# Resumen numérico
##      Sex          Wr.Hnd          NW.Hnd        W.Hnd          Fold    
##  Female:118   Min.   :13.00   Min.   :12.50   Left : 18   L on R : 99  
##  Male  :118   1st Qu.:17.50   1st Qu.:17.50   Right:218   Neither: 18  
##  NA's  :  1   Median :18.50   Median :18.50   NA's :  1   R on L :120  
##               Mean   :18.67   Mean   :18.58                            
##               3rd Qu.:19.80   3rd Qu.:19.73                            
##               Max.   :23.20   Max.   :23.50                            
##               NA's   :1       NA's   :1                                
##      Pulse             Clap       Exer       Smoke         Height     
##  Min.   : 35.00   Left   : 39   Freq:115   Heavy: 11   Min.   :150.0  
##  1st Qu.: 66.00   Neither: 50   None: 24   Never:189   1st Qu.:165.0  
##  Median : 72.50   Right  :147   Some: 98   Occas: 19   Median :171.0  
##  Mean   : 74.15   NA's   :  1              Regul: 17   Mean   :172.4  
##  3rd Qu.: 80.00                            NA's :  1   3rd Qu.:180.0  
##  Max.   :104.00                                        Max.   :200.0  
##  NA's   :45                                            NA's   :28     
##        M.I           Age       
##  Imperial: 68   Min.   :16.75  
##  Metric  :141   1st Qu.:17.67  
##  NA's    : 28   Median :18.58  
##                 Mean   :20.37  
##                 3rd Qu.:20.17  
##                 Max.   :73.00  
## 

Pregunta 5

Ahora, genere un nuevo conjunto de datos (de la tabla survey),en donde solo se muestren variables numéricas. Luego, calcule la media de cada una de las variables, en donde éstas se deben mostrar en la última linea del conjunto de datos. Finalmente, usando su propia función, calcule la media recortada al 5% de cada una de las variables y las agrega en otra fila.

Nota: Compare el último cálculo, con la función propia de R mean usando el argumento que contiene ésta.

datosnumericos=survey[sapply(survey,is.numeric)] # se extraen las variables numéricas 

datosnoNA=na.omit(datosnumericos) # se eliminan los elementos con valores faltantes para hacer calculos estadísticos

head(datosnoNA,5) # mostraremos solo las 5 primeras filas ya que la tabla es muy extensa 
##   Wr.Hnd NW.Hnd Pulse Height    Age
## 1   18.5   18.0    92 173.00 18.250
## 2   19.5   20.5   104 177.80 17.583
## 5   20.0   20.0    35 165.00 23.667
## 6   18.0   17.7    64 172.72 21.000
## 7   17.7   17.7    83 182.88 18.833

Ahora calcularemos la media de cada variable, y se mostrará al final de cada una:

Datos=rbind(datosnoNA,apply(datosnoNA,2,mean)) # se agrega un vector fila con las medias de cada columna
tail(Datos, 5) # se muestran solo los 5 ultimos elementos ya que el conjunto de datos es muy extenso (171 filas)
##       Wr.Hnd   NW.Hnd    Pulse   Height      Age
## 233 18.00000 18.00000 85.00000 165.1000 17.66700
## 234 18.50000 18.00000 88.00000 160.0000 16.91700
## 236 21.00000 21.50000 90.00000 183.0000 17.16700
## 237 17.60000 17.30000 85.00000 168.5000 17.75000
## 171 18.77412 18.69941 73.99412 172.5198 20.42211

Hallamos la media de cada variable con la fórmula de RStudio, creamos un vector de estas medias y lo comparamos con el vector de las medias agregado a la tabla anteriormente:

x1=mean(Datos$Wr.Hnd)
x2=mean(Datos$NW.Hnd)
x3=mean(Datos$Pulse)
x4=mean(Datos$Height)
x5=mean(Datos$Age)
VM=c(x1,x2,x3,x4,x5);VM # Vector de medias con la fórmula de RStudio
## [1]  18.77412  18.69941  73.99412 172.51976  20.42211
Medias=as.vector(tail(Datos, 1)); Medias # última fila de la tabla de datos (medias) ahora como vector
##       Wr.Hnd   NW.Hnd    Pulse   Height      Age
## 171 18.77412 18.69941 73.99412 172.5198 20.42211
VM==Medias
##     Wr.Hnd NW.Hnd Pulse Height  Age
## 171   TRUE   TRUE  TRUE   TRUE TRUE
# de esta forma confirmamos que están correctas

Creamos una formula para hallar la Media recortada:

media.recortada= function(V,p){
  
 P=round((length(V)*p)/2)
  s1=sort(V)
  return(mean(s1[-(1:P)][1:(length(s1[-(1:P)])-P)]))
}

media.recortada(Datos$Wr.Hnd,0.05)
## [1] 18.79064

Hallamos y creamos un vector de las medias recortadas de las variables númericas:

MR_X1=media.recortada(Datos$Wr.Hnd,0.05)
MR_X2=media.recortada(Datos$NW.Hnd,0.05)
MR_X3=media.recortada(Datos$Pulse,0.05)
MR_X4=media.recortada(Datos$Height,0.05)
MR_X5=media.recortada(Datos$Age,0.05)
VMR=c(MR_X1,MR_X2,MR_X3,MR_X4,MR_X5); VMR
## [1]  18.79064  18.72822  74.07358 172.41718  19.79047
DatosMR= rbind(Datos,VMR) # agregamos el vector de medias recortadas a la última fila de los datos
##        Wr.Hnd   NW.Hnd    Pulse   Height      Age
## 234  18.50000 18.00000 88.00000 160.0000 16.91700
## 236  21.00000 21.50000 90.00000 183.0000 17.16700
## 237  17.60000 17.30000 85.00000 168.5000 17.75000
## 171  18.77412 18.69941 73.99412 172.5198 20.42211
## 1721 18.79064 18.72822 74.07358 172.4172 19.79047

Se hallan las medias recortadas con la formula de RStudio, se crea un vector de estas y se compara con las medias halladas con la fórmula creada:

# se verifica mediante formula propia de R
MR_X1studio=mean(Datos$Wr.Hnd, na.rm = TRUE, trim = 0.025) 
MR_X2studio=mean(Datos$NW.Hnd, na.rm = TRUE, trim = 0.025) 
MR_X3studio=mean(Datos$Pulse, na.rm = TRUE, trim = 0.025) 
MR_X4studio=mean(Datos$Height, na.rm = TRUE, trim = 0.025) 
MR_X5studio=mean(Datos$Age, na.rm = TRUE, trim = 0.025) 
VMRStudio=c(MR_X1studio,MR_X2studio,MR_X3studio,MR_X4studio,MR_X5studio); VMRStudio
## [1]  18.79064  18.72822  74.07358 172.41718  19.79047
VMRStudio==VMR # Son iguales las halladas con la fórmula creada?
## [1] TRUE TRUE TRUE TRUE TRUE
# Efectivamente, son iguales

Pregunta 6

Construya la siguiente tabla de datos usando el estilo que propone el paquete kableExtra:

library(knitr)
library(kableExtra)

nombre <- c("luis", "Carlos", "María", "Emilio", "Sofía", "Ana")
edad <- c(60, 18, 45, 29, 13, 53)
altura <- c(187, 173, 154, 165, 145, 179)
peso <- c(75, 90, 51, 67, 43, 81)
sexo <- c ("M", "M", "F", "M", "F","F")

datos_tabla <- data.frame(nombre,edad,altura,peso, sexo)


tabla_datos <- kable(datos_tabla, kable_input = "html",booktabs = T,position = "float_left")  %>%
kable_styling(font_size = 20, full_width = F)

tabla_datos
nombre edad altura peso sexo
luis 60 187 75 M
Carlos 18 173 90 M
María 45 154 51 F
Emilio 29 165 67 M
Sofía 13 145 43 F
Ana 53 179 81 F
  1. Divida el grupo por Sexo (Hágalo de dos formas distintas):
## DIVIDIMOS LA TABLA

# primera forma

datos_tabla[ datos_tabla$sexo== "M",]
##   nombre edad altura peso sexo
## 1   luis   60    187   75    M
## 2 Carlos   18    173   90    M
## 4 Emilio   29    165   67    M
datos_tabla[ datos_tabla$sexo== "F",]
##   nombre edad altura peso sexo
## 3  María   45    154   51    F
## 5  Sofía   13    145   43    F
## 6    Ana   53    179   81    F
datos_tabla[ datos_tabla$altura<160,]
##   nombre edad altura peso sexo
## 3  María   45    154   51    F
## 5  Sofía   13    145   43    F
datos_tabla[ datos_tabla$altura>160,]
##   nombre edad altura peso sexo
## 1   luis   60    187   75    M
## 2 Carlos   18    173   90    M
## 4 Emilio   29    165   67    M
## 6    Ana   53    179   81    F

Segunda forma para dividir la tabla:

subset(datos_tabla, sexo== "M") # Tabla de Sexo M
##   nombre edad altura peso sexo
## 1   luis   60    187   75    M
## 2 Carlos   18    173   90    M
## 4 Emilio   29    165   67    M
subset(datos_tabla, sexo== "F") # Tabla de sexo F
##   nombre edad altura peso sexo
## 3  María   45    154   51    F
## 5  Sofía   13    145   43    F
## 6    Ana   53    179   81    F

Pregunta 7

  1. Construya una función que calcule la varianza muestral de la variable LungCap y Height del conjunto de datos LungCap, el cuál trata de la capacidad pulmonar de 725 personas entre niños y jóvenes. Compruebe sus resultados usando la función de biblioteca var. Los datos los encuentra en el siguiente link: LungCap Dataset.
datosL<- read.table("LungCapData.txt",header=T)
head(datosL,5)
##   LungCap Age Height Smoke Gender Caesarean
## 1   6.475   6   62.1    no   male        no
## 2  10.125  18   74.7   yes female        no
## 3   9.550  16   69.7    no female       yes
## 4  11.125  14   71.0    no   male        no
## 5   4.800   5   56.9    no   male        no
attach(datosL)
Varianza= function (x){
  n= length(x)
  v=sum((x-(sum(x)/n))^2)/(n-1)
  return(v)
}
Varianza(LungCap) # con la función creada
## [1] 7.086288
var(LungCap) # con la función de RStudio
## [1] 7.086288
Varianza(Height) # con la función creada
## [1] 51.87088
var(Height) # con la función de RStudio
## [1] 51.87088
  1. Mejore la salida de la función anterior, usando la función cat.
VarianzaCat= function (x){
  n= length(x)
  v=sum((x-(sum(x)/n))^2)/(n-1)
  cat("La varianza de X es: ",v)
}
VarianzaCat(LungCap) # con la función creada
## La varianza de X es:  7.086288
VarianzaCat(Height) # con la función creada
## La varianza de X es:  51.87088
  1. Construya una función que calcule el coeficiente de variación de Pearson, usando la variable LungCap del conjunto anterior. Muestre el resultado en porcentaje.
Pearson=  function(x){
  x=x[!is.na(x)]
  numerador= sqrt(sum((x-mean(x))^2)/(length(x)-1))
  denominador= sum(x)/length(x)
  cv=round((numerador/denominador)*100,3)
  cat("Coeficiente de variación de Pearson es =", cv, "%","\n")
}
Pearson(LungCap)
## Coeficiente de variación de Pearson es = 33.854 %

Coeficiente de variación de Pearson de la variable Age:

Pearson(Age)
## Coeficiente de variación de Pearson es = 32.488 %
library(FinCal)
args(coefficient.variation)
## function (sd, avg) 
## NULL
sd(Age)
## [1] 4.00475
mean(Age)
## [1] 12.3269
coefficient.variation(sd(Age),mean(Age))
## [1] 0.324879

de esta manera probamos que si está correcta la formula.

  1. Construya una función general que calcule un I.C de un tanto por ciento de confianza (90%, 95% o 99%) para la diferencia de medias poblacionales (μ1−μ2), bajo las siguientes condiciones:

Nota: Puede usar cualquier conjunto de datos para este inciso

icdiffmediasvardescoeiguales=function(x,y) { 

x=x[!is.na(x)]
y=y[!is.na(y)]
xbarra=mean(x)
ybarra=mean(y)
desvx=sd(x)
desvy=sd(y)
n1=length(x)
n2=length(y)
spcuadrado=(((n1-1)*desvx**2)+(n2-1)*desvy**2)/(n1+n2-2)
spcuadrado
sqrt(spcuadrado)
alpha=0.05
t=qt(alpha/2,n1+n2-2,lower.tail = F)
t
ME=t*sqrt((spcuadrado/n1)+(spcuadrado/n2))
print("Intervalo de confianza para la diferencia de medias de una muestra pequeña con varianzas iguales y desconocidas")
LSC=(xbarra-ybarra)+ME
LIC=(xbarra-ybarra)-ME
return(data.frame(LIC=LIC,LSC=LSC))
}


###Creamos los datos
ventasA=c(1320,1495,990,1250,12900,1900,1500,1100,1250,1100,1930)
ventasB=c(1110,1405,985,1290,1300,1705,1200,1105,1150,1210,NA)

datos <-data.frame(ventasA,ventasB)
datos
##    ventasA ventasB
## 1     1320    1110
## 2     1495    1405
## 3      990     985
## 4     1250    1290
## 5    12900    1300
## 6     1900    1705
## 7     1500    1200
## 8     1100    1105
## 9     1250    1150
## 10    1100    1210
## 11    1930      NA
icdiffmediasvardescoeiguales(datos$ventasA,datos$ventasB)
## [1] "Intervalo de confianza para la diferencia de medias de una muestra pequeña con varianzas iguales y desconocidas"
##         LIC      LSC
## 1 -1131.742 3500.651
ventas1=datos$ventasA[!is.na(datos$ventasA)]
ventas2=datos$ventasB[!is.na(datos$ventasB)]


##Comprobacion
t.test(ventas1,ventas2,var.equal=T,conf.level=0.95)
## 
##  Two Sample t-test
## 
## data:  ventas1 and ventas2
## t = 1.0703, df = 19, p-value = 0.2979
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -1131.742  3500.651
## sample estimates:
## mean of x mean of y 
##  2430.455  1246.000
  1. Crear dos funciones inventadas por usted mismos preferiblemente en el campo estadístico en donde se involucren las sentencias if – else y for – break. Explíque cada una de manera detallada.
# Formula para calcular el P-Valor - Diferencia de medias

PHdiferencias= function(X,Y,Hi,do){ # los argumentos son
  # X es el vector 1
  # Y es el vector 2
  # Hi es la cola
  # do es la diferencia de las medias que queremos probar, 
  # en este caso es cero
Xbar= mean(X)
Ybar= mean(Y)
nX= length(X)
nY= length(Y)
sX= sd(X)
sY= sd(Y)
Z= ((Xbar-Ybar)-do)/sqrt((sX^2/nX)+(sY^2/nY)) # Estadistico de prueba

if(Hi=="="){
Pvalor=2*pnorm(abs(Z),lower.tail =F )
}
if(Hi=="<"){
Pvalor=pnorm(Z)  
}
if(Hi==">"){
Pvalor=pnorm(abs(Z), lower.tail = F)  
}
return(Pvalor)
}
PHdiferencias(ventas1,ventas2,"<", 0)
## [1] 0.8696808
########################################################