###############################################################################
######################## 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)