Category Archives: ESTADISTICA

R y Shiny

Hace muchas lunas y muchos soles o sea hace un chorro de años, en la universidad tuve un maestro que nos enseñaba SPSS (Statistical Package for the Social Sciencies). Ese maestro se presentó ante nosotros de manera muy simpática, nos preguntó cuál era la materia que íbamos a tomar con él; respondimos que era “Metodología de la investigación I”. Acto seguido, respondió que no, que con él aprenderíamos: cómo ganarse la vida I. Y si nos gustaba su materia, en los próximos 3 trimestres, aprenderíamos: cómo ganarse la vida II, cómo ganarse la vida III, y cómo ganarse la vida IV. Después volvió a preguntar: ¿Y se come bien?”, para responder él mismo: “¡Chequen!”. Decía, caminando de perfil y haciendo saltar su panza prominente. Estábamos en los albores de las computadoras personales, en ese entonces lo más avanzado que teníamos eran las XT (Tecnología Extendida). Así que era todo un reto aprender computación y más para estudiantes del área de ciencias sociales; como tu humilde servidor que es psicólogo social. Sin embargo, ese buen maestro logró entusiasmar y motivar a varios de sus alumnos para que aprendieran SPSS.

Ahora, a tantos años luz, creo que aprender SPSS fue una de las mejores cosas que pudo haberme pasado. Sin embargo, esta reflexión me hace recordar que este programa surgió y fue creado para la era PC (Personal Computing) y hoy estamos en la era CC (Cloud Computing). Es decir, en la Internet y las redes sociales que tienen un corazón que hace: like, like, like; llamado “SHARE”. Estamos en un momento en el cual las herramientas que necesitamos son distintas y en unos casos diametralmente opuestas. SPSS y muchos otros programas líderes, están haciendo grandes esfuerzos para no perder su liderazgo. Por ejemplo, SPSS invierte muchos recursos para lograr que programas desarrollados en R, .NET, Python, Java, todos ellos lenguajes de programación, se integren a su software. Tal vez piensa que los investigadores y analistas simplemente no van a cambiar una herramienta tan sencilla como es SPSS, la cual se basa en un menú de opciones que los libera de pensar en el cómo y centrarse en el qué; para meterse a desarrollar en R, Python, Java, etc. En todo caso, si alguien lo hace serán los ingenieros y utilizarán SPSS para trabajar con las aplicaciones desarrolladas por ellos, pero supongo que muchos no están de acuerdo en hacerlo. En otras palabras, SPSS está renunciando al liderazgo para situarse como un simple banco de trabajo. Por otro lado, se pueden correr muchos procedimientos de SPSS en línea, pero la empresa ha olvidado el asunto nodal: Internet no es para alojar o hacer las cosas en línea, es para COMPARTIR, INTERACTUAR y APRENDER.

Hace años que venimos haciendo las cosas en R y hemos advertido de lo que viene. Algunos lectores de este blog no están de acuerdo con lo que decimos y así nos lo han hecho saber en los comentarios al blog. Dicen que le falta mucho a R para competir con el software comercial o que no es mejor. Sin embargo, las cosas se vienen perfilando de una forma diferente; tan solo véase la gráfica de abajo que da cuenta del crecimiento de paquetes que R ha tenido en los últimos años; y es que R tiene paquetes para hacer cualquier cosa que desees. Shiny es uno de tantos paquetes que tiene R, pero en este caso es más que eso porque da al clavo en una de las cosas más anheladas por un investigador de mercados cuantitativo: COMPARTIR los análisis de un estudio en Internet, hacerlo de manera INTERACTIVA y que el analista APRENDA y comprenda.

numero de paquetes de R

Hasta el día de hoy, la gran mayoría de agencias de investigación entregan un reporte con gráficos estáticos hechos principalmente en Power Point o Excel; aunque este programa es reactivo y no tendría porque usar gráficos estáticos. Por ejemplo, algo común en un estudio de conjoint es mostrar la participación que obtiene un producto vs. otros productos en un escenario simulado; los resultados se muestran con gráficas estáticas. Si son 10 escenarios se le muestra al cliente 10 gráficas y aunque algunos programas del tipo CBC de Sawtooth tienen un simulador para hacerlo de forma dinámica, éste no se le proporciona al cliente, por restricciones de derechos de autor o porque el cliente no sabe operarlo. Seguramente no todos lo hacen así. En nuestro caso entregamos un simulador desarrollado en casa con simples herramientas de Excel y R (véase la imagen de abajo). Como cliente, ¿qué tan bien te vendría un simulador en línea donde pudieras jugar con escenarios a tu antojo y estimar la preferencia o participación de los productos? ¿Qué te parece estimar la satisfacción de los clientes metiendo distintas variables de tu programa de satisfacción y verlo por áreas de la empresa? ¿Qué tal observar un DQA o mapa de cuadrantes por los segmentos o regiones que se te ocurran? ¿Qué tal tener tu tablero de mandos de tus esfuerzos en línea y verlo de manera interactiva? Eso, estimado lector, es R combinado con Shiny. Las posibilidades son ilimitadas y el cliente no necesita saber R o Shiny para operar los programas en Internet. Aquí puedes ver algunos ejemplos de aplicaciones desarrolladas con R y Shiny.

simulador de conjoint

Para dejarlo más claro, ahí les va una explicación breve de lo que es R y Shiny. R es un lenguaje de programación estadística que nació por allá de los años de 1993. Se compone de paquetes que al día de hoy suman 8,011 y tiene más cada día. Es un lenguaje de tipo funcional; en un momento más explico que es eso. Por su parte, Shiny es uno de esos 8,011 paquetes que tiene R. Se utiliza para desarrollar aplicaciones web; es decir, que corre en Internet. No obstante, no se requiere de conocimientos en HTML, CSS o Java, lenguajes de programación en Internet, para desarrollar aplicaciones. Posiblemente, su mejor atributo es que es reactivo. De acuerdo, funcional y reactivo, ¿cómo se traducen estos conceptos en términos de R y Shiny? Todos conocemos Excel, ¿sí? La hoja de cálculo más popular que existe. Y hemos hecho cálculos con él, los hacemos utilizando funciones preconstruidas. Por ejemplo, supón que quieres sumar 2, columna A1 (véase la figura de abajo), con otro 2, columna B1, y al resultado sacarle raíz cuadrada. Por supuesto, nadie utiliza Excel para una operación tan infantil, pero es sólo para mostrar mi punto. El resultado de esos sesudos cálculos es 2; como puedes apreciar en la columna C1, que es donde decidimos introducir las funciones.

