[Traminer-users] within dyad distances

Reynolds, Jeremy E reyno113 at purdue.edu
Fri Feb 7 19:05:01 CET 2020


Dear Traminer Users,

I would like to compute distances between sequences that belong to the same person for every person in my data.
The code below seems to work: it calculates the distances between the expected and actual work schedule for each of the 10 people in the data.

My code, however, is terribly inefficient.  For instance, it calculates the entire pairwise distance matrix and then overwrites most of it with NA.
This leaves me with two questions:


1)      Does Traminer have a way to calculate just the distances between sequences that below to the same person?

 (e.g., with clever use of the refseq option in the seqdist command or with the seqdistmc command for multi-channel sequence analysis)



2)      Is there a way to extract the elements just below the diagonal without overwriting all the other values with NA?

Thanks,

Jeremy


mymat <- rbind(
    c(1,1,0,0,1,1,1,1,1,0,0,0),c(1,2,0,0,1,1,1,1,1,1,0,0),
    c(2,1,0,0,1,1,1,1,1,0,0,0),c(2,2,0,0,1,1,1,1,1,1,1,0),
    c(3,1,0,0,1,1,1,1,1,0,0,0),c(3,2,0,0,1,1,1,1,1,1,1,1),
    c(4,1,0,0,1,1,1,1,1,0,0,0),c(4,2,0,1,1,1,1,1,1,0,0,0),
    c(5,1,0,0,1,1,1,1,1,0,0,0),c(5,2,1,1,1,1,1,1,1,0,0,0),
    c(6,1,0,0,1,1,1,1,1,0,0,0),c(6,2,0,0,0,1,1,1,1,0,0,0),
    c(7,1,0,0,1,1,1,1,1,0,0,0),c(7,2,0,0,0,0,1,1,1,0,0,0),
    c(8,1,0,0,1,1,1,1,1,0,0,0),c(8,2,0,0,0,0,0,1,1,0,0,0),
    c(9,1,0,0,1,1,1,1,1,0,0,0),c(9,2,0,0,0,0,0,0,1,0,0,0),
    c(10,1,0,0,1,1,1,1,1,0,0,0),c(10,2,0,0,0,0,0,0,0,0,0,0)
    )

colnames(mymat) <- c("ID", "sched", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10")
mymat <- as.data.frame(mymat)
mymat$sched <- factor(mymat$sched,levels = c(1,2), labels = c("Expected", "Actual"))

library(TraMineR)

# make sequence object
labels <- c("working", "not working")
scode <- c("W", "N")
seq <- seqdef(mymat, 3:12, states = scode, labels = labels)

# sequence index plot
seqIplot(seq, with.legend = T, main = "Expected and Actual Work Schedules of 5 People",border = NA)

# calculate dynamic hamming distances for every possible pair
distmat <- seqdist(seq, method = "DHD", indel = 1, sm = NULL)

# extract the elements just below the main diagonal
low <- 1
high <- 1
delta <- row(distmat) - col(distmat)
distmat[delta < low | delta > high] <- NA
distvec <- na.omit(as.data.frame(distmat[delta >= low | delta <= high]))
#repeat the last entry
distvec <- rbind(distvec,tail(distvec, n=1))

#attach the off diagonal to the data frame
colnames(distvec) <- "dist"
mymat <- cbind(mymat,distvec)


Dr. Jeremy Reynolds
Professor
307 Stone Hall
Department of Sociology
700 W. State Street
Purdue University
West Lafayette, IN 47907
Phone: (765) 496-3348
https://cla.purdue.edu/directory/profiles/jeremy-reynolds.html
Pronouns: he/him/his

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/traminer-users/attachments/20200207/43d3f8cb/attachment.html>


More information about the Traminer-users mailing list