Dr Glenna Nightingale 

Glenna Nightingale née Evans

This is a hobby page which contains basic code to create a linked UKHLS dataset.  You will need to already have downloaded the UKHLS waves in tab format.  


library(Hmisc)
library(MASS)
library(descr)
library(TraMineR)
library(RColorBrewer)

#-------------------------------
#buidling a linked UKHLS dataset
#with 12 variables
#-------------------------------

ukhls <- data.frame(matrix(ncol = 12))
names(ukhls) = c("pidp","age","sex","gor","nssec","ed",
                     "mar","ethnic","move","hid","htype","waveno")
for(i in 1:6){
wave_number = paste(letters[i],"indresp.tab",sep="_")
wave = (read.csv(wave_number,header =TRUE,fill=TRUE,sep="\t"))
age = paste(letters[i],"age_cr",sep="_")
sex = paste(letters[i],"sex",sep="_")
gor = paste(letters[i],"gor_dv",sep="_")
nssec = paste(letters[i],"jbnssec_dv",sep="_")
ed = paste(letters[i],"qfhigh",sep="_")
mar = paste(letters[i],"marstat",sep="_")
ethnic = paste(letters[i],"racel",sep="_")
move = paste(letters[i],"mvyr",sep="_")
hid = paste(letters[i],"hidp",sep="_")
htype = paste(letters[i],"hhtype_dv",sep="_")
wave_data = wave[c("pidp",age,sex,gor,nssec,ed,mar,ethnic,move,hid,htype)]
wavenumber = 18+i
wave_data$waveno = rep(wavenumber,length(wave_data[,1]))
names(wave_data) = c("pidp","age","sex","gor","nssec","ed",
                  "mar","ethnic","move","hid","htype","waveno")

ukhls = rbind(ukhls,wave_data)
}
ukhls = ukhls[-1,]
ukhls = ukhls[ukhls$mar>0,]
ukhls$mar = as.factor(ukhls$mar)
ukhls$waveno = as.factor(ukhls$waveno)

#-------------------
# Sample summaries
#-------------------
# 1.   sample crosstabs
explore_partnerships = CrossTable(ukhls$mar,ukhls$waveno)$prop.col
# sample export to Excel .csv
write.csv(explore_partnerships,"explore.csv")
# 2.  sample plot: marital status levels per UKHLS wave 
ggplot(data = ukhls)+
  geom_bar(mapping = aes(x=waveno,fill=mar),
position="dodge")

#3.  creating sequences based on id and marital status
# levels((ukhls$mar)) <- c("single,nvr marr/civ p",
#                                "married","civ part","sep leg marr",
#                                "div", "wid","sep civ part", "fmer civ part",
#                                "surv civ part")
ukhls2<- dcast(ukhls,pidp~waveno,value.var="mar")
partner_seq = ukhls2[complete.cases(ukhls2),]
# 4.  plotting sequences
ps = as.matrix(partner_seq)
ps = unique(ps)
colnames(ps)= c("pid","2009","2010","2011","2012","2013","2015")
lifealphabet = levels(as.factor(ps[,c(2:7)]))                       
lifelabels = levels(as.factor(ps[,c(2:7)]))                               
lifecodes = levels(as.factor(ps[,c(2:7)]))    
lifeseq = seqdef(ps[,c(2:7)    ], alphabet=lifealphabet,states = lifecodes, labels = lifelabels)


color = grDevices::colors()[grep('gr(a|e)y', grDevices::colors(), invert = T)]                                                                             
seqcol=sample(color, 9)
seqIplot(lifeseq,  sortv = "from.start", cex.lab=1,cex.plot=1.5,cex.legend=0.6,
         cpal=seqcol,withlegend=TRUE)