En este documento se abordan las distintas pruebas de hipotesis que se pueden realizar segun el planteammiento del problema. Es importante recordar que intentamos contrastar el \(p-value\) vs \(\alpha\) que en R por defecto es del \(5\%\).

Reglas:

  1. \(p-value\) < \(\alpha\) : Se rechaza la hipotesis nula.

  2. \(p-value\) > \(\alpha\) : No se puede rechazar la hipotesis nula.

Pruebas que tocaremos:

  1. La media
  2. Prueba de proporciones
  3. Varianza
  4. Diferencia de medias
  5. Diferencia de proporciones
  6. Razon de Varianza

Prueba de Proporciones.

  1. x: Son los exitos en la muestra .
  2. n: Tamaño de la muestra.
  3. p: Proporcion que se desea probar.
  4. conf.level : “two.side”, “less” y “greater”.
prop.test(x = 18, n=20, p = 0.7, alternative = "greater", conf.level = 0.90)
## 
##  1-sample proportions test with continuity correction
## 
## data:  18 out of 20, null probability 0.7
## X-squared = 2.9167, df = 1, p-value = 0.04383
## alternative hypothesis: true p is greater than 0.7
## 90 percent confidence interval:
##  0.7510962 1.0000000
## sample estimates:
##   p 
## 0.9

Prueba Binomial

binom.test(x= 18,n=20,p=0.7,alternative = "greater")
## 
##  Exact binomial test
## 
## data:  18 and 20
## number of successes = 18, number of trials = 20, p-value = 0.03548
## alternative hypothesis: true probability of success is greater than 0.7
## 95 percent confidence interval:
##  0.7173815 1.0000000
## sample estimates:
## probability of success 
##                    0.9

Prueba de cuantiles

Se desea hacer inferencia sobre la muestra respecto a los cuantiles:

cuan.O = function(m.a, alpha,tipo,elemento,p){
  
  if(tipo == "two.side"){
    # Estadisticos de Prueba. 
    T1 = sum( m.a <= elemento )
    T2 = sum( m.a < elemento )
    # Encontrar t1, t2 para la regla de decicion. 
    t1 = qbinom(alpha/2,length(m.a),p)
    t2 = qbinom(1-alpha/2,length(m.a),p)
    # P.value
    p_val = 2*min(c(pbinom(T1,length(m.a),p),1-pbinom(T2,length(m.a),p)))
    # Regla de desicion 
    if(T1<=t1 | T2>t2 ){
      print("Rechazamos la hipotesis nula")
      paste("El p-value:",p_val)
      paste("alpha:",alpha)
    }
  }
  
  if(tipo == "greater"){
    ## Estadistico y cuantil 
    T1 = sum( m.a <= elemento )
    t1 = qbinom(alpha,length(m.a),p)
    ## P-value
    p_val = pbinom(T1,length(m.a),p)
    if(T1<=t1){
      print("Rechazamos la hipotesis nula")
      paste("El p-value:",p_val,"-----","alpha",alpha)
      
    }
  }
  
}

Mc Nemar

El objetivo de este codigo es ver el efecto que tuvo algun fenomeno sobre la muestra presentandoce como \((x,y)\) donde $x , y $ toman valores entre 0 y 1. Lo que indica es el cambio en el estado.

Este se programo para ambas colas por lo que si se quiere revisar mas a fondo otras

Mc <- function(a,m){
# Definimos el estadistico T con un inicio igual a cero 
# En esta parte descompuse la matriz en vectores porque se me facilita el codigo. 
x <- m[,1]
y <- m[,2] 
c = 0
b = 0
T = 0 ; t <- 0 ; 
# No importa que tama?o tome es una matriz bidimensional. 
v = length(x)
# Calculamos las cantidades b+c
for(w in 1:v){
  if(x[w]==1 & y[w]==0){c = c + 1}
  if(x[w]==0 & y[w]==1){b = b + 1}
}

# Este if es para calculr el estadistico de prueba 
if(b+c<=20){ # Caso b+c < 20
    T = b 
    t <- qbinom(a/2,b+c,0.5)
    p_value<- min(c(pbinom(T, b+c , 0.5), 1 - pbinom(T-1, b+c , 0.5)))
}else{  # Caso b+c > 20
  
      T = ((b-c)**2)/(b+c) 
      t <-qchisq(1-a,df = 1)
      p_value<- min(c(pbinom(T, b+c , 0.5), 1 - pbinom(T-1, b+c , 0.5)))} 

# Definimos la regla de desicion dependiendo como se calculo T. 

if (b+c<=20){ # Caso b+c <= 20
  if( T <= t | T > (b+c)-t  ){ 
  print("Rechazamos la hipotesis nula a un nivel" )
  } else{print("No rechazamos la hipotesis nula" )}
  
}else{       # caso b+c>20
  if(T>t){
    print("Rechazamos la hipotesis nula a un nivel" )
  }else{print("No rechazamos la hipotesis nula" )}
}
# Aqui solo recopilamos los datos optenimos en un data frame 

datos <- c("Tama?o de la muestra ", "Nivel de Significancia", "Estadistico T = ","cuantil" ,
           "P_value") 
valores <- c(b+c, a , T, t , p_value)

print(as.data.frame(cbind(datos,valores)))

}

