Hecho con gusto por Dra. CarlaC. Pérez-Hernández
LABORATORIO - RELACIONAMIENTO “CASO HIPOTÉTICO”
Objetivo: Estimar el relacionamiento (relatedness, proximidad, métrica de distancia entre productos)
En este ejercicio vamos a:
Cargar nuestra matriz hipotética de datos
Calcular co ocurrencias entre personas y productos
Estimar el relacionamiento, teniendo como input las co ocurrencias
Graficar
————————-LABORATORIO NÚMERO 8——————————
¿Cómo se mide la proximidad (relatedness) para crear el espacio producto?
Material: Balland, P.A. (2017) Economic Geography in R: Introduction to the EconGeo Package, Papers in Evolutionary Economic Geography, 17 (09): 1-75. Para instalar: https://www.paballand.com/install-r
INSTALACIONES install.packages (“igraph”) install.packages(“visNetwork”) install.packages(“htmlwidgets”) install.packages(“igraph”) install.packages(“reforma”) install.packages(“Matrix”) install.packages(“RSiena”) install. paquetes(“networkD3”) install.packages(“curl”) install.packages(“devtools”) biblioteca(devtools) devtools::install_github(“PABalland/EconGeo”, force = T)
Ya que están instaladas, se corre el comando library
library(EconGeo)
##
## Please cite EconGeo in publications as:
## Balland, P.A. (2017) Economic Geography in R: Introduction to the EconGeo Package, Papers in Evolutionary Economic Geography, 17 (09): 1-75
Importamos una matriz
Archivo en cvs, separados por comas. La fila inicial tiene los títulos T (Titles). La primera columna tendrá el nombre de las variables. #Se selecciona desde la M hasta los últimos dos paréntesis después del 1.
M = as.matrix(
read.csv("https://raw.githubusercontent.com/PABalland/ON/master/amz.csv" ,
sep = ",",
header = T,
row.names = 1))
Para ver la matriz, ejecutar M
M
## Tie Book Surfboard Short Water
## Pierre 0 0 1 1 1
## Ron 1 1 0 0 1
## Andrea 1 1 0 0 1
## David 0 0 1 1 1
## Cesar 1 1 0 0 1
## Paula 1 1 1 1 1
En la consola (ventana de abajo) se puede ver la matriz creada. La primera columna se muestran los nombres de los participantes. En los renglones se tienen los productos.
Cálculo de co-ocurrencias (cuántos empates de compra entre participantes). Co-ocurrencia entre personas/paises/estados.
co.occurrence (M)
## Pierre Ron Andrea David Cesar Paula
## Pierre 0 1 1 3 1 3
## Ron 1 0 3 1 3 3
## Andrea 1 3 0 1 3 3
## David 3 1 1 0 1 3
## Cesar 1 3 3 1 0 3
## Paula 3 3 3 3 3 0
Cálculo de co-ocurrencias de la matriz transpuesta para enfocarse en productos. Co-ocurrencia entre productos t es transpuesta.
c = co.occurrence (t(M))
Para visualizar c
c
## Tie Book Surfboard Short Water
## Tie 0 4 1 1 4
## Book 4 0 1 1 4
## Surfboard 1 1 0 3 3
## Short 1 1 3 0 3
## Water 4 4 3 3 0
Estima el relacionamiento o proximidad pero normalizado, para asegurar que el número de co ocurrencias que observamos. Es mayor al número de co ocurrencias probables (probabilidad condicional)
r = relatedness (c)
Para ver el resultado, corremos r. Tie y Surfboard puede que no esten tan relacionados, abajo de 1 no es relacionado mientras que mayor a 1 si es relacionado
r
## Tie Book Surfboard Short Water
## Tie 0.0000000 1.6000000 0.5121951 0.5121951 1.082707
## Book 1.6000000 0.0000000 0.5121951 0.5121951 1.082707
## Surfboard 0.5121951 0.5121951 0.0000000 1.9687500 1.038462
## Short 0.5121951 0.5121951 1.9687500 0.0000000 1.038462
## Water 1.0827068 1.0827068 1.0384615 1.0384615 0.000000
Para poder apreciar el algoritmo de dicho comando, corremos relatedness
relatedness
## function (mat, method = "prob")
## {
## method <- tolower(method)
## Cij = mat
## diag(Cij) <- 0
## Si <- colSums(Cij)
## Sj <- colSums(Cij)
## Si <- matrix(Si, nrow = length(Si), ncol = length(Si), byrow = TRUE)
## Sj <- matrix(Sj, nrow = length(Sj), ncol = length(Sj), byrow = FALSE)
## T <- (sum(Cij))
## if (method == "prob") {
## SM <- Cij/(((Si/T) * (Sj/(T - Si)) + (Sj/T) * (Si/(T -
## Sj))) * (T/2))
## SM[is.na(SM)] <- 0
## diag(SM) <- 0
## return(SM)
## }
## else if (method == "association") {
## SA <- (Cij/T)/((Si/T) * (Sj/T))
## SA[is.na(SA)] <- 0
## diag(SA) <- 0
## return(SA)
## }
## else if (method == "cosine") {
## SC <- (Cij)/sqrt(Si * Sj)
## SC[is.na(SC)] <- 0
## diag(SC) <- 0
## return(SC)
## }
## else if (method == "jaccard") {
## SJ <- (Cij)/(Si + Sj - Cij)
## SJ[is.na(SJ)] <- 0
## diag(SJ) <- 0
## return(SJ)
## }
## else {
## stop("Unknown value for argument 'method'")
## }
## }
## <bytecode: 0x000002631ab329f0>
## <environment: namespace:EconGeo>
Regla para ejecutar el relacionamiento.
Si es menor a uno, le corresponde cero. Lo que implica que no haya arista que se ligue al producto
r[r<1] = 0
Si es mayor a uno, le corresponde uno. Lo que implica que si haya arista que se ligue al producto
r[r>1] = 1
Para graficar el espacio-producto, se ejecuta la siguiente paquetería:
library (igraph)
##
## Attaching package: 'igraph'
## The following object is masked from 'package:EconGeo':
##
## diversity
## The following objects are masked from 'package:stats':
##
## decompose, spectrum
## The following object is masked from 'package:base':
##
## union
Corremos el comando que tiene como input el relacionamiento calculado anteriormente con la regla binaria de manera no dirigida.
g1 = graph_from_adjacency_matrix (r, mode = "undirected")
Ahora graficamos. Se puede apreciar en el cuadrante de visualizaciones (plot).
plot(g1)