###############################################################################
######################## Berechnung Linkage Score ############################
###############################################################################


# Dieses Skript enthaelt die Berechnung des Linkage Scores innerhalb des 
# Survey-Datensatzes. Die Aufbereitung der Content-Kodierung befindet sich im 
# Dokument Content_Analysis_V4.R (dieses Dokument wird hier nachher eingelesen, 
# fuer die Auswertung werden also beide Skripte benoetigt 


#------------------------------------------------------------------------------#
#--------------------- 1. Daten Einlesen und Aufbereiten ----------------------# 
#------------------------------------------------------------------------------#

library(scales)
library(data.table)
library(lme4)
## Loading required package: Matrix
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:data.table':
## 
##     between, first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
setwd("/Users/lunafrauhammer/Library/CloudStorage/OneDrive-UniversitaetDuisburg-Essen/Promotion/Projekte/DICINT/AP6/Auswertung/Auswertung_V2")
# rm(list = ls()) 
# list.files()

dat <- readRDS("!!!DLINK_t1-t3.complete.imputed.aggregated.rds")
write.table(dat, file = "Linkage_aggregated.csv", sep = ";", col.names = NA)
# View(dat)
# str(dat)
# write.table(dat, file = "ExcelFile.csv", sep = ";", col.names = NA)

# Da der Datensatz sehr gross ist, behalte ich zunaechst nur die Variablen, die 
# ich auch brauche: 
Einstellungen <- grep("_scale", names(dat), value = TRUE) # 3 Themen * 3 ZP = 9
Einstellungen_new <- gsub('(.*_?)_','\\1\\.', Einstellungen) 
# einheitliche Benennung ist wichtig -> braucht man nachher fuer reshape
Dich <- grep("dich", names(dat), value = TRUE)
Dich_new <- gsub('(.*_?)_','\\1\\.', Dich)
Einstellungen_new <- c(Einstellungen_new, Dich_new)
Einstellungen <- c(Einstellungen, Dich)
EX <- grep("EX_", names(dat), value = TRUE) # Exposure Variablen
OC_perc <- grep("perc", names(dat), value = TRUE) # perceived Opinion Climate: 3 ZP * 3 Themen = 9
OC_perc_new <- gsub('(.*_?)_','\\1\\.', OC_perc)
FI <- grep("FI_", names(dat), value = TRUE) # Nutzung SM ja / nein: 3 SM
Cert <- grep("_cert_", names(dat), value = TRUE)
Cert_new <- gsub('(.*_?)_','\\1\\.', Cert)
Disc <- grep("disc", names(dat), value = TRUE)
Disc_new <- gsub('(.*_?)_','\\1\\.', Disc)
Tol <- grep("PG_", names(dat), value = TRUE)
Tol_new <- gsub('(.*_?)_','\\1\\.', Tol)

var <- c("PS_ID", Einstellungen, EX, OC_perc, FI, Cert, Disc, Tol) 

dat2 <- dat[, var]
dat3 <- data.frame(sapply(dat2, as.numeric))
setnames(dat3, OC_perc, OC_perc_new)
setnames(dat3, Einstellungen, Einstellungen_new)
setnames(dat3, Cert, Cert_new)
setnames(dat3, Disc, Disc_new)
setnames(dat3, Tol, Tol_new)

# colnames(dat3[, OC_perc]) <- OC_perc_new
# colnames(dat3[, which(names(dat3) %in% OC_perc)]) <- OC_perc_new
# dat3 ist der Datensatz, mit dem ich arbeiten werde. dat2 enthaelt die ausformulierten 
# Antwortalternativen anstatt der Zahlen. 



#------------------------------------------------------------------------------#
#---------------------- 2. Vorbereitung Linkage Score  ------------------------# 
#------------------------------------------------------------------------------#


# um den Linkage Score zu bilden brauchen wir die Variablen aus dem Content Script
source("ContentData/Content_Analysis_V4.R", chdir = TRUE)



#### NOs ausschliessen, die nicht genutzt werden ####
dat3 <- dat3[, !grepl("RT|JF|JW", names(dat3))] 
# jetzt sind nur noch SP, TS, WE, BI und NT uebrig

#### Twitter ausschliessen ####
dat3 <- dat3[, !grepl("TW", names(dat3))]

#### Datensatz mit allen Exposure Variablen aber ohne Indizes #### 
# (Indizes sind die Summen der einzelnen News Outlets pro Plattform. Die waren in 
# dem Datensatz schon enthalten, allerdings nicht fuer alle Plattformen, deshalb
# erzeuge ich die komplett nochmal aus den urspruenglichen Variablen)

