recuento.fnc

Copia, Pega y Adapta

datos= recuento.fnc(datos, variables=1:5, criterio= c(0,1) )

datos= recuento.fnc(datos, variables=1:5, criterio='Favorable')

datos= recuento.fnc(datos, variables=1:5, criterio=5:7, new.var='nivel')

OBJETIVO

Crea una nueva variable que resulta de la frecuencia absoluta del cumplimiento de un determinado valor o valores definidos por el usuario en p variables.

recuento.fnc

Partiremos de una base de datos simulada en la que recrearemos las respuestas de 50 sujetos en 5 variables con cinco alternativas. Deseamos generar una nueva variable que resulte del recuento de la presencia de los valores 0 y 1 para cada sujeto.

Generamos los datos artificiales mediante esta línea. Cópiala, pégala y ejecútala en tu script para generar una muestra aleatoria (tus datos pueden ser diferentes) de dichos datos.

datos=data.frame(abs(round(mvrnorm(100,rep(1,5),Sigma=diag(1,5)),0)))

head(datos)

X1 X2 X3 X4 X5

1 1 0 2 1 2

2 0 0 3 1 0

3 1 0 0 0 1

4 1 1 1 1 2

5 2 1 0 3 1

6 0 1 2 0 0

datos= recuento.fnc(datos, variables=1:5, criterio= c(0,1),

new.var='recuento')

O de forma similar dado que la base de datos esta compuesta exclusivamente por las variables sobre las que de desea realizar el recuento. Si no incluyes el argumento variables se utilizarán todas las existentes y si omites el argumento new.var, se creará por defecto una nueva variable de nombre recuento.

datos= recuento.fnc(datos, criterio=c(0,1))

#------------------------------------------------------------------

# Recuento de variables

#------------------------------------------------------------------

*** Se ha creado con exito la variable de recuento: recuento

head(datos)

X1 X2 X3 X4 X5 recuento

1 1 0 2 1 2 3

2 0 0 3 1 0 4

3 1 0 0 0 1 5

4 1 1 1 1 2 4

5 2 1 0 3 1 3

6 0 1 2 0 0 4

Probaremos seguidamente un recuento mas complejo y lo haremos a partir de la base de datos OBrienKaiser. Recuerda que disponemos de 15 medidas repetidas desde las columnas 3 a la 17. En esta ocasión deseamos obtener para cada sujeto un recuento de la frecuencia de ocurrencia de valores menores o iguales a 2 en las 15 variables. Modificando adecuadamente la función anterior obtendríamos de forma satisfactoria lo que deseamos.

OKaiser=recuento.fnc(OBrienKaiser, variables=3:17,

criterio= c(0,1,2))

Imaginemos ahora que en realidad dichas variables poseen muchos mas valores y que deseamos un límite que resulta imposible de definir mediante el criterio anterior (el argumento criterio debería entonces incluir un gran número de valores o un condicional no permitido como <= 100, etc). La solución pasa por discretizar previamente dichas variables definiendo un vector de cortes y etiquetas para posteriormente solicitar el recuento sobre las nuevas variables generadas. Veamos el procedimiento:

1.-Definiremos en primer lugar el vector de cortes que deseamos para los datos y sus etiquetas correspondientes.

datos=OBrienKaiser

cortes=c(0,2,5,16); etiquetas=c(1,2,3)

Tenemos 4 valores en el vector de cortes y 3 etiquetas. Así todo valor entre 0 y 2 tendrá en la nueva variable discretizada el valor 1. Todo valor superior a 2 y hasta 5 el nuevo valor 2 y cualquier valor mayor que 5 y menor o igual a 16 un 3. Observa, como siempre el vector de etiquetas ha de tener un valor menos que su correspondiente vector de cortes.

2.- Crearemos seguidamente un bucle for que nos permitirá recodificar las 15 variables de forma automática. Observa el argumento variable que tiene como valor i. Es decir i se irá modificando desde su valor de inicio 3 hasta el último de 17. Y por tanto se va discretizando de forma automática una a una hasta completar el bucle.

for(i in 3:17)

datos=discretiza.variable.fnc(datos, variable=i,

cortes=cortes, etiquetas=etiquetas)

3.- Con nombres.var(datos) podemos acceder al nombre, columna y tipo de las variables de las nuevas variables generadas en la data.frame.

nombres.var(datos)

nombre numero tipo

1 treatment 1 factor

2 gender 2 factor

3 pre.1 3 numeric

4 pre.2 4 numeric

5 pre.3 5 numeric

6 pre.4 6 numeric

7 pre.5 7 numeric

8 post.1 8 numeric

9 post.2 9 numeric

10 post.3 10 numeric

11 post.4 11 numeric

12 post.5 12 numeric

13 fup.1 13 numeric

14 fup.2 14 numeric

15 fup.3 15 numeric

16 fup.4 16 numeric

17 fup.5 17 numeric

18 pre.1.r 18 numeric

19 pre.2.r 19 numeric

20 pre.3.r 20 numeric

21 pre.4.r 21 numeric

22 pre.5.r 22 numeric

23 post.1.r 23 numeric

24 post.2.r 24 numeric

25 post.3.r 25 numeric

26 post.4.r 26 numeric

27 post.5.r 27 numeric

28 fup.1.r 28 numeric

29 fup.2.r 29 numeric

