Variables estadísticas y variables aleatorias, un viaje de ida y vuelta .

La estrecha relación existente entre frecuencia relativa y probabilidad y entre distribución de frecuencias y distribución de probabilidad permite re-considerar la información empírica  de una variable estadística procedente de una base de datos como una distribución de probabilidad.

Formalmente basta definir  el espacio probabilístico sobre los datos . Desde el punto de vista informal se trataría de considerar la situación de diferente modo: 

En el caso estadístico disponemos de observaciones de los valores que ha tomado una cierta variable.

En el caso aleatorio  consideramos ( en función de la información que tenemos sobre las observaciones) las distiintas probabilidades que tendrá de obtenerse  una extracción aleatoria de un individuo  que tome para esa  variable  un valor u otro . 


Cosas que vamos a realizar :

1-Trabajaremos con una base datos. Convertir una variable estadística en variable aleatoria es ,aquí, sencillo. A falta de más información cada individuo tiene la misma probabilidad de resultar elegido. Sin embargo, esto no lo vamos a hacer. Se deja como ejercicio

2-Definiremos una función para obtener las principales características de una variable estadística. 

3-Simularemos una base de datos a partir de distribuciones de probabilidad teóricas . Antes se  construye una función para simular variables..

4-Comprobaremos el comportamiento similar ( pero no igual) de los datos generados  y de los datos téoricos:

los primeros son lo que se conoce como reultados muestrales ( distribución empírica) los segundos se corresponderán con la distribución teórica (poblacional)
5.- Para poder llevar a cabo el punto 4. definiremos una nueva  función que nos devuelva los principales indicadores de una distribución de probabilidad y la aplicaremos  a los resultados empíricos simulados y a las distribuciones teóricas.

6.-Por ultimo, consideramos la variable (estadística) V1 ( una de las generadas por simulación) como si fuera una variable aleatoria discreta. Aunque podríamos pensar ( conceptualmente es cierto) que bastaría probabilizar la base de datos y convertirala en un espacio de resultados ( función probspace) , no es así, es más complejo: Debemos construir una distribución de probabilidad con la función DiscreteDistrution y para especificar recorrido de la variable y probabilidades el proceso no es sencillo. Trabajamos a partir de la distribución de frecuencias ( objeto  de clas table) cuyas etiquetas han de convertirse en números para constituir el recorrido de la distribución de probabilidad.Se hace sólo para V1, pero podría hacerse igualmente para las otras tres .
library(prob); library(distr);library(distrEx)
#Cargamos la base de datos alumnos

alumnos<- url("http://www.uv.es/mlejarza/azar/alumnos.sav")
library(haven)
alumnos <- read_sav(alumnos)
View(alumnos)
names(alumnos)
## [1] "turno" "sexo" "becario" "edad" 
## [5] "residencia" "estud.madre" "estudi.padre" "estud.anterior"
## [9] "valenciano" "trabajo"
# construimos una función llamada descriptiva , cuyo argumento será un vector (pensado para que sea una variable) 
y cuyo resultado sean sus principales características descriptivas


descriptiva=function (v)
{
m=length(v)
media=sum(v)/m
varianza=sum(v^2)/m-media^2
cv=sqrt(varianza)/media
return(c("media"=media,"varianza"=varianza,"coef.var"=cv))
}
#probamos la función descriptiva con una variable
descriptiva(alumnos$edad)
## media varianza coef.var
## 22.5458333 13.4478993 0.1626526



#construimos una función que nos genera variables simuladas cuyos valores son realizaciones de una 
variable aleatoria que sigue una determinada distribución de probabilidad
( en este caso Binomial(n,p)-- lo veremos en el tema 3-- ) .

Es equivalente a seleccionar r valores al azar de una distribución de ese tipo.
varsim=function(r,n,p)
{
rbinom(r,n,p)
}
# haciendo uso de esa función generamos cuatro variables ESTADÍSTICAS con 200 observaciones
con comportamiento B(10,0.5)
,B(10,0.4),B(10,0.3),B(10,0.2)
ATENCIÓN: cuatro variables igualmente distribuidas no son cuatro variables iguales (idénticas)
para que cada alumno tenga unos datos diferentes se puede utilizar como semilla aleatoria el número correspondiente:

