Chapter 11 Module X

11.1 Funciones

Esto es extra pero es demasiado útil

Antes de comenzar el módulo, aprendamos algo de funciones. Recuerdas la función para sacar la moda?. Pues aprenderemos a hacer nuestras propias funciones. Las funciones nos sirven para automatizar procesos, podemos hacer funciones para calcular la media, la varianza, realizar scrappeos, calculos etc.

#promedio de variables en base de coches
sum(datos$mpg)/nrow(datos)
## [1] 20.1
sum(datos$cyl)/nrow(datos)
## [1] 6.19

La estructura de una función es como en matematicas:

\(y=f(x)\)

donde hay un input y un output.

en R:

\(y<-function(x)\{ argumentos\}\)

En el diseño de funciones debemos usar variables y no valores fijos, esto anticipando a que el uso de las funciones va a ser flexible.

#funcion

mi_promedio<-function(variable){
  sum(variable)/nrow(as.data.frame(variable))
}

Probamos los datos:

#funcion
mi_promedio(datos$mpg)
## [1] 20.1
mean(datos$mpg)
## [1] 20.1
mi_promedio(datos$cyl)
## [1] 6.19
mean(datos$cyl)
## [1] 6.19
mi_promedio(datos$hp)
## [1] 147
mean(datos$hp)
## [1] 147

Retomemos la base de elecciones pero ahora repliquemosla para n observaciones. Para esto vamos a crear una función de toda la simulación.

# notese que antes había un 20 que sustitumos por una variable n
simulador_elecciones<-function(n){
  set.seed(9)
# creamos una base de datos de ganadores de presidentes municipales en un estado de 20 municipios
partidos<-c("PRI","PAN","MORENA")
mun_indigena<-c("SI","NO") #si es de mayoría indígena

ganador<-sample(partidos, n, replace = T) # le indicamos que elija aleatoriamente un ganador del vector partidos para cada distrito
mayoria_indigena<-sample(mun_indigena, n, replace = T) # de igual manera le indicamos que nos diga aleatoriamente si el municipio es de mayoría indígena


distrito<-seq(1:n) # indicamos un numero para cada distrito

#creamos base de datos
elecciones<-data.frame(ganador,distrito,mayoria_indigena)
}
(simulador_elecciones(1))
##   ganador distrito mayoria_indigena
## 1  MORENA        1               SI
(simulador_elecciones(5))
##   ganador distrito mayoria_indigena
## 1  MORENA        1               SI
## 2     PRI        2               NO
## 3     PAN        3               NO
## 4  MORENA        4               SI
## 5  MORENA        5               NO
(simulador_elecciones(20))
##    ganador distrito mayoria_indigena
## 1   MORENA        1               NO
## 2      PRI        2               SI
## 3      PAN        3               NO
## 4   MORENA        4               NO
## 5   MORENA        5               NO
## 6   MORENA        6               NO
## 7   MORENA        7               SI
## 8      PAN        8               SI
## 9      PRI        9               NO
## 10     PAN       10               NO
## 11     PRI       11               SI
## 12     PAN       12               SI
## 13  MORENA       13               SI
## 14     PAN       14               NO
## 15     PRI       15               SI
## 16     PAN       16               SI
## 17     PRI       17               SI
## 18     PRI       18               SI
## 19     PRI       19               SI
## 20     PAN       20               SI
elecciones<-simulador_elecciones(1000)

Habiendo simulado los datos, comencemos con la estadística.

11.2 Test for proportions

Así como hay tests de estadísticos, como la media y varianza, tambén podemos idear estadísticos para las proporciones.

tally (~ganador, data=elecciones)
## ganador
## MORENA    PAN    PRI 
##    323    324    353

El comando propr.test() realizará la misma prueba t que hicimos en la sección anterior pero modificada para resolver porcentajes. En este comando debemos indicar explícitamente sobre cuál categoría de cuál variable queremos hacer la prueba de hipótesis.

prop.test (~(ganador=="PRI"), data=elecciones)
## 
##  1-sample proportions test with continuity correction
## 
## data:  elecciones$(ganador == "PRI")  [with success = TRUE]
## X-squared = 86, df = 1, p-value <0.0000000000000002
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.324 0.384
## sample estimates:
##     p 
## 0.353

En estas pruebas el estadístico p se refiere a la proporción.

De la misma manera que antes, podemos extraer datos relevantes de la función con el intervalo de confianza.

x<-prop.test (~(ganador=="PRI"), data=elecciones)
x$conf.int
## [1] 0.324 0.384
## attr(,"conf.level")
## [1] 0.95
# por cierto sabemos que el valor p real es de .333 por lo que el intervalo de confianza resultó ser muy confiable.

Finalmente, también funciona si la alimentamos con números en bruto y no con bases de datos. En este caso, para hacer el ejemplo igual, la alimentamos con la cantidad de municipios del PRI y con la suma de todos los municipios, independientemente si los ganó MORENA, PRI o el PAN.

prop.test (338,1000)
## 
##  1-sample proportions test with continuity correction
## 
## data:  338 out of 1000
## X-squared = 104, df = 1, p-value <0.0000000000000002
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.309 0.368
## sample estimates:
##     p 
## 0.338