#Taller 4
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
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.
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)
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
##
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
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 |
## 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
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
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
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.
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
# 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
########################################################