# 3 ZP * 2 Plattformen * 5 NOs = 30 Variablen
EX <- grep("EX_", names(dat3), value = TRUE) # hier sind noch die Indizes drin, deshalb mehr
ind_nicht <- grep("ind", EX, value = TRUE) 
ind <- c(EX[!(EX %in% ind_nicht)], "PS_ID", OC_perc_new, Einstellungen_new, 
         Cert_new, Tol_new, Disc_new) 
dat_EX <- dat3[, ind]    

### SM-Exposure: neue Indizes erzeugen (Summe aller NOs pro SM Plattform) ####

FB <- grep("FB", names(dat_EX), value = TRUE)
FB_1 <- grep("T1", FB, value = TRUE)
dat_EX$FB_ind.T1 <- apply(dat_EX[, FB_1], 1, sum) 
FB_2 <- grep("T2", FB, value = TRUE)
dat_EX$FB_ind.T2 <- apply(dat_EX[, FB_2], 1, sum) 
FB_3 <- grep("T3", FB, value = TRUE)
dat_EX$FB_ind.T3 <- apply(dat_EX[, FB_3], 1, sum) 
#  Nutzung FB ueber die fuenf NOs pro Person

YT <- grep("YT", names(dat_EX), value = TRUE)
YT_1 <- grep("T1", YT, value = TRUE)
dat_EX$YT_ind.T1 <- apply(dat_EX[, YT_1], 1, sum) 
YT_2 <- grep("T2", YT, value = TRUE)
dat_EX$YT_ind.T2 <- apply(dat_EX[, YT_2], 1, sum) 
YT_3 <- grep("T3", YT, value = TRUE)
dat_EX$YT_ind.T3 <- apply(dat_EX[, YT_3], 1, sum) 
#  Nutzung YT ueber die fuenf NOs pro Person


# neuer Datensatz der nur die aufsummierte Nutzung pro Medium enthaelt 
ind <- grep("ind.", names(dat_EX), value = TRUE)
ind1 <- c(ind, "PS_ID", OC_perc_new, Einstellungen_new, 
          Cert_new, Tol_new, Disc_new)
dat_EX_SM <- dat_EX[, ind1]

#### Indizes sollen zwischen 0 und 1 liegen ####
dat_EX_SM[, ind] <- (dat_EX_SM[, ind] - 5) / (30 - 5) 
# 5 und 30, da die alten Index Werte zwischen diesen Werten (5 = 5 * 1 -> immer nie;
# 30 = 5 * 6 -> immer mehr als fuenfmal am Tag lagen)
# es wird jetzt 5 zu 0 -> (5-5) / 25 = 0 und 30 zu 1 -> (30 - 5) / 25 = 1 
 

################# Anteil positiv / negativ hinzufuegen #########################

An_CP0_SM[[1]][, 2][, 1]
# [[1]] = ZP1, [[2]] = ZP2, [[3]] = ZP3
# [, 2][1, ] = FB, [, 2][3, ] = YT
# [, 2][, 1] = negativ, [, 2][, 3] = positiv
# man muss die etwas komisch indizieren, das zwei meint einfach den "inneren" 
# dataframe

# ich moechte jetzt solche Variablen erzeugen: FB_valueCPPos_T1, TW_valueCPPos_T1, ...
thema <- c("CP", "IP", "RU")
AN_SM <- list(An_CP0_SM, An_IP0_SM, An_RU0_SM)
# hier indiziert man es so: AN_SM[[Topic]][[Wave]][, 2][Platform, Valence]

for(w in 1:3){ # waves
  for(t in 1:3){ # topics
    x <- AN_SM[[t]]
    dat_EX_SM[, paste("FB_value_", thema[t], "Pos.T", w, sep = "")] <- x[[w]][, 2][1, 3] # FB, pos
    dat_EX_SM[, paste("YT_value_", thema[t], "Pos.T", w, sep = "")] <- x[[w]][, 2][3, 3] # YT, pos
    dat_EX_SM[, paste("FB_value_", thema[t], "Neg.T", w, sep = "")] <- x[[w]][, 2][1, 1] # FB, neg
    dat_EX_SM[, paste("YT_value_", thema[t], "Neg.T", w, sep = "")] <- x[[w]][, 2][3, 1] # YT, neg
    # assign(paste("FB_value_", thema[t], "Pos_T", w, sep = ""), x[[w]][, 2][1, 3]) # FB, pos
    # assign(paste("YT_value_", thema[t], "Pos_T", w, sep = ""), x[[w]][, 2][3, 3]) # YT, pos
  }
}