Prueba de signos.

Prueba utilizada para identificar si exciste una diferncia entre dos variables. consultar pagina 11.

Supongamos vamos a guardar estos datos en una matriz bidimencional

signos = function(ma,alpha,alternative){
  x = ma[,1] ; y =ma[,2]
  T1 = sum(x < y)
  
  if(alternative=="two.side"){
    t = qbinom(alpha/2,length(x),0.5)
    p_val = 2*min(c(pbinom(T1,length(x),0.5),1-pbinom(T1,length(x),0.5)))
    if(T1<=t | T1 > length(x)-t){
      print("Rechazamos la hipotesis nula")
      vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
      print(vec)
    }
  }
  #####################
  if(alternative=="less"){
    t = qbinom(alpha,length(x),0.5)
    p_val = pbinom(T1,length(x),0.5)
    if(T1<=t){
      print("Rechazamos la hipotesis nula")
      vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
      print(vec)
    }
  }
  ####################
  if(alternative=="greater"){
     t = qbinom(alpha,length(x),0.5)
     p_val = 1- pbinom(T1,length(x),0.5)
     
  if(T1>length(x)-t){
    print("Rechazamos la hipotesis nula ")
    vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
    print(vec)
  }else{
    print("no Rechazamos la hipotesis nula ")
    vec = c(p_val,alpha) ; names(vec) = c("p-value","alpha")
    print(vec)
  }
  }
  
}

Cox Stuart

Detecta la tendencia en un conjunto de datos, esta prueba requiere de la paqueteria snpar

Coincide con lo visto en las notas.

library(snpar)
## Warning: package 'snpar' was built under R version 4.0.3
# Esta libreria tiene comandos muy importantes. 

y = c(14.6,12.2,104,220,110,86,92.8,74.4,75.4,51.7,29.3,16,14.2,10.5,123,190,138,98.1,88.1,80,75.6,48.8,27.1,15.7)

cs.test(y,alternative = "decreasing")
## 
##  Exact Cox-Stuart trend test
## 
## data:  y
## S- = 5, p-value = 0.3872
## alternative hypothesis: data have a decreasing trend

U-Mann y Witney

Esta prueba identifica si existe una diferencia, en la distribucion de dos muestras es decir queremos saber si las dos muestras provienen de la misma distribucion.

Para poder aplicar el test de Mann–Whitney–Wilcoxon se requiere que la varianza sea igual en los dos grupos. Los test más recomendados para analizar homocedasticidad en estos casos son el test de Levene o el test de Fligner-Killeen, ambos trabajan con la mediana por lo que son menos sensibles a la falta de normalidad (si se está empleando un test de Mann–Whitney–Wilcoxon suele ser porque los datos no se distribuyen de forma normal).

\[H_o : F(x) = G(x) \] \[ H_a :F(x) \neq G(x)\]

x = c(25,41,42,45,47,50)
y = c(23,28,30,35,38)
wilcox.test(x,y, alternative = "two.side",paired = F,conf.int = 0.95)
## 
##  Wilcoxon rank sum exact test
## 
## data:  x and y
## W = 26, p-value = 0.05195
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
##  -3 22
## sample estimates:
## difference in location 
##                     12

prueba para analizar la condicion mencionada anteriormente.

\[ H_o: \sigma_x = \sigma_y \] \[ H_a : \sigma_x \neq \sigma_y \]

X = list(x,y)
fligner.test(X)
## 
##  Fligner-Killeen test of homogeneity of variances
## 
## data:  X
## Fligner-Killeen:med chi-squared = 0.012394, df = 1, p-value = 0.9114

Cuando hay ligaduras o ties, la función wilcox.test() no es capaz de calcular el p-value exacto por lo que devuelve una aproximación asumiendo que U se distribuye de forma ~ normal. En estos casos, o cuando los tamaños muestrales son mayores de 20 y se quiere la aproximación por la normal, es más recomendable emplear la función wilcox_test() del paquete coin.

Algo Util

x <- seq(0, 5, length = 1000)
y <- dlnorm(x = x, meanlog =  0.5, sdlog = 1.7)
plot(x, y, type = "l", lty = 1, xlab = "x", col = "blue", ylab = "Densidad",
     main = "Distribuciones lognormal y normal con misma mediana", xlim=c(-5, 5))
x_2 <- seq(-5, 5, length = 1000)
y_2 <- dnorm(x = x_2, mean = 1.648721, sd = 1)
lines(x_2, y_2, col = "red")
legend("topright",
       legend = c("mediana lognormal = 0.5", "mediana normal = 0.5"),
       col = c("blue", "red"), lty = 1,cex = 0.7)