programacion funcional

Si observas, sobre la celda C1 hay dos funciones:

  1. La función suma: SUMA(A1,B1). Fíjate que esta función no afecta las columnas A1 y B1, únicamente toma de ellas los valores que va a sumar. En programación, a los valores que se introducen en la función, para que haga lo que se le pide, se les llama argumentos o parámetros*; y no necesariamente tienen que ser números. Ahora, presta atención al paréntesis que contiene a los argumentos, todas las funciones tanto en Excel como en R los utilizan, en otras palabras siempre vas a ver algo así como Función(Argumentos, Argumentos…). Una función puede tener muchos argumentos, los cuales van separados por comas. Con lo que sigue te debe quedar más claro.
  2. En la función raíz cuadrada: RAIZ(SUMA(A1,B1)); el argumento es otra función, que no es sino la suma de las columnas A1 y B1. La cosa se ve más o menos compleja, porque se están utilizando dos funciones para obtener un solo resultado; pero eso es precisamente lo que le da poder a la programación en Excel y R, que funcionan de manera similar. Por eso se llaman lenguajes funcionales, porque son como maquinas que funcionan a través de cualesquier valores válidos que se le de, transformándolos y devolviendo un resultado u objeto que puede ser manipulado por otra(s) función(es).

Habrás notado que en cuanto cambias un valor de cualquier celda que sirve de argumento para alguna función, el resultado cambia ipso-facto; sin que tengas que darle el OK o enter. En este caso, si cambias, en la celda A1, el 2 por el 7, el resultado de C1 se actualiza automáticamente. Sin embargo, la función o fórmula no cambia; sigue siendo la misma (véase imagen de abajo). A eso se le llama reactivo, y es distinto a la mayoría de los programas estadísticos que requieren que les declares explícitamente que deben correr el análisis. Posiblemente, por eso se dice que Excel es el programa más sorprendente y completo que hay. Si ves los ejemplos de Shiny, te darás cuenta que opera de la misma forma: cambias los valores y el resultado se actualiza.

programacion reactiva

Se dice que R es difícil de aprender y/o se necesita mucho tiempo, es posible. Pero déjame decirte que es peor hacer una y otra vez el mismo análisis, parte por parte, año tras año; no importa que sólo sea cosa de darle clic a tu programa favorito. Con el paso de los años, te das cuenta del tiempo que te habrías ahorrado con tan solo construir las funciones que necesitabas correr comúnmente, con la ayuda de R y Shiny. ¿Es difícil R? No más que Excel y VBA juntos y, sin embargo, su uso es generalizado; al menos el de Excel. No importa tu postura, es claro que estamos viviendo un nuevo paradigma. No te resistas al cambio, este es inevitable.

Por favor, no te reprimas y déjanos tus comentarios.

Gracias por leernos.

* Te aconsejo que no emplees el vocablo parámetro, porque este tiene un significado distinto en estadística del que tiene en programación.

DISEÑO DE TARJETAS PARA CBC CON R

¿Sabías que John Napier pasó 20 años de su vida desarrollando las tablas de logaritmos? Ese esfuerzo significó un ahorro de tiempo para miles de científicos, quienes se la pasaban gran parte de su vida haciendo cálculos. ¡Dios bendiga a San Napier! habrán dicho. Tal vez los que hacemos investigación hubiésemos tenido que cambiarle el nombre a Addelman1 por San Addelman debido a  los diseños experimentales que nos obsequió para nuestras investigaciones con conjoint analysis o análisis conjunto, pero no pudo ser, porque a diferencia de lo que pasó en la época de Napier, en la cual las reglas de cálculo y luego las calculadoras tardaron cientos de años en llegar, en nuestros tiempos, en cuestión de un par de décadas, ya teníamos varios programas para generar diseños experimentales.

Si un investigador de mercados quiere hacer un estudio utilizando la técnica de conjoint, hay tres cosas absolutamente indispensables que debe entender bien; la primera, obvio, es que necesita conocer qué es conjoint analysis, eso está fácil, basta con leer cualquier artículo en línea o la wikipedia, allí, con mucha probabilidad, desde el primer párrafo uno puede leer algo que dice más o menos así: “El conjoint analysis es una técnica que…bla,bla,bla…”. Como supongo que tú, yo, nosotros y todos ustedes, ya están cansado de ese tipo de artículos, qué tal si mejor vemos este vídeo (utiliza la configuración para la traducción automática en español).

Las dos restantes son mucho más complicadas, pero más interesantes. La segunda exige conocer qué son los diseños experimentales y estímulos o tratamientos o perfiles. Aunque todos estos términos significan lo mismo se utilizan en diferentes contextos: estímulos se utiliza más en psicología, tratamientos en el cultivo de elotes (agronomía) y perfiles en investigación de mercados, por lo que de aquí en adelante diremos perfiles. La tercera es cómo analizar los datos, esto se puede hacer a través de regresión lineal múltiple, regresión logística o multinomial, mejor conocidas como modelos logit, modelos jerárquicos bayesianos o hierarchical bayes models, entre otros menos famosos. Mi frustración se la debo a estos dos últimos temas y tal parece que no soy el único, pues todo nos llevaba a suponer que es difícil hacer conjoint analysis sin la paquetería comercial. Como verás más adelante, no es necesario contar con ella; ambas cosas se pueden hacer con R. En este post vamos a explicar como proceder para hacer un diseño para CBC y en otro haremos lo mismo con su análisis. Si no puedes esperarte hasta el segundo post, te sugiero que leas el artículo de Hideo Aizaki y Kazushi Nishimura quienes ilustran ambos procedimientos en R. Aclaro, hay muchos tipos de conjoint; en cuestión de diseño y análisis, cada cual va con su cada quién, es decir, tienen su forma particular de diseñar estímulos y analizar los resultados. Así que subrayo, en este artículo vamos a hablar únicamente de CBC; presumo que ya viste el video anterior.

