library(foreign) # Paket zum Einlesen von SPSS Dateien
library(tm) # Textmining-Paket zum Bearbeiten der Variablen-Label

Einlesen der Datensätze

ALLBUS19802016compact <- read.spss("ZA4587_v1-0-0.sav", to.data.frame = TRUE)
ALLBUS2018compact <- read.spss("ZA5271_v1-0-0.sav", use.value.labels=TRUE, to.data.frame = TRUE)

Das Einlesen der Daten erzeugt viele Warnungen, da die Faktor-Level (also die Bezeichnung der einzelnen Ausprägungen einer Variablen) in der spss-Datei Duplikate erhalten. Dies muss bei der weiteren Analyse beachtet werden.

Da für einige Gewichtungsfaktoren die Label und nicht die Faktoren selbst eingelesen werden, müssen diese separat eingelesen werden.

ALLBUS2018compact[c("wghtpew", "wghthew")] <- read.spss("ZA5271_v1-0-0.sav", use.value.labels=FALSE, to.data.frame = TRUE)[c("wghtpew", "wghthew")]
ALLBUS19802016compact[c("wghtpt","wghtpew","wghtptew","wghtht","wghthew","wghthtew")] <- read.spss("ZA4587_v1-0-0.sav", use.value.labels=FALSE, to.data.frame = TRUE)[c("wghtpt","wghtpew","wghtptew","wghtht","wghthew","wghthtew")]

Die Variablen-Label enthalten überflüssige Leerzeichen, die für eine bessere Lesbarkeit entfernt werden.

attributes(ALLBUS19802016compact)$variable.labels <- trimws(attributes(ALLBUS19802016compact)$variable.labels)
attributes(ALLBUS2018compact)$variable.labels <- trimws(attributes(ALLBUS2018compact)$variable.labels)

Datenexport

Export der Daten im csv-Format:

Export der Variablennamen

write.csv(attributes(ALLBUS19802016compact)$variable.labels, fileEncoding = "UTF-8", "ALLBUS19802016compact_labels.csv")
write.csv(attributes(ALLBUS2018compact)$variable.labels, fileEncoding = "UTF-8", "ALLBUS2018compact_labels.csv")

Export der Daten

write.csv(rbind(attributes(ALLBUS19802016compact)$variable.labels, as.matrix(ALLBUS19802016compact)), fileEncoding = "UTF-8", "ALLBUS19802016compact.csv", row.names = FALSE)
write.csv(rbind(attributes(ALLBUS2018compact)$variable.labels, as.matrix(ALLBUS2018compact)), fileEncoding = "UTF-8", "ALLBUS2018compact.csv", row.names = FALSE)

Beispielauswertungen

Da der Datensatz keine einfache Zufallsstichprobe darstellt, können in der Regel keine einfachen Mittelwerte gebildet werden. Insbesondere ist Ostdeutschland in der Stichprobe überrepäsentiert. Auch das Erhebungsverfahren hat sich im Laufe der Jahre geändert. Eine ausführliche Beschreibung findet sich im Codebuch des Datensatzes.

Auswertung Ost/West getrennt und gemeinsam pro Kopf

Aufteilen der Zielvariable nach West und Ost

demokratie <- split(ALLBUS2018compact$ps03, ALLBUS2018compact$eastwest)

Zusammenfassen von schwach besetzten Altersklassen, Aufteilen nach West und Ost

alter <- ALLBUS2018compact$agec
levels(alter) <- c("18-29 JAHRE", "30-44 JAHRE", "45-59 JAHRE", "60-74 JAHRE", "UEBER 75 JAHRE", "UEBER 75 JAHRE") 
alterlevels <- levels(alter)
alter <- split(alter, ALLBUS2018compact$eastwest)

Bilden der Mittelwerte nach Altergruppen getrennt nach West- und Ostdeutschland

demokratiealter <- mapply(function(x,y)split(x,y), demokratie, alter)
altebl <- sapply(demokratiealter[1:5], function(x)mean(as.numeric(x), na.rm = TRUE))
neuebl <- sapply(demokratiealter[6:10], function(x)mean(as.numeric(x), na.rm = TRUE))

Erzeugen der Grafik

