Hier der Code für den R-Workshop für Wirtschaftswissenschaften (einfach in R reinkopieren):
# R download link: https://cran.r-project.org/
# RStudio download link: https://www.rstudio.com/products/RStudio/
rm(list=ls())
# ————————————————————————————————– #
# (1) R als Mathematik-Tool
3 + 5
sqrt(9)
x <- c(3, 4, 7)
y <- c(5, 5, 5)
x * y
x + y
# ————————————————————————————————– #
# (2) Daten einlesen
# https://www.quandl.com/data/WWDI/AUT_SL_GDP_PCAP_EM_KD-GDP-per-person-employed-constant-1990-PPP-Austria
# Tipp (nicht von mir): Gen Lib
gdp <- read.csv(file = „https://www.quandl.com/api/v3/datasets/WWDI/AUT_SL_GDP_PCAP_EM_KD.csv“,
header = TRUE)
head(gdp)
# ————————————————————————————————– #
# (3) Arbeiten mit Daten
plot(gdp)
mean(gdp$Value)
sd(gdp$Value)
var(gdp$Value)
summary(gdp$Value)
hist(gdp$Value) # komische Verteilung!
# ————————————————————————————————– #
# (4) Generieren von Daten
n <- 100
# Gleichverteilt:
wurf <- sample(1:6, size = n, replace = TRUE)
wurf
hist(wurf)
# Normalverteilt:
groesse <- rnorm(n, mean = 170, sd = 15)
groesse
groesse <- round(groesse)
groesse
hist(groesse)
# ————————————————————————————————– #
# (5) LINEARE REGRESSION MIT R
# ß aus Matrixschreibweise schaetzen
# Die Daten
act <- x <- c(21, 24, 26, 27, 29, 25, 25, 30)
gpa <- y <- c(2.8, 3.4, 3.0, 3.5, 3.6, 3.0, 2.7, 3.7)
# Designmatrix (mit Intercept)
X <- cbind(1, x)
X
beta.hat <- solve(crossprod(X, X)) %*% crossprod(X, y)
# Intercept und Steigung
as.vector(beta.hat)
# Berechne die gefitteten Werte y.hat = X*beta.hat und die
# Residuen u.hat = y – y.hat
y.hat <- as.vector(X %*% beta.hat)
y.hat
u.hat <- y – y.hat
u.hat
# Gerade zeichnen:
plot(x, y)
abline(a = beta.hat[1], b = beta.hat[2])
# ————————————————————————————————– #
# (6) Daten speichern
write.table(gdp, file = „C:\\GDP.csv“, col.names = TRUE)
# ————————————————————————————————– #
# (7) Funktionen selber schreiben
meanofmean <- function(a, b){
(mean(a) + mean(b))/2
}
meanofmean(x, y)
meanofmean(x, 10)
meanofmean(x, x) == mean(x) # logische Abfrage
# ————————————————————————————————– #
# (8) Beispiel aus Statistisches Programmieren
n <- 10^6
n2 <- 10^2
k <- 10
M <- matrix(sample(1:6, size = n * k, replace = TRUE), ncol = k)
X <- matrix(sample(1:6, size = n2 * k, replace = TRUE), ncol = k)
head(M)
# (a) Schreibe eine Funktion, welche für M möglichst effizient die Zeilenminima und Zeilenmaxima
# berechnet und in geeigneter Form zurückgibt. Bedingung: Verwende höchstens 1 Schleife!
# Variante 1 (die Version die Programierer/Innen schreiben, die von anderen Sprachen kommen):
row.range <- function(X){
Y <- matrix(0, nrow = nrow(X), ncol = 2)
for(i in 1:nrow(X)){
Y[i, 1] <- min(X[i, ])
Y[i, 2] <- max(X[i, ])
}
return(Y)
print(Y)
}
row.range(M)
z1 <- system.time(row.range(M))
# ————————————————————————————————– #
# Variante 2:
row.range2 <- function(X){
# Da R nur max.col und nicht min.col kennt, nehmen ich in der ersten Spalte -X
cbind(X[cbind(1:nrow(X), max.col(-X))],
X[cbind(1:nrow(X), max.col(X))])
}
row.range2(M)
z2 <- system.time(row.range2(M))
# ————————————————————————————————– #
# Variante 3:
?do.call
row.range3 <- function(X){
temp <- as.data.frame(X)
# pmin.int und pmax.int sind schnellere versionen (steht genau so in der Hilfe), die den
# vektoren alle klassen entziehen.
# nicht immer anwendbar, aber in unserem fall genau richtig!
cbind(do.call(pmin.int, temp),
do.call(pmax.int, temp))
}
row.range3(M)
z3 <- system.time(row.range3(M))
# ————————————————————————————————– #
# Was war am schnellsten?
zeiten <- c(z1[3], z2[3], z3[3])
which(zeiten == min(zeiten)) # nr 3 war am schnellsten
# ————————————————————————————————– #
# (9) PC zum Absturz bringen
replicate(n = 2, shell.exec(„http://www.google.at“))
# replicate(n = 10000, shell.exec(„http://www.google.at“))