R-Workshop für Wirtschaftswissenschaften

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

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.