Estoy tratando de construir (grafo) de la red social basada en la co-ocurrencia de los individuos. Algoritmo de Clustering se aplicó más tarde en esta red para encontrar algunos de los distintos subgrupos. Problema es que estudió las especies animales tiene muy corta longevidad (o más bien muy alta mortalidad debido a los depredadores). Ello hace que no todas las relaciones en mi red puede haber existido al mismo tiempo. Si nos fijamos en el diagrama de abajo, el "rojo" los individuos son casi extinto después de 3-4 años*, pero tienen el "más largo" tiempo a "conocer"a otras personas, mientras que el "blue" los individuos tienen sólo dos años para "satisfacer" a los demás.
En teoría puedo asumir que cada individuo tiene longevidad espera menos de 10 años. Por lo tanto, no la captura de la "roja" de 5 o 6 años después de la marcación no necesariamente significa que está muerto.
Cómo incluir este efecto del tiempo en la red social?
Preguntas específicas quiero contestar: Primera pregunta: Se observan las conexiones sociales distintas de una de las conexiones se explica únicamente por el espacio compartido de uso? es decir, la forma de probar si las asociaciones son aleatorios o preferido?
Si la respuesta a la primera pregunta será que las asociaciones entre individuos NO aleatoria, entonces tengo un segundo qeustion...
¿La estructura social se correlaciona con la relación genética? es decir, están estrechamente relacionados con los individuos más a menudo juntos? (Los perfiles de ADN de todos a particulares son bolow)
Aquí he creado algunos datos estructuralmente similar a la de mi base de datos:
data <- data.frame(obs_date = c("C1","C2","C3","C4","C5","C6","C1","C2",
"C3","C4","C1","C2","C3","C1","C2","C3",
"C4","C5","C6","C7","C1","C3","C4","C5",
"C6","C7","C8","C3","C4","C5","C6","C7",
"C3","C4","C5","C6","C3","C4","C5","C3",
"C4","C5","C6","C5","C6","C7","C8","C5",
"C5","C6","C7","C8","C5","C6","C7","C7",
"C7","C8","C7","C8","C7","C8","C7","C8"),
ind_id = rep(LETTERS[1:20], times = c(6,4,3,7,1,6,5,4,
3,2,2,4,1,4,3,1,2,2,2,2)),
obs = rep(c("seen","not_seen","seen","not_seen","seen",
"not_seen","seen","not_seen","seen"),
times = c(3,1,4,1,9,1,9,3,33)))
Aquí he añadido la estructura genética. Los datos son completamente inventadas, sino que debe reflejar la estrecha relación genética entre las mismas collor de los individuos. Adicionalmente , "violeta" las personas son descendientes de "azul", "azul" son descendientes de "verde", "verde" son descendientes de la "roja".
gen.raw <- matrix(c("a","g","g","g","c","g","a","a","g","g","g","g","t","c","t","c","t","t","a","a","t","t","a","a",
"a","g","g","g","c","g","a","a","g","g","g","g","c","c","t","c","t","t","a","a","t","c","a","a",
"a","g","g","g","c","g","g","a","g","g","g","g","c","c","t","t","c","t","a","a","t","c","a","a",
"a","g","t","t","t","g","g","a","g","g","g","g","c","c","t","t","c","t","a","a","a","c","a","a",
"a","g","t","t","t","g","g","a","g","g","g","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","g","a","g","g","g","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","g","g","g","g","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","a","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","t","t","g","a","c","g","t","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","c","t","g","a","c","g","g","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","c","t","g","a","c","g","g","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","c","t","g","a","c","g","g","c","g","c","c","t","t","c","t","t","a","t","c","a","a",
"a","g","t","c","t","g","a","c","g","c","c","g","t","c","t","t","c","t","t","a","t","c","a","a"),
byrow = TRUE, ncol = 24)
rownames(gen.raw) <- LETTERS[1:20]
Ok, las fuentes de datos están dados anteriormente. Ahora voy a crear dos matrices de distancia. La primera es la asociación de la matriz derivada de la co-ocurrencia de los datos representados por O-índice SP. Observó Gallinero-Compartir Proporción se calcula para cada par de individuos por dividir el número de días en que dos personas se encuentran juntos por el número de todas las posibles días de poder estar juntos (solapamiento entre la primera y la última recordngs tanto de los individuos).
# matrix of days roosting together
EG <- expand.grid(unique(data$ind_id), unique(data$ind_id))
data_seen <- subset(data, obs == "seen")
my.length.dt <- numeric(nrow(EG))
for (i in 1:nrow(EG)) {
my.length.dt[i] <- length(intersect(as.vector(data_seen$obs_date[data_seen$ind_id == EG[i, 1]]),
as.vector(data_seen$obs_date[data_seen$ind_id == EG[i, 2]])))
days.together <- matrix(my.length.dt, byrow = TRUE, ncol = length(unique(data$ind_id)))
colnames(days.together) <- rownames(days.together) <- unique(data$ind_id)
}
days.together
# matrix of all possible potentional roosting days
EG <- expand.grid(unique(data$ind_id), unique(data$ind_id))
my.length.rdp <- numeric(nrow(EG))
for (i in 1:nrow(EG)) {
my.length.rdp[i] <- length(intersect(as.vector(data$obs_date[data$ind_id == EG[i, 1]]),
as.vector(data$obs_date[data$ind_id == EG[i, 2]])))
roosting_days_possible <- matrix(my.length.rdp, byrow = TRUE, ncol = length(unique(data$ind_id)))
colnames(roosting_days_possible) <- rownames(roosting_days_possible) <- unique(data$ind_id)
}
roosting_days_possible
# OBSERVED ROOST-SHARING PROPORTION
OSP <- days.together/roosting_days_possible
OSP[ is.nan(OSP) ] <- 0
diag(OSP) <- 0
# So here is association matrix derived from co-occurence data
round(OSP,2)
# social distance matrix
soc_dist <- as.dist(OSP)
El próximo paso es tomar las secuencias de ADN y hacer que la relación genética de la matriz
# creating matrix of relatedness
library(ape)
gen.str <- as.DNAbin(gen.raw)
my.gen.dist <- dist.dna(gen.str)
fit <- hclust(my.gen.dist, method="ward")
plot(fit) # display dendogram
Por último, aquí os comparar la distancia social con la distancia genética por la Repisa de la chimenea de la prueba.
library(ade4)
mantel.rtest(soc_dist, my.gen.dist, nrepet = 9999)
¿Su resultado (p > 0.05) significa que no hay correlación entre lo social y de la estructura genética?
Es esta la solución más adecuada para responder a mi pregunta? Alguna idea?
También he encontrado que para la estructura social podría ser mejor este tipo de gráfico en lugar de dendrograma. Buena para la búsqueda de distinto grupo social.
# Show social structure
library(igraph)
g <- graph.adjacency(OSP, weighted=TRUE, mode ="undirected")
g <- simplify(g)
# set labels and degrees of vertices
V(g)$label <- V(g)$name
V(g)$degree <- degree(g)
wc <- walktrap.community(g)
plot(wc, g)