perfilBueno, empecemos desde el génesis. Un perfil es una descripción del producto o servicio que se va a evaluar; del cual se quiere saber que atributos determinan su preferencia. En la imagen de la izquierda tenemos 3 perfiles: el perfil de un Mini Cooper de transmisión estándar y de alimentación a base de gasolina; los perfiles de un Beetle y Honda, cada uno de ellos con sus propias características. Eso estuvo muy fácil, ¿verdad? De lo anterior se deduce que para hacer un conjoint se necesita primeramente —como decía mi hijo pequeño— decidir que características o atributos del producto o servicio se van evaluar. En los perfiles anteriores se tomó la decisión de evaluar 3 atributos o factores, como también se les dice en la terminología del conjoint analysis:

  1. Marca del vehículo
  2. Tipo de transmisión
  3. Alimentación de combustible.

El primer razonamiento que deberías de hacer sobre lo anterior, es que para evaluar qué tanto impacta el tipo de transmisión (estándar o automático) a las ventas del Mini, el entrevistado tiene que calificar o evaluar una versión de esta marca con transmisión estándar y otra versión con transmisión automática; si no, ¿cómo vas a determinar cuánta gente prefiere un Mini con uno u otro tipo de transmisión? Lógico ¡¿no es así?! Sin embargo, la cosa se pone aún más interesante cuando también deseas saber qué tanto se afecta la preferencia por el Mini debido al tipo de combustible que usa. Vamos a decir que quieres saber en que situación el consumidor lo escoge más: cuándo es alimentado con gasolina, diesel, o mediante batería eléctrica y gasolina, o sea híbrido; como ya te lo imaginas, el consumidor tiene que evaluar al Mini con estas otras tres variantes. La misma situación se repite para conocer la preferencia por el Beetle y el Honda. Ten en cuenta que no  puedes evaluar parcialmente al Mini (al menos en nuestro tipo de conjoint); es decir, primero con la transmisión estándar y luego sólo con el tipo de combustible que usa, el perfil debe ser completo, o sea, pedirle al entrevistado que evalúe un Mini con transmisión estándar, alimentado con gasolina. En resumen, si quieres saber por cada variante que hay cómo se afecta la preferencia por cada automóvil, necesitas combinar todos las variantes: 3 marcas, 2 tipos de transmisión y 3 tipos de alimentación de combustible. Nota que estamos utilizando la marca del auto como otra variante más. En otras palabras, el auto que el consumidor (encuestado) escoja o prefiera va a depender de la marca, el tipo de transmisión y combustible. Siendo este el caso, ¿cuántos perfiles completos hay cuando hacemos todas las combinaciones posibles? El cálculo es simple: 3 X 2 X 3 = 18; dieciocho combinaciones en total. En concreto, hay 18 diferentes tipos de automóviles, de entre los cuales escoger.

¿Qué crees que pasaría si deseas evaluar otros atributos con más variantes? Tal vez quieres determinar como cambia la preferencia si el auto es convertible y/o si es totalmente eléctrico, en ese caso, los atributos o factores cambian de 3 hasta 5 y las variantes o niveles son ahora 4 más (2 más por ser convertible o no y otras 2 por ser totalmente eléctrico o manual). ¿Te das cuenta que entre más atributos y variantes haya el número de combinaciones va in crescendo? Efectivamente, ahora tienes 3 X 2 X 3 X 2 X 2 = 72; setenta y dos perfiles completos o tipos de automóviles. Mi primera pregunta es, ¿qué empresa armadora de autos se puede dar el lujo de fabricar 72 diferentes tipos de autos? None, isn’t it? Bueno, esto no es una limitante nada más para las armadoras, también lo es para los consumidores que entrevistamos, ¿qué consumidor está lo bastante chiflado como para aguantarte una entrevista donde le vas a preguntar su preferencia por 72 diferentes tipos de autos? ¿Lo ves?, el quid de la cuestión, y por la cual tenemos que usar una computadora para diseñar los perfiles de nuestro estudio, es que si el investigador lo hiciera a mano se pasaría gran parte de su vida combinando las variantes de cada atributo para ir armando perfiles; y así, como con las estampitas que jugábamos de niños, tendría que revisarlos uno a uno para hacer un reconocimiento sobre cuáles ya tiene y cuáles no: “Sí, sí, sí, a ver espérame…no, ese no lo tengo”, jajajajaja. La otra, naturalmente, es que ningún consumidor nos daría una entrevista si le decimos que necesitamos que nos diga su preferencia sobre 72 autos; sin embargo, en la práctica se hacen estudios que podrían llegar a miles de combinaciones.

Para conservar una relación cordial con el consumidor (entrevistado), el investigador decidió que lo más prudente era presentarle sólo una parte del total de los perfiles y así nació —es un decir pues estos diseños existen desde hace mucho— lo que en conjoint se llama diseño factorial fraccionado o incompleto; claro está que si éste se llama incompleto, el que contiene todos los perfiles se llama completo, elemental mi estimado lector. El problema con esta forma de diseñar los perfiles es que, como puedes suponer, algunas o más bien muchas combinaciones (tipos de auto) van a estar ausentes (Esto me recuerda a un jefe que tuve y su discusión con un tortero. Mi jefe le pedía al tortero que le hiciera una torta con jamón, pollo, huevo, chorizo, queso de puerco, pierna, salchicha, etcétera y el tortero no más no quería, argumentando que no tenía de ese tipo de tortas, que únicamente contaba con las que aparecían en el menú. No obstante, se podían divisar todos los ingredientes para preparar esa torta tan especial; fue tal la discusión que mi jefe, queriendo hacer valer su estatus, le gritaba totalmente histérico, que si no se había dado cuenta que estaba hablando con uno de los dueños de las agencias de investigación de mercados más grandes de México, jajajaja. ¡Qué tiempos aquellos!). ¿En qué íbamos? ¡Ah, sí!, el truco es que las combinaciones resultantes del diseño se hagan de tal forma que cada nivel (ya sabes, variante) de un atributo se aparee por lo menos el mismo número de veces con cada uno de los niveles de cualquier otro atributo; con eso nos aseguramos de que un nivel de un atributo no aparezca más veces con un nivel en particular. A eso se le denomina diseño ortogonal (independiente) pues se asegura que un nivel no se relacione con otro de forma ventajosa. Por ejemplo, ¿qué pasa si a ti te gusta mucho el Beetle y este auto aparece más de la cuenta con transmisión automática? Aunque a ti te gusten más los autos estándar, siempre que elijas el Beetle estarás escogiendo también la transmisión automática, es de puro sentido común que estas dos variantes no son independientes: si escoges a uno escoges al otro. Es como el compromiso matrimonial, pides la mano de la novia pero tu sabes que te la vas a llevar completa, ¿me captas?

