GICUNED / GridFCM.practicum

GNU General Public License v3.0
0 stars 0 forks source link

Planteamiento Teórico de las Funciones de Centralidad #3

Open Asanfe opened 8 months ago

Asanfe commented 8 months ago

La tarea consiste en:

Detalles y comentarios:

Si necesitáis repasar conmigo (@Asanfe) la teoría sobre jerarquía y presencialidad, estoy abierto a dudas y a quedar por videoconferencia para charlar sobre el tema largo y tendido.

Respecto a la definición de las funciones buscamos establecer lo siguiente:

Utilizar el foro de este Issue para comentar cualquier cosa sobre esta tarea.

Fgil77 commented 8 months ago

Buenos días, Alejandro.

Este fin de semana estuve repasando el tema de la jerarquía. A partir de la función import.wimp he intentado, tal como nos indicaste, obtener los vectores IN (cambio de un constructo cuando el resto cambia). Vector OUT (cuanto cambio genera un constructo sobre el resto de constructos). Número de cambios, acumulado de puntuaciones directa que cambian y acumulado standarizado.

Para describir la jerarquía, entiendo que tenemos que presuponer que los constructos jerárquicamente superiores no se verán afectado por las variaciones de otros subordinados, y que estos al ser superiores afectarán y generarán variaciones en los subordinados.

Condiciones necesarias de un constructo supra ordenado, superior en la jerarquía de constructos. 1.- El constructo supra ordenado tendrá mínima afectación por los subordinados. Recibe pocos IN.

    • El constructo supra ordenado afectará a los subordinados. Produce muchos OUT. Diría que recibir menos In fluencia del resto de constructos tiene mayor peso en la centralidad que tener mayor influencia en otros constructos. Mantener el constructo muestra un impulso, tendencia o patrón de resistencia al cambio de constructo. Generar reconstrucción cada vez que se genera una nueva circunstancia es lo que implica la TCP por lo que las implicaciones OUT sería un proceso esperado.

IN cero o muy bajo no tiene porque representar centralidad podría mostrar independencia respecto al resto de constructos o que se trata de un constructo muy impermeable y específico.

Si realmente, IN fuera mas influyente en la centralidad que OUT, podríamos dividir el vector IN por el vector OUT, para obtener en qué medida se ve afectado in/out el constructo. Valores bajos del índice por ejemplo por debajo de 0,40/0,30 podría indicar centralidad. Por encima de un determinado valor indicaria que es subordinado/periférico. Los índices también se podrían sacar en función del total de variación. OUT del constructo/todos los OUT. IN del construtos/todos los IN. Nuevo IN/OUT dividido por el número de elementos.

  1. Obtener el Vector IN frecuencia. Cuantas veces un constructo se ve afectado cuando varia otro constructo. Para obtenerlo, partimos de la matriz de puntuaciones directas wimp, le restamos la matriz de las puntuaciones del self, tras convertir el vector.self en matriz.
  2. En la matriz resultante buscamos los valores distintos de cero, FALSE, indica que hubo variación. Los FALSE pasan a 1 transformándola a numérica. Creo una columna con la suma de los valores de cada fila. Creo una fila con la suma de todos los valores de la columna. La última columna, recoge el sumatorio de las filas y corresponde al vector IN de cada constructo. La última fila, recoge el sumatorio de las columnas que corresponde al vector OUT. Luego he calculado un índice, IN / OUT.
  3. Hago lo mismo para puntuaciones directas. En este caso cojo el valor absoluto del total de la variación. Vector IN, Vector OUT, indice.
  4. Hago lo mismo para las puntuaciones escaldas. Vector IN, Vector OUT, indice. Adjunto como quedarían las transformaciones que he hecho para obtener los vectores en el archivo import.function. La he probado y hace las transformaciones con varias rejillas y con los dos tipos de escala. No será la forma adecuada para obtener los vectores, pero para probar. Diría que hay diferencias importantes en función de como obtengamos la medida de centralidad (frecuencia vs acumulado de la variación). Adjunto archivo ejemplo donde la repgrid recogería nuevos vectores como objetos IN/OUT/Indice wimp$vector_core_IN_fq[[1]] <- vector_core_IN_fq wimp$vector_core_OUT_fq[[2]] <- vector_core_OUT_fq wimp$core_fq[[3]] <- matriz_IN_OUT_fq_indice names(wimp$core_fq) <- c("matriz core fq","IN core fq","OUT core fq")

wimp$vector_core_IN_pd[[1]] <- vector_core_IN_acum wimp$vector_core_OUT_pd[[2]] <- vector_core_OUT_acum wimp$core_pd[[3]] <- matriz_IN_OUT_acum_indice names(wimp$core_pd) <- c("matriz core pd","IN core pd","OUT core pd")