var <- grep("T1|T2|T3", names(dat_EX_SM), value = TRUE)
dat_EX_SM_L <- reshape(dat_EX_SM, direction = "long", varying = var, timevar = "time", times = c("T1", "T2", "T3"), 
        sep = ".")
# dieser Datensatz ist jetzt im long Format also hat  extra Zeilen fuer die Zeitpunkte 1, 2 und 3



#------------------------------------------------------------------------------#
#------------------------ 3. Berechnung Linkage Score  ------------------------# 
#------------------------------------------------------------------------------#

############################### positiv ########################################

# 1.) einzelne Media Exposure mit value multiplizieren 

## FB ##
dat_EX_SM_L$FB_CP_pos <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_CPPos # Facebook Exposure * FB Content Value
dat_EX_SM_L$FB_IP_pos <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_IPPos
dat_EX_SM_L$FB_RU_pos <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_RUPos

## YT ##
dat_EX_SM_L$YT_CP_pos <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_CPPos
dat_EX_SM_L$YT_IP_pos <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_IPPos
dat_EX_SM_L$YT_RU_pos <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_RUPos

# 2.) einelne Media Values aufsummieren 

dat_EX_SM_L$Link_CP_pos <- dat_EX_SM_L$FB_CP_pos + dat_EX_SM_L$YT_CP_pos
dat_EX_SM_L$Link_IP_pos <- dat_EX_SM_L$FB_IP_pos + dat_EX_SM_L$YT_IP_pos
dat_EX_SM_L$Link_RU_pos <- dat_EX_SM_L$FB_RU_pos + dat_EX_SM_L$YT_RU_pos


############################### negativ ########################################

# 1.) einzelne Media Exposure mit value multiplizieren 

## FB ##
dat_EX_SM_L$FB_CP_neg <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_CPNeg
dat_EX_SM_L$FB_IP_neg <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_IPNeg
dat_EX_SM_L$FB_RU_neg <- dat_EX_SM_L$FB_ind * dat_EX_SM_L$FB_value_RUNeg

## YT ##
dat_EX_SM_L$YT_CP_neg <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_CPNeg
dat_EX_SM_L$YT_IP_neg <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_IPNeg
dat_EX_SM_L$YT_RU_neg <- dat_EX_SM_L$YT_ind * dat_EX_SM_L$YT_value_RUNeg

# 2.) einelne Media Values aufsummieren 

dat_EX_SM_L$Link_CP_neg <- dat_EX_SM_L$FB_CP_neg + dat_EX_SM_L$YT_CP_neg
dat_EX_SM_L$Link_IP_neg <- dat_EX_SM_L$FB_IP_neg + dat_EX_SM_L$YT_IP_neg
dat_EX_SM_L$Link_RU_neg <- dat_EX_SM_L$FB_RU_neg + dat_EX_SM_L$YT_RU_neg


# Der Datensatz dat_EX_SM_L enthaelt jetzt die positiven und negativen Linkage
# Scores in den Variablen Link_XX_pos bzw. Link_XX_neg


# Korrelation zwischen negativen und positiven Linkage Score ist relativ hoch: 

plot(dat_EX_SM_L$Link_CP_pos ~ dat_EX_SM_L$Link_CP_neg, col = alpha("hotpink", 0.5), 
     pch = 18, ylab = "positiv", xlab = "negativ", ylim = c(0, 0.21), xlim = c(0,1))

points(dat_EX_SM_L$Link_IP_pos ~ dat_EX_SM_L$Link_IP_neg, col = alpha("black", 0.5), 
     pch = 17)

points(dat_EX_SM_L$Link_RU_pos ~ dat_EX_SM_L$Link_RU_neg, col = alpha("lightblue3", 0.5), 
       pch = 20)
legend("bottomright", col = c("black", "hotpink", "lightblue3"), legend = 
         c("Impfprivilegien", "Coronapolitik", "Russland"), bty = "n", 
       pch = c(17, 18, 20))
text(0.55, 0.2, labels = paste("Korrelation IP = ", round(cor(dat_EX_SM_L$Link_IP_neg, 
                                                               dat_EX_SM_L$Link_IP_pos), digits = 3)), cex = 0.8, pos = 4)
text(0.55, 0.19, labels = paste("Korrelation CP = ", round(cor(dat_EX_SM_L$Link_CP_neg, 
                                                           dat_EX_SM_L$Link_CP_pos), digits = 3)), cex = 0.8, col = "hotpink", pos = 4)
text(0.55, 0.18, labels = paste("Korrelation RU = ", round(cor(dat_EX_SM_L$Link_RU_neg, 
                                                               dat_EX_SM_L$Link_RU_pos), digits = 3)), cex = 0.8, col = "lightblue3", pos = 4)