La principal virtud de estos diseños es que con ellos se pueden estimar los efectos principales o generales, aunque San Addelman dice que no es una condición necesaria, pues basta con que las variantes de un atributo con otro se encuentren apareados en la misma proporción — recuerda que anteriormente dijimos mismo número de veces, no proporción; no es lo mismo 4 manzanas que un cuarto de manzana —. Los efectos principales te permiten determinar el valor que el consumidor le asigna a cada nivel, y por supuesto la importancia de cada atributo o factor; en otras palabras, ¿qué importa más: la marca, el tipo de transmisión, o el combustible?; y dentro de cada factor, qué nivel vale más para el consumidor: ¿cuál es la marca más rentable, el Mini, el Beatle, o el Honda? Sin embargo, derivado de la ausencia de otros perfiles, no es posible saber qué tanto impacta a la preferencia una combinación específica de esas variantes. En otras palabras, si hay una asociación o interacción que tendría un éxito inusitado, digamos el Mini con transmisión automática, no se sabe, lo único que se puede determinar es cuál marca y tipo de transmisión son los más preferidos. Parece que es lo mismo, ¿verdad?, pero no es así. Hay combinaciones mortales, sabes que Leo Messi es un gran jugador, pero no es lo mismo Leo Messi con el Barcelona que Leo Messi con la Selección Argentina, en un equipo es mortífero, en el otro es bueno, pero no letal. En general, la mayoría de los estudios de conjoint se hacen para estimar los efectos principales; por dicha razón es tan llevado y traído el famoso diseño ortogonal de factorial fraccionado. Espero que no te hayas perdido hasta este momento, como su nombre lo índica los diseños se llaman fraccionados porque sólo son una fracción del total de perfiles posibles; en nuestro caso tenemos 18 perfiles y podemos reducirlo hasta la mitad, es decir, 1/2 fracción que equivale a 9 perfiles. Algunos programas como el SPSS te dan por default el número mínimo, otros, como en el caso de R, se tienen que especificar.

Hacer diseños factoriales fraccionados es simple cuando el número de niveles de cada atributo o factor son iguales; esos diseños se conocen como diseños factoriales simétricos, la literatura está llena de ellos. Sin embargo, la cosa se complica cuando el número de niveles es distinto para cualesquiera de los atributos, en este caso se debe hacer un diseño factorial asimétrico. Si a todo eso le agregas que debe ser fraccionado, a nadie le debe de extrañar porque a muchos investigadores de mercado les cuesta trabajo conceptualizar y llevar a cabo un estudio de CBC (conjoint based choice). Ahora, perdóname por hacerte la vida un poco más complicada, tradicionalmente, se presentaba al entrevistado un perfil de un diseño fraccionado y se le pedía que dijera con qué probabilidad compraría ese producto o servicio, el entrevistado debía dar su respuesta en una escala de 0 a 10, donde 0 significaba que definitivamente no lo compraría y 10 que definitivamente sí lo compraría, o en cualquier otro tipo de escala. Tenía que hacer lo mismo con cada uno de los perfiles restantes y los resultados de esas evaluaciones se analizaban con el método de regresión lineal múltiple; ese fue el primer conjoint y por eso se le llama tradicional o de calificación, pero pronto apareció el CBC. La diferencia más importante del conjoint tradicional con el conjoint based choice es que éste no utiliza calificaciones para evaluar, sino que se basa en selecciones discretas, por eso también se le llama conjoint de modelos discretos; al encuestado se le pide que seleccione un perfil de un conjunto de ellos. Toma nota que esta forma de preguntar también es un cambio drástico con el conjoint tradicional, no le pides al entrevistado que evalúe un solo perfil a la vez, lo que haces es combinar varios perfiles y presentarlos al mismo tiempo para que el consumidor te diga cuál de todos ellos prefiere o compraría. ¡A T E N C I Ó N! porque este es el punto fino de la discusión, no ha cambiado nada, se sigue diseñando igual que en el conjoint tradicional, pero ahora hay que combinar los perfiles; sí, los mismos perfiles que siempre se han utilizado, ahora se evalúan en paquete, no uno por uno. Eso, en la práctica, es lo que hacen los programas comerciales (combinar los perfiles), además de darte unas estadísticas de la eficiencia del diseño resultante, pues como puedes comprender hay muchas formas de combinar los estímulos (perfiles), por lo que hay que buscar las que cumplan con principios que comentamos anteriormente: frecuencia y proporcionalidad.