set.seed(444)
#Aquí fijar la semilla aleatoria no tiene demasiado sentido, pero en la práctica 2 sí lo tendrá
var1<-varsim(200,10,0.5)
var2<-varsim(200,10,0.4)
var3<-varsim(200,10,0.3)
var4<-varsim(200,10,0.2)
#convertimos las variables en un data.frame, primero que podríamos convertir en un espacio de resultados, después
#ATENCIÓN:Una vez obtenidos los 200 valores lo que tenemos son 200 datos de cuatro variables ESTADÍSTICAS

# añadiremos la variable 'caso', para que cada individuo sea único aunque se repitan todos
sus valores.Esto es iportante para el buen funcionamiento de "probspace", como ya sabemos
.
caso<-1:200
sim<-as.data.frame(cbind(caso,var1,var2,var3,var4))
# si aplicáramos la funicón probspace (
sim<-probspace(sim) ) convertiríamos el dataframe en un espacio de resultados

#Realizamos un análisis descriptivo de las cuatro variables
Una vez han sido selecciones los valores son realizazciones de una variable estadística

adescriptivo<-rbind(descriptiva(sim$var1),descriptiva(sim$var2),descriptiva(sim$var3),descriptiva(sim$var4))
adescriptivo
## media varianza coef.var
## [1,] 4.920 2.093600 0.2940910
## [2,] 4.025 2.214375 0.3697087
## [3,] 2.945 2.311975 0.5163049
## [4,] 2.140 1.400400 0.5529836
#La Esperanza de una variable Binomial n=10 y p=0.5 es 5 y su varianza 2.5
#La Esperanza de una variable Binomial n=10 y p=0.4 es 4 y su varianza 2.4
#La Esperanza de una variable Binomial n=10 y p=0.3 es 3 y su varianza 2.1
#La Esperanza de una variable Binomial n=10 y p=0.2 es 2 y su varianza 1.6

#Los resultados son similares pero no exactos.De la misma forma que si repetiéramos 100 vez un experimento
consistente en el lanzamiento de diez
monedas y promediáramos el número de caras de todos las repeticiones,
ese promedio se acercaría a 5
pero mucha casualidad sería que coinicdiera con el valor teórico de 5 .
#construimos una tabla de frecuencias ( función "table") 
#ATENCIÓN: las cuatro variables "aleatoriamente generadas" son ahora 4 variables estadísticas
( tenemos una distribución frecuencias)

cont1<-table(var1);cont1
## var1
## 2 3 4 5 6 7 8
## 5 26 56 50 29 24 10

cont2<-table(var2);cont2
## var2
## 0 1 2 3 4 5 6 7 8 9
## 1 5 21 51 53 34 25 8 1 1

cont3<-table(var3);cont3
## var3
## 0 1 2 3 4 5 6 7
## 11 23 47 46 42 22 7 2

cont4<-table(var4);cont4
## var4
## 0 1 2 3 4 5 6
## 12 54 59 50 20 4 1

plot(cont1);plot(cont2);plot(cont3);plot(cont4)

# también podemos hacerlo con frecuencias relativas 
c1<-prop.table(cont1);c1
## var1
## 2 3 4 5 6 7 8
## 0.025 0.130 0.280 0.250 0.145 0.120 0.050

c2<-prop.table(cont2);c2
## var2
## 0 1 2 3 4 5 6 7 8 9
## 0.005 0.025 0.105 0.255 0.265 0.170 0.125 0.040 0.005 0.005

c3<-prop.table(cont3);c3
## var3
## 0 1 2 3 4 5 6 7
## 0.055 0.115 0.235 0.230 0.210 0.110 0.035 0.010

c4<-prop.table(cont4);c4
## var4
## 0 1 2 3 4 5 6
## 0.060 0.270 0.295 0.250 0.100 0.020 0.005

#representamos gráficamente sus frecuencias ( diagrama de barras)
plot(c1);plot(c2);plot(c3);plot(c4)

Cambiamos de tercio y nos vamos al mundo de las variables aleatorias  
#Calculamos media y varianza y representemos ahora 4 distribución DE PROBABILIDAD 
#Binomial (n=10,p=0.5)
#Binomail(n=10,p=0.4)
#Binomial(n=10,p=03)
#Binomial(n=10,p=03)
#son las cuatro distribuciones (teóricas) a partir de las cuales hemos generado los datos ( var1,var2,var3, var4)
#ahora las llamaremos X1,X2,X3,X4 , para distinguirlas
X1<-Binom(10,0.5)
E(X1)
## [1] 5
var(X1)
## [1] 2.5
plot(X1)

