Nueva variable

Copia, Pega y Adapta

datos$A[datos$zona=='rural' & datos$edad <=10]=0

datos$A[datos$zona=='urbana' & datos$edad <=10]=1

mi.lista=list( F1=c(1,5,10,2,8,3), F3=c(9,11,7) )

datos= compute.fnc(datos, variables=mi.lista)

mi.expresion=list(P1='1.5*X1+log(X2+1)), P2='sum(X2+X1)^2')

datos=compute.fnc(datos, expresion=mi.expresion)

OBJETIVOS

Quizás necesites consultar previamente el apartado primeros pasos.

Para crear nuevas variables podemos seguir dos caminos:

  1. Nuevas variables por el cumplimiento de criterios impuestos en otras variables de la base de datos.

  2. Nuevas variables por la aplicación de funciones de resumen (media, mediana, suma o suma de cuadrados) de las variables definidas por el usuario mediante compute.fnc( ).

  3. Nuevas variables por la aplicación de un algoritmo o expresión numérica sobre p variables (combinación lineal o no lineal) definida por el usuario mediante compute.fnc( ).

Nueva variable por cumplimiento de condiciones en otras

Crear una nueva variable a partir del cumplimiento de condiciones en otra u otras variables impuestas por el usuario (by P. Prieto)

A partir de la base de datos OBrienKaiser queremos crear una nueva variable de nombre bloque1 con dos niveles: bajo y alto, los cuales resultan de pertenecer al grupo de tratamiento control o B y tener un valor inferior o mayor o igual a 8 en la variable fup.1.

datos=OBrienKaiser

Vamos a crear la variable bloque1 a partir de determinadas condiciones que harán que esa variable adopte el valor bajo o alto. Observa que entre corchetes definimos las condiciones de los valores que deben cumplirse en las otras variables de la base de datos de nombre datos. En este ejemplo usamos el operador lógico y (&). Si deseamos el operador o lo haremos con el caracter barra (|).

datos$bloque1[datos$treatment=='control' & datos$fup.1 < 8]='bajo'

datos$bloque1[datos$treatment=='B' & datos$fup.1 >= 8]='alto'

El formato de la instrucción obedece al siguiente esquema:

almacen$nueva.variable[almacen$condiciones]=nuevo.valor

frecuencias.fnc(datos, variable='bloque1'compute.fnc)

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

# TABLA DE FRECUENCIAS

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

$bloque1

$bloque1$n.total

[1] 6

$bloque.1$tabla

alto bajo

2 4

El error más frecuente en esta modalidad de creación de variables consiste fundamentalmente en omitir el nombre del almacén (datos en este ejemplo) mas el signo $ delante de cada variable de la condición.


compute.fnc

  • Crea nuevas variables a partir de la aplicación de una función de resumen (media, mediana, suma o suma de cuadrados) a las variables de la base de datos definidas por el usuario.

  • Crea nuevas variables a partir de la aplicación de un algoritmo explicitado por el usuario: (2*x1+log(x2)-3*1/x3)

VARIABLES A PARTIR DE LA APLICACIÓN DE UNA FUNCIÓN DE RESUMEN

A partir de la base de datos iqitems generaremos las medias para cada sujeto en los factores qie llamaremos F1 y F3 siguiendo los criterios definidos en la figura de la fiabilidad calculada por omega.

Crearemos en primer lugar una lista con los números de las variables de las que deseamos sus medias por formar la estructura factorial definida en dicha figura. Para ello debemos conocer en primer lugar que columnas ocupan dichas variables en la base de datos

nombres.var(iqitems)

nombre numero tipo

1 iq1 1 integer

2 iq8 2 integer

3 iq10 3 integer

4 iq15 4 integer

5 iq20 5 integer

6 iq44 6 integer

7 iq47 7 integer

8 iq2 8 integer

9 iq11 9 integer

10 iq16 10 integer

11 iq32 11 integer

12 iq37 12 integer

13 iq43 13 integer

14 iq49 14 integer

Vemos la correspondencia de los items con las columnas que ocupan.

mi.lista=list( F1=c(1,5,10,2,8,3), F3=c(9,11,7) )

Por defecto la función asume que cualquier registro con valor perdido en algunas de las variables implicadas dará lugar al valor NA para ese registro en la variable compuesta. Si deseas que tales registros con NA sean utilizados en el cómputo incluye el argumento hacer. NA=F (Falso).

iqitems=compute.fnc(iqitems, variables=mi.lista)

*** Se han creado las nuevas variables F1 F3 aplicando la función de resumen media ***

*** siguiendo el siguiente criterio:

$F1

[1] "iq1" "iq20" "iq16" "iq8" "iq2" "iq10"

$F3

[1] "iq11" "iq32" "iq47"

Solicitamos que las variables F1 y F3 sean la mediana de las variables definidas.

iqitems=compute.fnc(iqitems, variables=mi.lista, estadistico='mediana')

Solicitamos que las variables F1 y F3 sean la suma de las variables.

iqitems=compute.fnc(iqitems, variables=mi.lista, estadistico='suma')

Solicitamos que las variables F1 y F3 sean la suma de cuadrados de las variables.

iqitems=compute.fnc(iqitems, variables=mi.lista, estadistico='sc')


OPERACIONES DE RESUMEN CON DATOS PERDIDOS

Una cuestión de enorme importancia es como funcionará la función si tenemos valores perdidos (NA) entre las variables a resumir. La regla general es que si has definido 10 variables para resumir y un sujeto tiene 2 valores perdidos la función de resumen media dividirá por 8 y no por 10 como cabría esperar. Si deseas que para todos los sujetos, con independencia del número de variables divida por 10 (en este ejemplo) debes recodificar todas las variables a resumir haciendo que el valor perdido NA pase a ser 0.

Vamos a suponer que tenemos missing en todas las variables de la base de datos iqitems y como deseamos que la media para todos los sujetos surja con el mismo divisor, recodificaremos todas las variables al mismo tiempo mediante la función recode.multiple.fnc.

nombres.var(iqitems)

iqitems=recode.multiple.fnc(iqitems,

variables=c(1,5,10,2,8,3,9,11,7), valor.antiguo=NA, valor.nuevo=0)

Una vez recodificadas las variables reasignamos datos a la base de datos original u otra nombre que deseemos darle.

iqitems=datos

Ya podemos aplicar compute.fnc para generar las variables de resumen que deseemos con la garantía de que todas las estimaciones se realizan sobre el mismo divisor (n).

Obviamente puede haber circunstancias en las que precisamente el investigador desea que la función de resumen se aplique sobre las variables con valores válidos y se excluyan a las que presenten valores perdidos. En este caso no debes llevar a cabo las recodificaciones anteriores.


VARIABLES A PARTIR DE LA APLICACIÓN DE UN ALGORITMO EXPLICITADO POR EL USUARIO.

Sobre la misma base de datos iqitems crearemos dos variables nuevas, cada una de las cuales surgirá de la aplicación de un algoritmo de combinación lineal de variables que introduciremos en el nuevo argumento expresion.

mi.expresion=list(P1='1.8*iq1+0.34*iq8-log(iq10+1)',

P2='sqrt(iq20)+(1/iq47)' )

Crearemos una lista con tantos elementos como nuevas variables deseemos crear. El nombre de cada elemento será el nuevo nombre que deseamos para la nueva variable y entre comillas o apóstrofes debemos incluir la expresión numérica o algoritmo que querramos aplicar a las p variables implicadas.

iqitems = compute.fnc(iqitems, expresion=mi.expresion)

*** Se han creado las nuevas variables P1 P2 aplicando las siguientes expresiones

$P1

[1] "1.8*iq1+0.34*iq8-log(iq10)"

$P2

[1] "sqrt(iq20)+(1/iq47)"

head(iqitems)

iq1 iq8 iq10 iq15 iq20 iq44 iq47 iq2 iq11 iq16 iq32 iq37 iq43 iq49 P1 P2

72 4 4 2 2 4 1 1 2 1 4 1 5 1 1 7.461388 3

95 4 1 0 1 4 1 1 5 1 4 3 1 1 1 7.540000 3

100 4 4 3 3 4 1 1 3 1 4 1 1 1 1 7.173706 3

136 4 4 3 1 4 1 1 3 1 4 4 2 1 1 7.173706 3

179 4 4 3 1 4 1 1 3 1 3 1 4 1 1 7.173706 3

196 4 4 1 2 4 1 1 2 6 3 6 5 1 1 7.866853 3

Subir ->