Una disculpa si demoré tanto para explicarte como hacer el mismo truco de arriba en R; al fin tu paciencia será recompensada. Para empezar, tienes que bajar de la red el programa R y instalarlo en tu compu, luego instala el programa AlgDesign, estos procedimientos son muy sencillos, si no sabes cómo, empieza con estos tutoriales de R. Bueno, aquí los pasos que hay que seguir:

      1. Corre el diseño factorial completo con la ayuda del comando gen.factorial().
      2. Modifica este diseño factorial completo en uno fraccionado o incompleto con la ayuda del comando optFederov(); este comando emplea el algoritmo creado por Federov para obtener un diseño optimo fraccionado, de allí el prefijo opt.2
      3. Copia el diseño optimo cuantas veces lo requieras, en este caso tenemos planeado presentar tres autos en cada tarea, por lo que vamos a hacer 3 copias. Date cuenta que a partir de este paso todo lo que sigue lo puedes hacer en Excel y quizá sea hasta más fácil.
      4. Asígnale a cada uno de los nueve perfiles, de cada copia, un número aleatorio.
      5. Ordena al interior cada copia de perfiles con base a la columna de números aleatorios que generaste en el paso anterior.3
      6. Combina los perfiles de los diseños aleatorizados para generar 9 tareas que serán evaluadas por los entrevistados, cada una de ellas, con tres tipos de auto; si te encuentras con que hay dos perfiles iguales en una tarea vuelve a aleatorizar tus diseños y combínalos nuevamente.

Explicación general. El símbolo (>) lo pongo como referencia y guía de cada línea de comando en la consola de R, no es parte de tu programa. El código que te estoy pidiendo que escribas viene en negritas y cursivas para diferenciarlo del texto normal. Después de escribir el código en cada línea tienes que apretar la tecla enter para que se ejecute la función. R es sensible a las mayúsculas y minúsculas por lo que debes respetar la forma en que se escriben las funciones y en todo lo que programes; en R no es lo mismo “Gato” (con mayúscula) que “gato” (con minúscula).

Paso 1.

>library (AlgDesign)

>DFC <- gen.factorial(c(3,2,3), varNames=c(“MARCA”,”TRANSMISION”,”COMBUSTIBLE”), factors = “all”)

>DFC

La función library se utiliza para extraer de tu estante de programas el programa AlgDesign, el cual, obviamente, debes tener cargado.

DFC es un acrónimo que hace referencia a Diseño Factorial Completo. El símbolo (<-) significa igual a, y simplemente está indicando que el resultado de las funciones de la derecha serán guardadas con el nombre de la variable que aparece a la izquierda, en este caso DFC; toma en cuenta que este es un nombre para la variable arbitrario, puedes usar cualquier otro.

La función gen.factorial es la encargada de generar un diseño factorial completo, utilizando para ello la  cadena de números, por eso la letra c que significa concatenate (encadenar o combinar), de 3, 2, y 3 niveles. La instrucción varNames se usa para asignar los nombres a cada factor. Si la omites, el programa utilizará por default X1, X2 y X3; al igual que la función anterior, la letra c significa combinar. La instrucción factors está señalando que se utilizarán todos los factores en el diseño.

Para ver cualquier variable o matriz de datos que hayas creado sólo necesitas escribir el nombre y presionar enter, por eso hemos escrito DFC. Si todo lo hiciste bien, tu consola de R deberá verse como la de imagen de abajo.

diseño factorial completo

Paso 2.

>set.seed (1963)

>DFF <- optFederov(~.,DFC,9)

>DFF

La instrucción set.seed se utiliza para indicarle a la computadora cual será el número de arranque aleatorio que debe usar; este procedimiento es necesario para replicar tus diseños. No importa que número uses, siempre y cuando sea el mismo, ya que de otra forma el resultado será diferente aunque sigas el mismo procedimiento; en este caso yo he puesto la fecha en que nací, 1963. Ahora, estamos creando una nueva variable que hemos nombrado DFF  – de la misma forma que la variable anterior es solo un acrónimo conveniente para crear una variable nueva, llamada Diseño Factorial Fraccionado– en ella se depositará la salida de la función del diseño factorial fraccionado mediante el algoritmo de optFederov. El argumento ~. (un argumento es un valor que se le instruye a la función para que se ejecute) indica que se debe utilizar un modelo lineal, DFC es el diseño factorial completo que se va a usar para fraccionar (recuerda que éste se creó anteriormente, por lo cual está en la memoria de la computadora), y 9 es el número de perfiles que deseamos. Si recuerdas el diseño factorial completo es de 18 perfiles por lo que le estamos instruyendo al programa para que nos de una fracción de la mitad. Si todo salió como se planea, el resultado será algo así (depende de lo que hayas puesto en set.seed).

diseño factorial fraccionado

Detengámonos un momento. Hasta este paso, ya tienes un diseño factorial fraccionado, es decir, una muestra de todos los posibles estímulos (perfiles) que pueden existir; con base al número de factores y niveles que tiene el estudio. Si estuvieras haciendo un conjoint tradicional o clásico no necesitarías nada más y el procedimiento sería muy simple: muestras cada uno de los 9 perfiles (uno por uno) y le pides al entrevistado que responda en una escala del 1 al 5 (puede ser cualquier otro tipo de escala) qué tan dispuesto estaría en comprar el automóvil. Como dijimos, en CBC la cuestión es diferente, por lo que debes de presentar varios tipos de automóvil; el paso 3 en adelante, busca combinar los estímulos de manera aleatoria.

Paso 3.

>PERFIL1 <- DFF$design

>PERFIL1

Ahora estamos creando 1 copia del diseño factorial fraccionado, con el nombre de PERFIL1 que va a ser igual al objeto $design, del diseño DFF creado anteriormente. En R, el símbolo de moneda ($) se utiliza cuando quieres manipular un objeto en particular, en nuestro caso deseamos manejar el diseño o el objeto $design. Si este es otro caso de éxito, el resultado será muy parecido a este.

copias de perfiles

Haz lo mismo otras 2 veces pero ahora utiliza, PERFIL2 y PERFIL3. No te pido que veas nuevamente como quedaron tus copias pues confiamos en que serán iguales que la anterior.

>PERFIL2 <- DFF$design

>PERFIL3 <- DFF$design

Paso 4.

>PERFIL1 <- transform(PERFIL1, r1=runif(9))

>PERFIL1

La función general transform es utilizada para transformar la copia de matriz de perfiles 1, PERFIL1, agregándole una columna r1 con un número aleatorio uniforme, es decir, que va de 0 a 1 por cada renglón o perfil (9, en total) . El resultado quedaría así.