30 fup.3.r 30 numeric

31 fup.4.r 31 numeric

32 fup.5.r 32 numeric

3.- Podemos ver las nuevas variables generadas (.r sufijo que se añade por defecto cuando se discretiza una variable) que ocupan las columnas 18 a la 32. Estamos preparados ya para solicitar el recuento de nuestras nuevas variables utilizando el argumento criterio=1 en la llamada a la función, dado que en la nueva variable serán 1 todos los registros que en la original tengan un valor entre 0 y 2.

datos= recuento.fnc(datos, variables=18:32, criterio=1)

#------------------------------------------------------------------

# Recuento de variables

#------------------------------------------------------------------

*** Se ha creado con exito la variable de recuento: recuento

head(datos[,18:33])

pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r post.3.r post.4.r

1 1 1 1 1 1 2 1 1 1

2 2 2 1 2 2 1 1 1 1

3 2 3 1 3 3 2 2 2 1

4 2 2 2 2 2 1 1 1 1

5 2 2 2 2 2 3 3 2 2

6 3 3 2 3 3 3 3 2 2

post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r recuento

1 1 1 1 1 1 2 13

2 2 2 1 3 1 1 8

3 2 3 2 3 2 3 2

4 2 2 1 2 1 2 6

5 2 2 1 3 1 2 2

6 3 3 2 3 2 3 0


RECUENTO DE VARIABLES CUALITATIVAS

En ocasiones deseamos realizar un recuento de la frecuencia absoluta de un determinado valor cualitativo en p variables. Utilizaremos como ejemplo una discretización percentílica de cuatro cuartiles de las 15 variables de la misma base de datos OBrienKaiser. Deseamos conocer el recuento del cuartil primero y segundo (Q1 y Q2) para las 15 variables en todos los sujetos. Para ello realizaremos los siguientes pasos:

1.- Discretizaremos de forma automática con un bucle for las 15 variables descritas en 4 cuartiles (Q1 a Q4).

datos=OBrienKaiser

for(i in 3:17)

datos=discretiza.variable.fnc(datos, variable=i, ntiles=4)

head(datos[,-c(1:3)]) # Pedimos que no nos muestre las 3 primeras columnas

pre.2 pre.3 pre.4 pre.5 post.1 post.2 post.3 post.4 post.5 fup.1 fup.2 fup.3

1 2 4 2 1 3 2 5 3 2 2 3 2

2 4 5 3 4 2 2 3 5 3 4 5 6

3 6 5 7 7 4 5 7 5 4 7 6 9

4 4 7 5 4 2 2 3 5 3 4 4 5

5 4 6 4 3 6 7 8 6 3 4 3 6

6 8 7 9 9 9 9 10 8 9 9 10 11

fup.4 fup.5 pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r

1 4 4 Q1 Q1 Q1 Q1 Q1 Q1 Q1

2 4 1 Q2 Q2 Q2 Q1 Q2 Q1 Q1

3 7 6 Q3 Q4 Q2 Q4 Q4 Q2 Q2

4 3 4 Q3 Q2 Q4 Q3 Q2 Q1 Q1

5 4 3 Q2 Q2 Q3 Q2 Q1 Q3 Q3

6 9 6 Q4 Q4 Q4 Q4 Q4 Q4 Q4

post.3.r post.4.r post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r

1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1

2 Q1 Q1 Q1 Q1 Q2 Q1 Q1 Q1

3 Q2 Q1 Q2 Q3 Q2 Q3 Q3 Q2

4 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1

5 Q3 Q2 Q1 Q1 Q1 Q1 Q1 Q1

6 Q4 Q3 Q4 Q4 Q4 Q4 Q4 Q2


2.- Realizamos el recuento de los valores Q1 y Q2. Observa que en el argumento variables incluímos ahora a las 15 nuevas variables (18 a la 32) que son una recodificación percentílica de las 15 originales cuantitativas.

datos=recuento.fnc(datos, variables=18:32, criterio=c('Q1','Q2'))

#------------------------------------------------------------------

# Recuento de variables

#------------------------------------------------------------------

*** Se ha creado con exito la variable de recuento: recuento

head(datos[,18:33])

pre.1.r pre.2.r pre.3.r pre.4.r pre.5.r post.1.r post.2.r post.3.r post.4.r

1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1 Q1

2 Q2 Q2 Q2 Q1 Q2 Q1 Q1 Q1 Q1

3 Q3 Q4 Q2 Q4 Q4 Q2 Q2 Q2 Q1

4 Q3 Q2 Q4 Q3 Q2 Q1 Q1 Q1 Q1

5 Q2 Q2 Q3 Q2 Q1 Q3 Q3 Q3 Q2

6 Q4 Q4 Q4 Q4 Q4 Q4 Q4 Q4 Q3

post.5.r fup.1.r fup.2.r fup.3.r fup.4.r fup.5.r recuento

1 Q1 Q1 Q1 Q1 Q1 Q1 15

2 Q1 Q1 Q2 Q1 Q1 Q1 15

3 Q2 Q3 Q2 Q3 Q3 Q2 8

4 Q1 Q1 Q1 Q1 Q1 Q1 12

5 Q1 Q1 Q1 Q1 Q1 Q1 11

6 Q4 Q4 Q4 Q4 Q4 Q2 1

Subir->