par(las=2, mar=c(10,12,3,1))
plot(NULL, xlim=c(1,5), ylim = c(1,6), xaxt = "n", yaxt = "n", xlab="", ylab="", main="ZUFRIEDEN MIT DEMOKRATIE IN DER BRD?
")
abline(h=1:6, lty=3)
axis(1, at=1:5, labels = alterlevels)
axis(2, at=1:6, labels = rev(levels(ALLBUS2018compact$ps03)))
points(1:5, 7-altebl, col="red", pch = 8)
points(1:5, 7-neuebl, col="blue", pch = 16)
legend(x=1, y=2.5, pch=c(8,16), col=c("red", "blue"), legend=c("Ostdeutschland", "Westdeutschland"))

Gesamtdeutschland

Für Gesamtdeutschland ist eine Gewichtung der Variablen notwendig. Das notwendige Gewicht ist in der Variable wghtpew enthalten.

par(las=2, mar=c(10,12,3,1))
plot(NULL, xlim=c(1,5), ylim = c(1,6), xaxt = "n", yaxt = "n", xlab="", ylab="", main="ZUFRIEDEN MIT DEMOKRATIE IN DER BRD?
")
abline(h=1:6, lty=3)
axis(1, at=1:5, labels = alterlevels)
axis(2, at=1:6, labels = rev(levels(ALLBUS2018compact$ps03)))
points(1:5, 7-altebl, col="red", pch = 8)
points(1:5, 7-neuebl, col="blue", pch = 16)

# Berechnung der Maßzahlen für Gesamtdeutschland
demokratie <- as.numeric(ALLBUS2018compact$ps03) * ALLBUS2018compact$wghtpew
alter <- ALLBUS2018compact$agec
levels(alter) <- c("18-29 JAHRE", "30-44 JAHRE", "45-59 JAHRE", "60-74 JAHRE", "UEBER 75 JAHRE", "UEBER 75 JAHRE")
demokratie <- split(demokratie, alter)
gesamt <- sapply(demokratie, function(x)mean(as.numeric(x), na.rm = TRUE))
points(1:5, 7-gesamt, col="black", pch = 15)
legend(x=1, y=3.5, pch=c(8,16,15), col=c("red", "blue", "black"), legend=c("Ostdeutschland", "Westdeutschland", "Gesamtdeutschland"))

Auswertung pro Kopf über die Zeit

Auch hier muss die Zielvariable für die gesamtdeutsche Berechnung mit wghtpew gewichtet werden

postmat <- ALLBUS19802016compact$ingle=="POSTMATERIALISTEN"
postmat <- split(postmat, ALLBUS19802016compact$eastwest)
year <- split(ALLBUS19802016compact$year, ALLBUS19802016compact$eastwest)
postmateast <- split(postmat[[1]], year[[1]])
postmatwest <- split(postmat[[2]], year[[2]])
postmateast <- sapply(postmateast, mean, na.rm=TRUE)
postmatwest <- sapply(postmatwest, mean, na.rm=TRUE)
postmatyear <- split((ALLBUS19802016compact$ingle=="POSTMATERIALISTEN") * ALLBUS19802016compact$wghtpew, ALLBUS19802016compact$year)
postmatyear <- sapply(postmatyear, mean, na.rm=TRUE)
par(las=2) #, mar=c(10,12,5,1)
plot(NULL, xlim=c(1980,2018), ylim = c(0,1), xaxt = "n", yaxt = "n", xlab="", ylab="", main="Anteil an Postmaterialisten")
abline(h=seq(0, 1, .1), lty=3)
axis(1, at=c(seq(1980,2018,2), 1991))
axis(2, at=seq(0, 1, .1))
points(as.numeric(names(postmateast)), postmateast, col="red", pch = 8, type = "b")
points(as.numeric(names(postmatwest)), postmatwest, col="blue", pch = 16, type = "b")
points(as.numeric(names(postmatyear)), postmatyear, col="black", pch = 15, type = "b")
legend(x=1980, y=1, pch=c(8,16,15), col=c("red", "blue", "black"), legend=c("Ostdeutschland", "Westdeutschland", "Gesamtdeutschland"))

Auswertung Haushaltsabhängigie Variablen auf Personenebene

Bei personenbezogenen Variablen, die mit der Haushaltsgröße korrelieren, wie zum Beipiel der Familienstand, muss für einige Jahre das Gewicht wghtpt verwendet werden. So wird die Auswahlwahrscheinlichkeit für die Jahre korrigiert, in denen nicht erst Haushalte ausgewählt wurden. In Jahren, in denen das Gewicht nicht verwendet werden muss, ist die Variable 1 und hat damit keinen Effekt.

verheiratet <- (ALLBUS19802016compact$mstat=="VERHEIRAT.ZUSAM.LEB." | ALLBUS19802016compact$mstat=="VERH.GETRENNT LEBEND") * ALLBUS19802016compact$wghtpt
verheiratet <- split(verheiratet, ALLBUS19802016compact$eastwest)
year <- split(ALLBUS19802016compact$year, ALLBUS19802016compact$eastwest)
verheirateteast <- split(verheiratet[[1]], year[[1]])
verheiratetwest <- split(verheiratet[[2]], year[[2]])
verheirateteast <- sapply(verheirateteast, mean, na.rm=TRUE)
verheiratetwest <- sapply(verheiratetwest, mean, na.rm=TRUE)
verheiratetyear <- split((ALLBUS19802016compact$mstat=="VERHEIRAT.ZUSAM.LEB." | 
                          ALLBUS19802016compact$mstat=="VERH.GETRENNT LEBEND") * 
                          ALLBUS19802016compact$wghtptew, ALLBUS19802016compact$year)
verheiratetyear <- sapply(verheiratetyear, mean, na.rm=TRUE)
par(las=2) #, mar=c(10,12,5,1)
plot(NULL, xlim=c(1980,2018), ylim = c(0,1), xaxt = "n", yaxt = "n", xlab="", ylab="", main="Anteil an Verheirateten")
abline(h=seq(0, 1, .1), lty=3)
axis(1, at=c(seq(1980,2018,2), 1991))
axis(2, at=seq(0, 1, .1))
points(as.numeric(names(verheirateteast)), verheirateteast, col="red", pch = 8, type = "b")
points(as.numeric(names(verheiratetwest)), verheiratetwest, col="blue", pch = 16, type = "b")
points(as.numeric(names(verheiratetyear)), verheiratetyear, col="black", pch = 15, type = "b")
legend(x=1980, y=0.3, pch=c(8,16,15), col=c("red", "blue", "black"), legend=c("Ostdeutschland", "Westdeutschland", "Gesamtdeutschland"))

Für Aussagen, die sich nicht auf Personen sondern Haushalte beziehen, müssen weitere Gewichte verwendet werden. Weitere Informationen hierzu befinden sich in der Dokumentation des Datensatzes.