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 .
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)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 10cont2<-table(var2);cont2
## var2
## 0 1 2 3 4 5 6 7 8 9
## 1 5 21 51 53 34 25 8 1 1cont3<-table(var3);cont3
## var3
## 0 1 2 3 4 5 6 7
## 11 23 47 46 42 22 7 2cont4<-table(var4);cont4
## var4
## 0 1 2 3 4 5 6
## 12 54 59 50 20 4 1plot(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.050c2<-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.005c3<-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.010c4<-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)
#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] 5var(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.5525158
median(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