Monday, March 14, 2016
Estadisticas resumen
En el siguiente ejemplo se calcula la media de la variable X
mean(datos$X)
## [1] 24.36364
La función mean() acepta como argumentos un vector numerico o un dataframe numerico (objetos de fecha tambien son aceptados).
ó invocando a la libreria mosaic, se pueden calcular los estadísticos descriptivos de la variable, es decir, valores mínimos y máximos, cuartiles y número de observaciones
favstats(X, data=datos)
## min Q1 median Q3 max mean sd n missing
## 1 6.5 22 44.5 49 24.36364 19.2472 11 0
summary(datos)
## caso X Y
## Min. : 1.0 Min. : 1.00 Min. : 4.00
## 1st Qu.: 3.5 1st Qu.: 6.50 1st Qu.: 7.00
## Median : 6.0 Median :22.00 Median : 8.00
## Mean : 6.0 Mean :24.36 Mean :13.36
## 3rd Qu.: 8.5 3rd Qu.:44.50 3rd Qu.:24.00
## Max. :11.0 Max. :49.00 Max. :26.00
Acá se usa la instrucción attach para no tener que estar llamando a la data cada vez que se necesite calcular algún estadístico a una variable
attach(datos)
median(X)
## [1] 22
var(X)
## [1] 370.4545
sd(X)
## [1] 19.2472
min(X)
## [1] 1
max(X)
## [1] 49
sum(X)
## [1] 268
prod(X)
## [1] 2.969091e+12
range(X)
## [1] 1 49
wtd.mean(X,weights = NULL) # calcula la media simple
## [1] 24.36364
wtd.mean(X,weights = c(1,2,1,4,2,6,7,8,9,2,11)) #calcula la media ponderada
## [1] 33.41509
-Verifiquemos este resultado creando nuestro propio código
weights = c(1,2,1,4,2,6,7,8,9,2,11)
suma=0
i=0
for(i in 1:length(X)){
suma=suma+X[i]*weights[i]
d=cumsum(weights)
n=d[length(X)]
}
i=i+1
mediaPonderada=suma/n
mediaPonderada
## [1] 33.41509
wtd.var(X,weights = c(1,2,1,4,2,6,7,8,9,2,11))
## [1] 255.5552
wtd.quantile(X,weights = c(1,2,1,4,2,6,7,8,9,2,11))
## 0% 25% 50% 75% 100%
## 1 21 44 45 49
wtd.rank(X,weights = c(1,2,1,4,2,6,7,8,9,2,11))
## [1] 1.0 2.5 4.0 6.5 15.5 11.5 20.0 27.5 36.0 41.5 48.0
La función wtd.mean() en el paquete Hmisc calcula la media ponderada. Otra de las funciones asociadas son: wtd.var(), wtd.quantile() y wtd.rank()
Mientras que los coeficientes de asimetría y curtosis son menos utilizados que la media y la deviación estandar, en ciertos momentos pueden ser útiles.
El coeficiente de asimetría es descrito como el tercer momento alrededor de la media y nos informa si la distribución es simetrica (coeficiente=0).
Curtosis es una función de momento central cuatro.
skewness(X) #coeficiente de asimetria
## [1] 0.1149118
kurtosis(X)
## [1] 1.450516
all.moments(X)
## [1] 1.00000 24.36364 930.36364
all.moments(X, order.max = 5,central = TRUE)
## [1] 1.000000e+00 3.229740e-16 3.367769e+02 7.101953e+02 1.645156e+05
## [6] 4.997955e+05
El paquete moments facilta el calculo de los coeficientes de asimetría y curtosis dentro de R, así como tambien los momentos de mayor orden, utilizando all.moments()
A veces la data tiene valores muy pequeños o muy grandes con respecto a todos los demás, y para eliminar la atracción que siente la media por valores atípicos, se trunca (elimina) un porcentaje de ellos
mean(X,trim = 0.2) #eliminó 20%
## [1] 24
mean(X,trim=0.5)#Eliminó 50%
## [1] 22
El valor trim puede tomar un rango de 0 a 0.5 y especifica la fracción de observaciones que deben ser cortadas de cada lado de X antes de que la media sea calculada.
frac=0.5 da como resultado la mediana.
quantile(X, c(.025, .975)) # Calcula los cuantiles del 25% y 97,5% respectivamente
## 2.5% 97.5%
## 1.25 48.75
quantile(X, seq(from=.95, to=.975, by=.0125)) # Calcula los cuantiles desde el 95% hasta el 97.5% en pasos de 1,25
## 95% 96.25% 97.5%
## 48.500 48.625 48.750
(X-mean(X)/sd(X)) #normalizando
## [1] -0.2658278 0.7341722 1.7341722 8.7341722 20.7341722 19.7341722
## [7] 21.7341722 42.7341722 43.7341722 46.7341722 47.7341722
La función scale() puede operar en matrices y dataframes.
Función cuantil de una distribución t
qt(p, df, ncp, lower.tail = TRUE, log.p = FALSE)
p: vector de probabilidades
df:grados de libertad
lower.tail: cola inferior; si es TRUE (por defecto), las probabilidades son P [X ??? x], de lo contrario, P [X> x].
tcrit = qt(.975, df=length(X)-1)
tcrit
## [1] 2.228139
mean(X) + c(-tcrit, tcrit)*sd(X)/sqrt(length(X))
## [1] 11.43319 37.29408
o
t.test(X)$conf.int
## [1] 11.43319 37.29408
## attr(,"conf.level")
## [1] 0.95
Mientras que el intervalo de confianza 95% puede ser generado en términos de la media y la desviación estandar, es mucho mas directo aplicar la función t.test().
heads <- rbinom(1, size = 100, prob = .5)
heads
## [1] 45
binom.test(heads,100)
##
##
##
## data: heads out of 100
## number of successes = 45, number of trials = 100, p-value = 0.3682
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
## 0.3503202 0.5527198
## sample estimates:
## probability of success
## 0.45
prop.test(heads, 100)
##
## 1-sample proportions test with continuity correction
##
## data: heads out of 100
## X-squared = 0.81, df = 1, p-value = 0.3681
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.3514281 0.5524574
## sample estimates:
## p
## 0.45
La función binom.test() calcula un intervalo de confianza Clopper-Pearson exacto basado en la distribución F usando el primer argumento como el numero de exitos y el segundo argumento como el número de eventos.
La función prop.test() calcula un intervalo de confianza aproximado.
La opción conf.level puede ser usada para cambiar el nivel de confianza.
-Correlación
pearsoncorr = cor(X, Y)
pearsoncorr
## [1] -0.1923683
spearmancorr = cor(X, Y, method="spearman")
spearmancorr
## [1] -0.03218603
kendalltau = cor(X, Y, method="kendall")
kendalltau
## [1] 0.01888137
Especificando method=“spearman” o method=“kendall” como una opción para cor() genera los coeficientes de correlación de Spearman o Kendall respectivamente.
Una matriz de variables puede ser utilizada para generar la correlación entre el set de variables.
Las Tablas de Contingencia muestra los grupos de miembros a traves de variables categoricas (agrupando)
data(infert, package = "datasets")
CrossTable(infert$education, infert$induced, expected = TRUE)
## Warning in chisq.test(t, correct = FALSE, ...): Chi-squared approximation
## may be incorrect
##
##
## Cell Contents
## |-------------------------|
## | N |
## | Expected N |
## | Chi-square contribution |
## | N / Row Total |
## | N / Col Total |
## | N / Table Total |
## |-------------------------|
##
##
## Total Observations in Table: 248
##
##
## | infert$induced
## infert$education | 0 | 1 | 2 | Row Total |
## -----------------|-----------|-----------|-----------|-----------|
## 0-5yrs | 4 | 2 | 6 | 12 |
## | 6.919 | 3.290 | 1.790 | |
## | 1.232 | 0.506 | 9.898 | |
## | 0.333 | 0.167 | 0.500 | 0.048 |
## | 0.028 | 0.029 | 0.162 | |
## | 0.016 | 0.008 | 0.024 | |
## -----------------|-----------|-----------|-----------|-----------|
## 6-11yrs | 78 | 27 | 15 | 120 |
## | 69.194 | 32.903 | 17.903 | |
## | 1.121 | 1.059 | 0.471 | |
## | 0.650 | 0.225 | 0.125 | 0.484 |
## | 0.545 | 0.397 | 0.405 | |
## | 0.315 | 0.109 | 0.060 | |
## -----------------|-----------|-----------|-----------|-----------|
## 12+ yrs | 61 | 39 | 16 | 116 |
## | 66.887 | 31.806 | 17.306 | |
## | 0.518 | 1.627 | 0.099 | |
## | 0.526 | 0.336 | 0.138 | 0.468 |
## | 0.427 | 0.574 | 0.432 | |
## | 0.246 | 0.157 | 0.065 | |
## -----------------|-----------|-----------|-----------|-----------|
## Column Total | 143 | 68 | 37 | 248 |
## | 0.577 | 0.274 | 0.149 | |
## -----------------|-----------|-----------|-----------|-----------|
##
##
## Statistics for All Table Factors
##
##
## Pearson's Chi-squared test
## ------------------------------------------------------------
## Chi^2 = 16.53059 d.f. = 4 p = 0.002383898
##
##
##
library(mosaic)
-Tabulate categorical data
tally(~ Y + X, margins=TRUE, data=datos)
## X
## Y 1 2 3 10 21 22 23 44 45 48 49 Total
## 4 0 1 0 0 0 0 0 0 0 0 0 1
## 5 0 0 0 0 0 0 0 0 1 0 0 1
## 6 0 0 0 0 0 0 0 0 0 0 1 1
## 8 1 0 1 0 0 0 0 0 0 1 0 3
## 9 0 0 0 0 0 0 0 1 0 0 0 1
## 23 0 0 0 1 0 0 0 0 0 0 0 1
## 25 0 0 0 0 1 1 0 0 0 0 0 2
## 26 0 0 0 0 0 0 1 0 0 0 0 1
## Total 1 1 1 1 1 1 1 1 1 1 1 11
La función CrossTable() in el paquete gmodels provee una manera fácil de generar tablas cruzadas.
Puede ser útil mostrar una tabla donde se incluye a los valores pérdidos como una categoria separada.
a <- rep(c(NA, 1/0:3), 10)
a
## [1] NA Inf 1.0000000 0.5000000 0.3333333 NA Inf
## [8] 1.0000000 0.5000000 0.3333333 NA Inf 1.0000000 0.5000000
## [15] 0.3333333 NA Inf 1.0000000 0.5000000 0.3333333 NA
## [22] Inf 1.0000000 0.5000000 0.3333333 NA Inf 1.0000000
## [29] 0.5000000 0.3333333 NA Inf 1.0000000 0.5000000 0.3333333
## [36] NA Inf 1.0000000 0.5000000 0.3333333 NA Inf
## [43] 1.0000000 0.5000000 0.3333333 NA Inf 1.0000000 0.5000000
## [50] 0.3333333
table(a,useNA = "ifany")
## a
## 0.333333333333333 0.5 1 Inf
## 10 10 10 10
## <NA>
## 10