- Invoque y copie las primeras 5 filas de la tabla de datos survey
library(MASS)
attach(survey)
head(survey,n=5)
Sex Wr.Hnd NW.Hnd W.Hnd Fold Pulse Clap Exer Smoke Height
1 Female 18.5 18.0 Right R on L 92 Left Some Never 173.0
2 Male 19.5 20.5 Left R on L 104 Left None Regul 177.8
3 Male 18.0 13.3 Right L on R 87 Neither None Occas NA
4 Male 18.8 18.9 Right R on L NA Neither None Never 160.0
5 Male 20.0 20.0 Right Neither 35 Right Some Never 165.0
M.I Age
1 Metric 18.250
2 Imperial 17.583
3 <NA> 16.917
4 Metric 20.333
5 Metric 23.667
2.Explique brevemente de que se trata este estudio
data.frame que contiene las respuestas de 237 estudiantes de Estadística I de la Universidad de Adelaida a una serie de preguntas.
3.Dentro de las variables bajo estudio que significa Wr.Hnd y W.Hnd.
Wr.Hnd: Distancia (cm) de la punta del pulgar a la punta del dedo meñique de la mano separada, de la mano con la que escribe
span (distance from tip of thumb to tip of little finger of spread hand) of writing hand, in centimetres.
W.Hnd: Mano con la que escribe
writing hand of student. (Factor, with levels “Left” and “Right”.)
4.Haga un resumen numérico de cada una de las variables de interés.
summary(survey)
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
5.Calcule la media para variable “Height” por separado. Además, usando su propia función calcule la media recordada al 5% y compare ésta con función propia de R mean haciendo uso del argumento trim
mean(Height, na.rm = T)
[1] 172.3809
media = function(x, a) {
x <- x[!is.na(x)] # Eliminando los NA
if (a == 0) {
M = sum(x)/length(x)
cat("Media=", M, "\n")
} else if (a > 0 & a < 0.5) {
x = sort(x) # media recortada
inf = which(x <= x[a * length(x)/2])
sup = which(x > x[length(x) - a * length(x)/2])
x_r = x[-c(inf, sup)]
Mr = sum(x_r)/length(x_r)
cat("Media=", Mr, "\n")
print(length(x_r))
} else {
"valor de a fuera del rango"
}
}
media(Height, 0)
Media= 172.3809
media(Height, 0.05)
Media= 172.3938
[1] 198
mean(Height, 0.05, na.rm = T)
[1] 172.2766
- Construya la siguiente tabla de datos.
Nombres Edad Altura Peso Sexo
1 Luis 60 187 75 M
2 Carlos 18 173 90 M
3 Maria 45 154 51 F
4 Emilio 29 165 67 M
5 Sofia 13 145 43 F
6 Ana 53 179 81 F
Nombres=c("Luis","Carlos","Maria","Emilio","Sofia","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")
(encuesta=data.frame(Nombres,Edad, Altura,Peso,Sexo) )
encuesta[Sexo=="M",]
Nombres Edad Altura Peso Sexo
1 Luis 60 187 75 M
2 Carlos 18 173 90 M
4 Emilio 29 165 67 M
encuesta[Sexo=="F",]
Nombres Edad Altura Peso Sexo
3 Maria 45 154 51 F
5 Sofia 13 145 43 F
6 Ana 53 179 81 F
encuesta[Altura<=160,]
Nombres Edad Altura Peso Sexo
3 Maria 45 154 51 F
5 Sofia 13 145 43 F
encuesta[Altura>160,]
Nombres 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
7a.Construya una función que calcule la varianza muestral de un conjunto de datos compruébela con la función de biblioteca “var”
VAR = function(x) {
x <- x[!is.na(x)]
sigma2 = sum((x - mean(x))^2)/(length(x) - 1)
print(sigma2)
}
VAR(Height)
[1] 96.9738
var(Height, na.rm = T)
[1] 96.9738
- Mejore la salida de la función anterior, usando la función “cat”
VAR = function(x) {
x <- x[!is.na(x)]
sigma2 = sum((x - mean(x))^2)/(length(x) - 1)
cat(sigma2, sep = "", fill = T, labels = c("varianza="))
}
VAR(Height)
varianza= 96.9738
- Construya una función que calcule el coeficiente de variación de Pearson. Muestre el resultado en Porcentaje.
CV = function(x) {
x <- x[!is.na(x)]
M = sum(x)/length(x)
V = sum((x - M)^2)/(length(x) - 1)
Sd = sqrt(V)
Cv = round(Sd/M * 100, 3) # redondeando a 3 cifras decimales
cat("Coeficiente de varacion=", Cv, sep = "", "\n")
}
CV(Height)
Coeficiente de varacion=5.713
IC = function(x1, x2, alpha, which = 1) {
if (which == 1 & alpha > 0 & alpha < 1) {
# caso varianzas iguales
x1 <- x1[!is.na(x1)]
x2 <- x2[!is.na(x2)]
X1 = mean(x1)
X2 = mean(x2)
n1 = length(x1)
n2 = length(x2)
Gl = n1 + n2 - 2
Sp = sqrt(((n1 - 1) * var(x1) + (n2 - 1) * var(x2))/Gl)
ttabla = qt(alpha/2, Gl, lower.tail = F)
e = ttabla * Sp * sqrt(1/n1 + 1/n2)
lim_inf = (X1 - X2) - e
lim_sup = (X1 - X2) + e
intervalo = cbind(lim_inf, lim_sup)
# cat('Inter_conf',intervalo,'\n') print(c(lim_inf,lim_sup))
limites = c("lim_inf", "lim_sup")
valor = round(c(lim_inf, lim_sup), 3)
Intervalo = rbind(limites, valor)
print(Intervalo)
}
if (which == 2 & alpha > 0 & alpha < 1) {
### caso varianzas diferentes
x1 <- x1[!is.na(x1)]
x2 <- x2[!is.na(x2)]
Xm1 = mean(x1)
Xm2 = mean(x2)
n1 = length(x1)
n2 = length(x2)
s1 = var(x1)/n1
s2 = var(x2)/n2
v = ceiling((s1 + s2)^2/(s1^2/(n1 - 1) + s2^2/(n2 - 1)))
S = sqrt(s1 + s2)
tt = qt(alpha/2, v, lower.tail = F)
e1 = tt * S
lim_inf = (Xm1 - Xm2) - e1
lim_sup = (Xm1 - Xm2) + e1
limites = c("lim_inf", "lim_sup")
valor = round(c(lim_inf, lim_sup), 3)
Intervalo = rbind(limites, valor)
print(Intervalo)
}
}
Probando la función bajo el supuesto de varianzas iguales
# generando dos muestras con distribucion normal
set.seed(1)
P1 = rnorm(25, mean = 35, sd = 3)
P2 = rnorm(20, mean = 30, sd = 9)
IC(P1, P2, 0.05, 1)
[,1] [,2]
limites "lim_inf" "lim_sup"
valor "2.759" "8.603"
t.test(P1, P2, var.equal = T, conf.level = 0.95)
Two Sample t-test
data: P1 and P2
t = 3.9205, df = 43, p-value = 0.0003126
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
2.758672 8.603057
sample estimates:
mean of x mean of y
35.50600 29.82513
Probando la función bajo el supuesto de varianzas diferentes
IC(P1, P2, 0.05, 2)
[,1] [,2]
limites "lim_inf" "lim_sup"
valor "2.456" "8.906"
t.test(P1, P2, var.equal = F, conf.level = 0.95)
Welch Two Sample t-test
data: P1 and P2
t = 3.6281, df = 24.792, p-value = 0.001291
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
2.454674 8.907055
sample estimates:
mean of x mean of y
35.50600 29.82513
- Crear dos funciones inventadas por usted mismos en donde se involucren las sentencias if - else y for - break. Explíque cada una de manera detallada.
La siguiente función con las sentencias if-else. Calcula la mediana para datos no agrupados
mediana = function(y) {
y = sort(y)
y <- y[!is.na(y)]
n = length(y)
if (n%%2 != 0) {
## identfcando si el tamaño de la muestra es impar
Med = y[(n + 1)/2] # dato central de la muestra ordenada
} else {
Med = (y[n/2] + y[n/2 + 1])/2
} # promedio datos centrales
cat("Mediana=", Med, "\n")
}
mediana(Height)
Mediana= 171
median(Height, na.rm = T)
[1] 171
median(P2)
[1] 29.27054
mediana(P2)
Mediana= 29.27054
La siguiente función con las sentencias for-break.Función que suma el cuadrado de variables aleatorias normales estándar ( chi cuadrada)
chi = function(n) {
for (i in 2:100) {
if (i == n)
break
x <- rnorm(i)
cat(i, ": ", sum(x^2), "\n", sep = "")
}
}
chi(6)
2: 0.6334694
3: 1.379615
4: 1.924888
5: 7.52519