perfil aleatorio

Haz lo mismo otras 2 veces, pero ahora utiliza PERFIL2 y PERFIL3, y en lugar de r1 usa, r2 y r3, respectivamente. Ya sabes que puedes ver el resultado tecleando el nombre de la matriz transformada: PERFIL2 y PERFIL3.

Paso 5

>PER1_ORD <- PERFIL1[oder(PERFIL1$r1),]

>PER1_ORD

Aquí, estamos creando otra matriz (PER1_ORD) con los perfiles ordenados, que es lo que hace el argumento order y se hace con base al objeto $r1 del Data Frame o matriz PERFIL1, este es la salida en R, observa que los perfiles vienen ordenados ahora de menos a más por la columna r1.

perfiles ordenados

hagamos lo mismo con el PERFIL2.

>PER2_ORD <- PERFIL2[oder(PERFIL2$r2),]

>PER2_ORD

perfil2 odenado

Y también con el PERFIL3.

>PER3_ORD <- PERFIL3[oder(PERFIL3$r3),]

>PER3_ORD

perfil3 ordenado

Paso 6.

Pon los archivos resultantes uno al lado del otro, como en el archivo de Excel de abajo. Los perfiles que están sobre la misma línea van juntos en una tarjeta; por ejemplo, el perfil 15, 5 y 12.

perfiles en R

Suponiendo que tus niveles por cada atributo fueran:

  • MARCA: 1 = Mini, 2 = Beetle y 3 = Honda
  • TRANSMISIÓN: 1 = Estándar y 2 = Automático
  • COMBUSTIBLE: 1 = Gasolina, 2 = Diesel y 3 = Híbrido

Las tarjeta o tarea resultante de la combinación del perfil 15, 5 y 12 quedaría así:

tarea cbc

En el caso de las combinaciones del primer renglón, los perfiles 1 y 1 se traslapan por lo cual se aconseja hacer nuevamente el procedimiento aleatorio para evitarlo.

Si te gustó este post compártelo, hasta la próxima.

1. Addelman, Sidney (1962) . “Orthogonal Main Effects Plans for Asymmetrical Factorial Experiments”, Technometrics 4, 21-46.

2. En un comentario, en un artículo que publicamos sobre MaxDiff, alguien decía que era más fácil hacer los estímulos en SPSS con el subcomando orthoplans, en general, tiene razón, al menos en este caso, pues este programa te da un diseño mínimo de los perfiles requeridos, al final lo único que tienes que hacer es combinarlos para presentarlos en el formato de un CBC.

3. Otras estrategias de diseño sencillas como la nombrada “Shift” son presentadas por Keith Chrzan y Bryan Orme en la ponencia “OVERVIEW AND COMPARISON OF DESIGN STRATEGIES FOR CHOICE BASED CONJOINT ANALYSIS” en la Sawtooth Software Conference del 2000

CLUSTER ANALYSIS

“Dios los cría y ellos se juntan”. Así como este refrán hay una docena más que hacen referencia al proceso natural que agrupa a las personas, animales o cosas parecidas entre si. Por ejemplo, “Los burros del mismo pelo trotan juntos” o “De tal palo tal astilla” o que tal “Hijo de tigre pintito” o como decía mi amá “Todos coludos o todos rabones”, apuesto a que te sabes otros tantos. Bueno, así como hay dichos también hay formas, estadísticamente hablando, de agrupar a los objetos o sujetos que se basan precisamente en la filosofía común de que “Los pájaros del mismo plumaje vuelan juntos”. De todos ellos, quizá el método más conocido es el análisis de agrupamiento jerárquico o hierarchical cluster analysis en la lengua de Shakespeare y Ronald A. Fisher.

La descripción más exacta que podemos hacer de este método, ya la hicieron los Beatles hace décadas y dice así:

Antes de que nos metamos en la bronca de explicarte como funciona esta cosa o porqué los Beatles cantan “todos juntos ya”, déjanos decirte para que sirve, total si no te sirve pos para qué continuas leyendo, ¿verdad? Mira, el cluster analysis es una técnica, desde el momento en que leo que esto o aquello es una técnica siento que no vale la pena seguir leyendo y quizá a ti te pasa igual por eso mejor hagamos un reset.

Para vender productos o servicios debes perfilar a tus posibles víctimas (clientes); es decir, no puedes ofrecer tus servicios a todo mundo porque muchos de ellos simplemente no los utilizan o les importa un reverendo pepino lo que haces, anuncias o vendes; una vez que encuentras a las víctimas tienes que asegurarte de que no sólo están interesadas en lo que vendes sino que además son las más dóciles y cooperativas que hay o sea que en cuanto les digas “Eat at Joe’s” se dirijan, sin chistar, inmediatamente a tu changarro. Suena fácil ¿no es así? pero como dicen, del dicho al hecho hay mucho trecho, distancia. Por eso, para lograrlo tienes que acortar esa distancia ofreciéndoles lo que necesitan, desean, buscan, etc. ¿cómo? pues investígales, pregúuuuuuuntales, ca’ y con base a lo que te digan que les gusta y necesitan agrúpales; asimismo, observa si, además de parecerse en eso, también son similares por su edad, sexo, nivel socioeconómico, estado civil, marcas que usan, etc. A esta práctica se le nombra segmentación de mercados y es necesaria pues a través de ella se logra mayor efectividad del marketing.

Ahora sí, el cluster analysis se utiliza para dicha segmentación de mercado. Aquí te voy a decir como funciona el método jerárquico, el cual comienza con una simple unidad (objeto o sujeto) y termina agrupándolo todo. Hagamos un pequeño ejercicio, a pie, para que le tomes sabor a lo que decían los Beatles: “one, two, three, four…all together now”. El ejemplo de Hair, Anderson, Tatham y Black del libro “Análisis Multivariante” sobre cluster análisis es muy didáctico, así que nos lo vamos a “piratear”. En una escala de 0 a 10 donde 0 es nada leal y 10 es totalmente leal, se les preguntó a 7 sujetos que tan leales se consideran a la tienda donde compran y marca que compran, sus respuestas fueron las siguientes:

tabla de lealtad cluster

Con una inspección somera de la tabla puedes darte cuenta que el sujeto E y F son muy parecidos, tienen casi los mismos niveles de lealtad a la tienda y marca y en ambos casos se trata de los niveles de lealtad más altos y aunque los sujetos C y D son muy leales a la marca no lo son tanto a la tienda. Gracias a la inventiva de René (no la rana) sino Descartes, para los amigos Renatus Cartesius (de allí el nombre de ejes cartesianos), podemos observar a través de los ejes coordenados de forma más fácil y mucho más si se trata de tan sólo dos dimensiones (lealtad a la tienda y a la marca) las relaciones entre puntos (sujetos). La siguiente gráfica nos muestra de manera instantánea que hay tres segmentos o grupos y la distancia que hay entre los sujetos dentro de cada grupo.

Gráfica de lealtad cluster

Antes de continuar, déjame hacerte una observación que tal vez no venga al caso pero que me muero de ganas por hacerla. Si tuviéramos 3 dimensiones todavía podríamos graficarlas y tratar de analizar visualmente las relaciones entre sujetos y los grupos resultantes pero sería mucho más complicado y por supuesto, mucho menos podríamos hacer este análisis en un gráfico en cuatro dimensiones porque todavía no se han inventado y ni idea de como serían*; además, imagínate lo qué sucede cuando tenemos más de 7 sujetos, digamos cientos de miles y las variables son más de tres, qué tal decenas. ¿No se puede verdad? Esta es la razón por la que insistimos en que entiendas que hay detrás de los modelos matemáticos de análisis de investigación (v.gr. el cluster análisis) porque sin ellos no se pueden resolver este tipo de problemas y quizá más importante aún es que te des cuenta que funcionan a la perfección sin importar que los puedas ver o no en un gráfico cartesiano.

Existen varios métodos para llegar a una solución dentro del cluster analysis, en general, este proceso se divide en 3 pasos:

  1. El método para medir la similitud
  2. El método para agrupar a los sujetos
  3. El método para decidir la cantidad de grupos

1. La similitud se puede medir a ojo de buen cubero, o sea como lo hicimos hace un momento, pero como te diste cuenta este método se vuelve obsoleto rápidamente, un método matemático-estadístico es la mejor solución. Por ejemplo, usando una medida de chi cuadrado, correlación o distancias euclidianas; de los dos primeros ya hemos hablado anteriormente en este blog así que vamos a hablar de distancia euclidiana. Observa el triángulo rojo de la gráfica de arriba en el cuál se unen los sujetos E y F, la diagonal que los conecta (hipotenusa) es la distancia que hay entre ellos; tú sabes que la fórmula matemática para medir esa distancia euclidiana, la cual se llama así porque se hace a través de las formas geométricas y euclides es el padre de esa ciencia, se obtiene con la siguiente fórmula:

distancia euclidiana

La mayoría de nosotros cuando vemos una fórmula, actuamos como si viéramos un hombre o mujer feo(a) o en el mejor de los casos a alguien que no nos interesa; es decir, volteamos para otro lado. Déjame retomar la primera analogía. Hay gentes que en primera instancia nos parecen feas pero cuando las conocemos y tratamos durante un buen tiempo nos damos cuenta de su belleza intrínseca, de la cual no nos habíamos percatado e incluso en algunos casos dicha relación se vuelve matrimonio. Las matemáticas son así, tienes que aprender a conocerlas para que veas esta belleza. Por ejemplo, te das cuenta que en la fórmula de arriba se obtiene la distancia dimensión por dimensión; es decir, se calcula la distancia que hay en el eje “X” de un punto al otro punto y se suma con la distancia calculada que hay de los mismos puntos sobre el eje “Y”; si tuvieras una tercera dimensión, digamos “Z”, tendrías que obtener la distancia de ese mismo par de puntos sobre este otro eje o dimensión y sumarla a las distancias anteriores, de esta forma al final obtienes la distancia que hay entre un punto y otro punto o entre sujetos y no importa cuantas variables tengas o cuantos sujetos haya la fórmula sigue funcionando. La fórmula con tres dimensiones sería así:

distancia euclidiana 3

Ahora, observa que la diferencia en distancia de un punto a otro punto, dentro de cada dimensión, está elevada al cuadrado, la explicación es muy simple: si en una dimensión (i.e “X”) la diferencia es positiva o negativa y en la otra dimensión (i.e. “Y”) la diferencia va en sentido contrario, al sumar las dimensiones estás diferencias siempre se anularían y nos encontraríamos con el resultado de que las diferencias son muy pequeñas o no las hay, esa es la razón por las que se elevan al cuadrado, para que siempre se puedan sumar, pero y este es un gran PERO, por lo cual te pido que pongas mucha atención. Esta forma de obtener las distancias anula la covarianza; en otras palabras, si un sujeto es leal a la tienda y también a la marca o si tiene mucha lealtad a la tienda y muy poca a la marca el cluster analysis no lo detecta; es más, NI siquiera está interesado en saber si esas distancias o diferencias entre dimensiones están relacionadas (el caso contrarío es el análisis de correlación); lo que le interesa es conocer la distancia que hay entre los sujetos, determinar si piensan igual, no le interesa, en lo más mínimo, saber cómo o en qué piensan. Esa es la gran debilidad del cluster análisis, NO hay un sustento teórico detrás de los grupos que forma y por eso el procedimiento para segmentar al mercado pasa por varios otros tipos de análisis como el análisis factorial, del cual ya también hablamos aquí y el análisis discriminante, del cuál muy pronto publicaremos un artículo.