X2<-Binom(10,0.4)
E(X2)
## [1] 4
var(X2)
## [1] 2.4
plot(X2)

X3<-Binom(10,0.3)
E(X3)
## [1] 3
var(X3)
## [1] 2.1
plot(X3)

X4<-Binom(10,0.2)
E(X4)
## [1] 2
var(X4)
## [1] 1.6
plot(X4)

#análogamente a como se hizo con la función descriptiva construimos ahora la función
#indicadores para una distribución de probabilidad

indicadores=function(va)
{
E=E(va)
v=var(va)
asim=skewness(va)
curt=kurtosis(va)
mediana=median(va)
plot(va)
return(c("esperanza"=E,"mediana"=mediana,"varianza"=v,"coef.asimetría"=asim,
"coef.curtosis"= curt ))
}

#aplicaremos la función indicadores a las distribuciones de dos variables aleatorias específicas:
#Una discreta que sigue lo que se llama una distribución de Poisson de parámetro 2.5
#Otra continua que sigue lo que se llama una distribución Gamma de parámetros 1 y 5.

#primero analizamos paso a paso cada una de las dos distribuciones, después lo hacemos conjuntamente
usando la función "indicadores"
po<-Pois(lambda=2.5)
po

## Distribution Object of Class: Pois
## lambda: 2.5

plot(po)

E(po)
## [1] 2.5
var(po)
## [1] 2.5

skewness(po)
## [1] 0.6324555
kurtosis(po)
## [1] 0.4
median(po)
## [1] 2
ga<-Gammad(1,5)
plot(ga)

E(ga)
## [1] 5
var(ga)
## [1] 25
skewness(ga)
## [1] 2
kurtosis(ga)
## [1] 6
median(ga)
## [1] 3.465736





ejemplos<-c(indicadores(po),indicadores(ga))
ejemplos # Lo mismo que arriba pero utilizando la función indicadores


## esperanza mediana varianza coef.asimetría coef.curtosis 
## 2.5000000 2.0000000 2.5000000 0.6324555 0.4000000
## esperanza mediana varianza coef.asimetría coef.curtosis
## 5.0000000 3.4657359 25.0000000 2.0000000 6.0000000
# Ahora vamos a considerar la variable estadística Var1 (construida anteriormente por simulación) como si 
fuera una variable aleatoria discreta cuyas probabilidades ( función de cuantía) vendrán dadas
por las frecuencias relativas de cada valor
#recordemos que habíamos llamado c1 a la tabla de frecuencias relativas de la variable var1
#los objetos table en R son listas de números (las frecuencias) etiquetadas con los valores
de la variable o los niveles del factor
labels(c1)
## $var1
## [1] "2" "3" "4" "5" "6" "7" "8"

class(labels(c1))# pedimos la clase de objeto que son las etiquetas (label) de c1
## [1] "list"
#dejamos de considerar como lista ("deslistamos") la lista de etiquetas de c1 y la llamamos recorrido,
ya que será ( como conjunto de valores-- que tendremos que convertir en enteros) el recorrido
de la variable aleatoria

recorrido<-unlist(labels(c1))
recorrido<-as.integer(recorrido)

#Ahora sí: contamos con un recorrido y una función de cuantía podemos contruir una
 distribución de probabilidad discreta que llamaremos dpvar1
dpvar1<-DiscreteDistribution(recorrido,c1)
plot(dpvar1)
E(dpvar1)
## [1] 4.92
var(dpvar1)
## [1] 2.0936
skewness(dpvar1)
## [1] 0.3178886
kurtosis(dpvar1)
## [1] -0.5525158median(dpvar1)
## [1] 5

# o todo a la vez :

indicadores(dpvar1)

## esperanza mediana varianza coef.asimetría coef.curtosis 
## 4.9200000 5.0000000 2.0936000 0.3178886 -0.5525158

Obviamente podríamos hacer lo mismo con las variables v2,v3, y v4  de forma esencialmente idéntica.