# Author: Joram Soch, OvGU Magdeburg # E-Mail: joram.soch@ovgu.de # Date : 2026-09-08, 10:20 ### (2) R und VS Code # Salaries.csv # Programmieraufgabe.r ### (6) Datenmanagement # Daten einlesen filename = 'Salaries.csv' # Dateiname D1 = read.csv(filename) # Dataframe n = nrow(D1) # Anzahl Datenpunkte ### (5) Listen und Dataframes # Daten reduzieren D2 = D1[,c("salary","yrs.since.phd", # Variablen extrahieren "yrs.service")] # D2 = data.frame(D1$salary, D1$yrs.since.phd, # alternative Lösung # D1$yrs.service) # D2 = D1[,c(6,3,4)] # alternative Lösung # Daten ausgeben print(D2[1:10,]) # erste 10 Zeilen # head(D2, n=10) # alternative Lösung ### (8) Berechnung von Deskriptivstatistiken # Statistiken berechnen library(dplyr) # R-Paket laden D2_var = rbind( # Kombination von Zeilen summarise(D2, across(everything(), mean)), # Stichprobenmittel summarise(D2, across(everything(), var)), # Stichprobenvarianz summarise(D2, across(everything(), sd))) %>% # Stichprobenstandardabweichung as.data.frame() # Konvertierung in Dataframe # Statistiken ausgeben rownames(D2_var) = c("Mean", "Var", "SD") # Zeilen benennen print(D2_var) # Ergebnisausgabe ### (9) Häufigkeitsverteilungen und Verteilungsfunktionen # Variable "salary" y = D1$salary # Dataframe-Variable breaks = seq(50000, 250000, 10000) # Klassengrenzen # Histogramm erzeugen hist(y, # Histogramm breaks = breaks, # Klassengrenzen xlim = c(min(breaks), max(breaks)), # x-Achsengrenzen ylim = c(0, 80), # y-Achsengrenzen xlab = "Jahresgehalt [$]", # x-Achsenbezeichnung ylab = "Häufigkeit", # y-Achsenbezeichnung main = sprintf("Jahresgehalt, k = %d", # Abbildungstitel length(breaks))) # Histogramm abspeichern dev.copy2pdf( # PDF-Speicherung file = "Histogramm_1.pdf", # Dateiname width = 7, # Breite height = 4) # Höhe # Variable "Visits" y = D1$yrs.since.phd # Dataframe-Variable breaks = seq(0, 65, 5) - 2.5 # Klassengrenzen -2.5,+2.5,...,57.5,62.5 # = Klassenzentren 0,5,...,55,60 # Histogramm erzeugen hist(y, # Histogramm breaks = breaks, # Klassengrenzen xlim = c(min(breaks), max(breaks)), # x-Achsengrenzen ylim = c(0, 60), # y-Achsengrenzen xlab = "Jahre seit PhD", # x-Achsenbezeichnung ylab = "Häufigkeit", # y-Achsenbezeichnung main = sprintf("Jahre seit PhD, k = %d", # Abbildungstitel length(breaks))) # Histogramm abspeichern dev.copy2pdf( # PDF-Speicherung file = "Histogramm_2.pdf", # Dateiname width = 7, # Breite height = 4) # Höhe ### (10) Häufigkeitsverteilungen und Verteilungsfunktionen # Statistiken berechnen library(dplyr) # R-Paket laden D2_mean = rbind( # Kombination von Zeilen summarise(D2, across(everything(), mean)), # Stichprobenmittel summarise(D2, across(everything(), median)), # Stichprobenmedian summarise(D2, across(everything(), ~ NA))) %>% # Platzhalter as.data.frame() # Konvertierung in Dataframe for (i in 1:ncol(D2)) { # Schleife über Zeilen H = as.data.frame(table(D2[,i])) # absolute Häufigkeiten names(H) = c("a", "h") # Spalten umbenennen D2_mean[3,i] = H$a[which.max(H$h)] # Stichprobenmodalwert } # Statistiken ausgeben rownames(D2_mean) = c("Mean", "Median", "Mode") # Zeilen benennen print(D2_mean) # Ergebnisausgabe ### (7) Strukturiertes Programmieren, (3) Arithmetik und Variablen # Vektor erzeugen z = matrix(rep(NA,n), nrow=n) # Vektor z # Vektor befüllen for (i in 1:n) { # Schleife über Einträge if (D1$sex[i] == "Female") { z[i] = 1 } # 1, falls Female else { z[i] = 0 } # 0, falls nicht } ### (4) Vektoren und Matrizen, (3) Arithmetik und Variablen # Variablen extrahieren x = as.matrix(D1$yrs.since.phd) # Variable x y = as.matrix(D1$salary) # Variable y # Designmatrix erstellen X = matrix(c(rep(1,n), z, x), nrow = n) # Matrix X # Parameterschätzer berechnen beta_hat = solve(t(X) %*% X) %*% t(X) %*% y # Betaparamerschätzer cat("Betaparameterschätzer : ", round(beta_hat, digits = 3))