Antes de concluir con la decodificación de la fórmula, permíteme insistir en el punto anterior, si tienes dos sujetos y uno dice que es totalmente leal a la tienda o sea tiene un puntaje de 10 y el otro sujeto dice que su lealtad es de 9, la distancia que hay entre ellos es de uno (raíz de 10-9 elavado al cuadrado es 1). ¿de acuerdo? Bueno, si observas a otros 2 sujetos diferentes en el que el primero tiene calificación de lealtad a la tienda de 0, o sea que no es nada leal y el otro tiene una lealtad de 1, que significa que su lealtad está por los suelos, la diferencia seguiría siendo uno (raíz de 0-1 elevado al cuadrado es 1); el cluster análisis junta a estos cuatro sujetos y claro que le tiene sin cuidado que los dos primeros sean leales y los otros dos no ¿me captas? Puedes terminar juntando peras con manzanas; no hay una estructura conceptual sobre la cual descanse el andamiaje de los grupos ¿Cómo te previenes de que te suceda ésto? pues incluyendo varias dimensiones, no nada más dos, asegurándote que las dimensiones que estás incluyendo en tu análisis son importantes para tu mercado y que tienen validez y confiabilidad. Muy bien, como te prometí, la raíz cuadrada en la fórmula, obedece a que las distancias se elevaron al cuadrado y se desea regresar las distancias resultantes a sus unidades originales. Más sin embargo, debido a que en la práctica se combinan distintas medidas o escalas y un resultado así carece de significado (v.gr. lealtad en una escala de 0 a 10 e intención de compra en una escala del 1 a 5) la mayoría de los programas estadísticos reescalan o estandarizan las distancias del cluster. En la imagen de abajo tenemos la distancia resultante entre el sujeto E y F, en sus escalas originales.

distancia euclidiana 2

Este cálculo se hace para todos los pares de puntos que hay y con ello se forma una matriz de similitudes o distancias entre sujetos, la cual se basa en tan sólo dos dimensiones: lealtad a la tienda y lealtad a la marca, no importa si tienes más variables de cualquier manera obtendrías una matriz del mismo tamaño, esta sólo cambiaría si hubieses entrevistado a más de 7 sujetos. Este otro asunto parece pueril, por obvio, pero hace algunos años era vital pues la mayoría de los programas estadísticos no podían correr un cluster analysis con más de 300 o 400 casos, por lo que se usaba una submuestra de casos, cuando tenías miles de ellos, determinabas cuál era el número de grupos con dicha submuestra y utilizabas un procedimiento llamada Cluster K-means, el cual podía agruparte a todos tus sujetos con la condición de que le indicaras cuantos grupos debía de obtener; lo de “K-means” se refiere a que introduzcas el promedio de distancia en cada grupo aunque, en la mayoría de los programas ya no es necesario, basta con que señales cuantos grupos quieres. A continuación nuestra matriz de distancias resultante.

matriz de simlitudes

2. Lo que sigue, como dice mi compadre Cenobio**, es “arrejuntar” a los sujetos y también allí existen varios métodos; el que describen Hair, Anderson y compañía, se llama jerárquico y aglomerativo. Es jerárquico porque como su nombre lo indica agrupa primero a los 2 sujetos más parecidos, luego busca al otro par más parecido para agruparlo y si alguno de ellos ya existe dentro de un grupo pos simple y sencillamente los aglomera. Ve el cuadro de abajo para que te quede más claro este procedimiento jerárquico y aglomerativo.

cluster jerarquico

Para empezar desde el principio, te puedes dar cuenta que se tienen tantos grupos como sujetos, 7 grupos en total; entonces lo que se busca es juntar a esta gente en una sola familia y una forma de hacerlo es como sugieren los Beatles, paso por paso; en el paso “one”, los sujetos más cercanos son el E y el F por lo cual se procede a juntarlos con lo que ahora nos quedamos con sólo 6 grupos; en el paso “two” se buscan a los sujetos más cercanos después del E y F y da la casualidad que son el E y G pero como el E ya pertenece a un grupo se procede a aglomerarlos en otro grupo más grande, de tal forma que ahora sólo nos quedan 5 grupos; si sigues este procedimiento al último vas a terminar cantando…”all together now”. ¿Lo ves?

3. Tal ves la parte más difícil del cluster analysis es decidir con cuántos grupos te debes quedar, tradicionalmente, los investigadores se apoyan en un elemento gráfico llamado dendrograma.

dendrograma

Como puedes ver, es un tipo de gráfico que en el eje de las x’s señala la distancia (reescalada) a la que se encuentran cada uno de los sujetos, graficados en el eje de las y’s con respecto a sus contrapartes. Por ejemplo, E y F estan separados por un poco más de una unidad de distancia, mientras que el G está a dos unidades de distancia del grupo formado por E y F. En general, es más o menos fácil ver que hay tres grupos: E-F-G, B-C-D, y A, este último grupo, que en realidad es sólo un sujeto, está a más de tres unidades de cualquiera de los otros dos grupos. No obstante, esta herramienta, el juicio para decidir cuantos grupos se deben considerar en la solución final depende de los aspectos prácticos de una segmentación, algunos de los que recuerdo son: que los grupos sean rentables (tamaño suficiente y que compren), alcanzables, es decir, que puedan leer tus mensajes tipo “Eat at Joe’s”. Estadísticamente hablando, los grupos deben ser muy homogéneos en su interior, esto quiere decir, que la distancia entre los sujetos que los componen sea pequeña y muy heterogéneos entre ellos; lo cual se lee: la distancia entre grupos debe ser la máxima.

Hacer este análisis en SPSS no implica ninguna dificultad, de hecho, creo que este programa es el más didáctico y fácil que existe pero si no cuentas con él y quieres hacerlo en R puedes consultar la sintaxis aquí.

Gracias por leernos y hasta la próxima.

P.D. Para los que nos han solicitado un libro, les queremos comentar que vamos en un 20% y que a este paso lo concluiremos a finales del próximo año pero es una promesa que lo tendremos que publicar tarde o temprano.

* Me refiero a las dimensiones del tipo cartesiano no a los vectores que se pueden construir en un mapa de 2 o 3 dimensiones como el factorial o discriminante.

** Se utiliza este nombre en doble sentido. Por un lado, así se llama mi compa pero por el otro es el concepto que se utiliza para describir a un grupo de células que, tras dividirse, no se separan y permanecen en grupos dentro de una vaina o sustancia mucilaginosa (wikipedia).