wimp$vector_core_IN_stn[[1]] <- vector_core_IN_stn wimp$vector_core_OUT_stn[[2]] <- vector_core_OUT_stn wimp$core_stn[[3]] <- matriz_IN_OUT_stn_indice names(wimp$core_stn) <- c("matriz core stn","IN core stn","OUT core stn") Vaya rollo he contado. Saludos.


De: Alejandro Sanfeliciano @.> Enviado: miércoles, 7 de febrero de 2024 10:47 Para: GICUNED/GridFCM.practicum @.> Cc: FRANCISCO GIL MORENTE @.>; Assign @.> Asunto: [GICUNED/GridFCM.practicum] Planteamiento Teórico de las Funciones de Centralidad (Issue #3)

La tarea consiste en:

Detalles y comentarios:

Si necesitáis repasar conmigo @.***https://github.com/Asanfe) la teoría sobre jerarquía y presencialidad, estoy abierto a dudas y a quedar por videoconferencia para charlar sobre el tema largo y tendido.

Respecto a la definición de las funciones buscamos establecer lo siguiente:

— Reply to this email directly, view it on GitHubhttps://github.com/GICUNED/GridFCM.practicum/issues/3, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BFQ6PKA3PCGFFJO76QQF74LYSNESLAVCNFSM6AAAAABC5PYRKWVHI2DSMVQWIX3LMV43ASLTON2WKOZSGEZDENRRGE4DSNI. You are receiving this because you were assigned.Message ID: @.***>

Asanfe commented 8 months ago

Hola @Fgil77, no termino de entender algunas cosas que planteas. Mañana si después de la reunión tienes un momento y podemos comentarlo sería perfecto.

Revisa la función degree_index() que está ubicada en R/WimpIndicesFunctions.R. Esa función te permite sacar el número de Ins y Outs de cada constructo. Además, tiene el parámetro method que lo puedes igualar a "weight" y en vez de sacarte el número directo de Ins y Outs, te muestra el sumatorio ponderado.

Y lo que planteas de dividir entre variaciones totales, puede ser una buena idea para dar valores estandarizados a estos índices. Podemos conocer el número de variaciones contando el número total de aristas del grafo, que sería igual a la cantidad de elementos distintos de 0 en la matriz de pesos.

churtado-gh commented 8 months ago

Hola,

En cuanto a la función de centralidad, creo que podrían tener:

Para hacer el cálculo con pesos, para una wimp, hay una función con la que ya podríamos tener los In y los Out de cada constructo (degree_index). Algo como:

# Conectividad de los constructos c.io <- GridFCM.practicum::degree_index(wimp)

# Intercambiamos las columnas In (originalmente 2) y Out (originalmente 1) de orden c.io <- c.io[, c(2,1,3)]

Si aplicamos la transformación lineal que indicaba Alejandro:

coef <- 0.5 * sqrt(2) mat.proy <- matrix(c(coef, coef, -coef, coef), nrow = 2, byrow = TRUE)

..el cálculo del producto para obtener p y j con constructo sería bastante directo.

En cuanto a la estandarización, podríamos hacer pruebas, pero también sería una posible estrategia dividir la matriz de p's y j's por el máximo valor que se tenga de la suma de entradas y salidas en un constructo (el máximo All de la función degree_index(wimp)

Si en la función aceptamos el parámetro de incorporar los pesos, también hay opciones que te ponderan el cálculo (argumento method) en degree_index

churtado-gh commented 8 months ago

Me he cruzado el mensaje contigo, Alejandro..

Perdonad, que puesto también una almohadilla en un minifragmento de código sin darme cuenta que aquí lo iba a interpretar como Markdown (título de nivel 1)

Asanfe commented 8 months ago

@churtado-gh bien planteada la idea, en el issue #6 he dejado un ejemplo de cómo podríamos plantear las nuevas funciones a desarrollar. Cuando @Fgil77 y tu tengáis coordinada la idea para esa función podéis crear un nuevo issue parecido a #6 y dejar ahí bien definida de forma teórica la función.

Los mensajes que se ponen por aquí se pueden editar siempre que queramos, @churtado-gh si quieres puedes editar tu comentario y arreglar el problema de la almohadilla.

Asanfe commented 8 months ago

Reflexionando, además del cálculo de estos dos índices de jerarquía y centralidad, tal y cómo os lo plantee el otro día. A lo mejor también sería interesante explorar la centralidad por vector propio y ver si realmente tiene algún tipo de sentido psicológico. Ya que la centralidad por vector propio ponderaría si las conexiones que tiene son a otros constructos centrales o perífericos.

Si tenéis tiempo, yo echaría un vistazo también a la centralidad por vector propio para en un futuro ver si tiene sentido expresar la centralidad a través de ese valor o no.

churtado-gh commented 8 months ago

Hecho lo del comentario ('#'). Y ok! vamos a echarle un vistazo a un resultado con "eigenvectors", y si pudiera ser interesante, quizá también la adecuación de los constructos a una distribución chi-cuadrado según distancia de Mahalanobis...

churtado-gh commented 8 months ago

...y a lo mejor, para "ver", podríamos ver cómo se agrupan por clustering los constructos en un espacio de In-Outs con pesos, y en el espacio transformado este que propones de p's y j's..

churtado-gh commented 8 months ago

Alejandro, proponemos una línea de unas primeras funciones:

Nombre de la función: wimp_ph_matrix()

Objetivo de la función: Obtener la presencialidad (P, frecuencia con la que aparece) y jerarquía (H, influencia sobre otros) de los constructos asociados a una rejilla de implicaciones.

Parámetros de la función: • wimp (S3 wimp): WimpGrid de entrada para cuyos constructos calcularemos presencialidad y jerarquía • method: método para calcular el grado de conexiones de los constructos (directo, normalizada, ponderada), que influirá en los P y H resultado

Salida de la función: Matriz que contiene, por filas, los constructos del objeto wimp de entrada; y por columnas, los valores de P (Presencialidad) y H (Jerarquía) asociados a cada constructo según la rejilla de implicaciones dada Requisitos previos al desarrollo: Función GridFCM.practicum::degree_index que proporciona el grado de conexiones de cada constructo con el resto (entrada, salida, total)

Comentarios: • Los valores de P y H se estandarizarán dividiendo por el máximo valor de conexiones presente para un constructo del grafo

Pseudocódigo:

Extraer matrix de grado de conexiones con entradas, salidas y totales, según el método indicado en method, de los constructos de la rejilla wimp

Para cada constructo Calcular P como producto escalar de los vectores (0.5sqrt(2),0.5sqrt(2) y (cin , cout) Calcular H como producto escalar de los vectores (-0.5sqrt(2),0.5sqrt(2)) y (cin , cout)

Estandarizar P y H dividiendo por max(conexiones(ci))

Crea matriz whp.mat con columnas P y H por constructo

Devolver matriz whp.mat


Nombre de la función: wimp_centr_eigvectors()

Objetivo de la función: Obtener una medida de centralidad basada en vectores propios. Para cada constructo, obtener la componente asociada del primer vector propio en la matriz de covarianzas del espacio P – H de la matriz de implicaciones

Parámetros de la función: • wimp (S3 wimp): WimpGrid de entrada para cuyos constructos calcularemos la medida de centralidad

Salida de la función: Matriz con los constructos asociados a wimp por filas, y una columna con el primer vector propio de la matriz de covarianzas, que estará asociada a la dirección de mayor variabilidad

Requisitos previos al desarrollo: Función eigen que calcule los vectores y valores propios de una matriz numérica

Comentarios: • Tomaremos como matriz de adyacencia, la matriz covarianzas de la matriz de implicaciones del objeto wimp

Pseudocódigo: Definir matrix de adyacencia, tomada como la matriz de covarianzas de la matriz de matriz de implicaciones del objeto wimp

Calcular los vectores propios de la matriz de adyacencia Extraer el vector propio principal (primer vector) Crea matriz ev.mat con columna del vector propio principal, teniendo el componente de cada constructo por filas

Devolver matriz ev.mat


Nombre de la función: wimp_centr_mahalanobis()

Objetivo de la función: Obtener una medida de centralidad de los constructos basada en la distancia de Mahalanobis en el espacio transformado de coordenadas P - H

Parámetros de la función: • wimp (S3 wimp): WimpGrid de entrada para cuyos constructos calcularemos la distancia de Mahalanobis

Salida de la función: Matriz con los constructos asociados a wimp por filas, y por columnas, sus datos asociados de coordenadas P, H y la distancia de Mahalanobis en este espacio vectorial

Requisitos previos al desarrollo: Función wimp_ph_matrix , que proporciona las coordenadas de los constructos en el espacio P-H

Comentarios:

Pseudocódigo:

Obtener la matriz de constructos con coordenadas P-H

Para la matriz de los constructos que contiene sus componentes P - H Calcular la matriz de covarianzas de la matriz Calcular el vector de medias de la matriz

Calcular la distancia de Mahalanobis, con centro el vector de medias, y la matriz de covarianzas calculada anteriormente

Crea matriz dm.mat con columna del vector propio principal, teniendo el componente de cada constructo por filas

Devolver matriz dm.mat

churtado-gh commented 8 months ago

Aparte, tenemos una serie de cuestiones, para desarrollar las funciones y proponer otras:

Si te parecen bien los puntos primordiales de las funciones, podemos:

Asanfe commented 8 months ago

En cuanto pueda os reviso las funciones que habéis planteado.

Respecto a las cuestiones que habéis planteado:

Asanfe commented 8 months ago

Hola @churtado-gh @Fgil77, Las funciones que planteáis me parecen perfectas, muy buen trabajo!!

Os dejo una serie de comentarios:

Un abrazo!