######################################################
# #
# Universit?t Regensburg - Lehrstuhl f?r ?konometrie #
# #
# Kurspr?fung im Fach: Programmieren mit R #
# #
# Wintersemester 2013/2014 #
# #
# Datum: 22.10.2013 #
# #
######################################################
######################################################
# Bearbeitungshinweise:
######################################################
#
# - Die Bearbeitungszeit betr?gt 60 (+5) Minuten (Abspeichern, Versenden)
# - Die Klausur besteht aus vier Aufgaben (60 Punkte), die alle bearbeitet werden sollen.
# Aufgabe 1: 25 Punkte
# Aufgabe 2: 20 Punkte
# Aufgabe 3: 8 Punkte
# Aufgabe 4: 7 Punkte
# - Zugelassene Hilfsmittel sind das Kursmaterial (gedruckt oder digital) sowie R-bezogene
# Internetseiten (inkl. Foren aller Art).
# - Benennen Sie diese Datei zun?chst um in: PIR_ws13_kla_Nachname_Vorname.R (IHR Name...)
# - Senden Sie am Ende der Bearbeitungszeit ihren R-Code an:
# stefan.rameseder@wiwi.uni-regensburg.de
# - Drucken Sie nach dem Versenden Ihren Code aus und geben Sie ihn bei der Aufsicht ab.
# - L?sen Sie die folgenden Aufgaben mittels ausf?hrbarem Code in R (aktuelle Version)
# und erg?nzen Sie bei Bedarf Ihre Programmierung um aussagekr?ftige Kommentare.
# - Interpretationen, etc. sollen ebenfalls als Kommentar angegeben werden.
# - Falls Teile Ihres Programms nicht funktionieren, geben Sie ebenfalls in Kommentarform
# an, wie Ihr L?sungsweg in algorithmischer Form aussehen w?rde. Auch dann ist eine
# komplette Punktzahl m?glich.
######################################################
# Name:
# Vorname:
# Matrikelnummer:
######################################################
######################################################
#
# #### #### #### ### # # # #### # #
# # ## # # # # # # # # # # ###
# #### #### #### ### #### #### #### # #
#
######################################################
######################################################
# Aufgabe 1 (25 Punkte):
######################################################
# a) (2 Punkte) Installieren und laden Sie das AER-Paket.
# (Falls es Probleme im Cip Pool gibt, laden Sie es direkt in der Konsole, f?gen Sie es
# in der Konsole hinzu und laden Sie es danach in RStudio.)
# in R Console: install.packages("AER")
# b) (2 Punkte) Laden Sie den im AER-Paket enthaltenen Datensatz MASchools.
# Machen Sie die Spalten?berschriften des Datensatzes direkt ansprechbar.
# (Falls Sie das Paket nicht laden konnten, holen Sie sich den Datensatz von der Homepage)
# c) (2 Punkte) Lesen Sie die Hilfe des Datensatzes durch, geben Sie die deskriptiven
# Statistiken des Datensatzes aus.
# (Falls Sie das Paket nicht laden konnten, lesen Sie die Hilfe im Internet)
# d) (2 Punkte) Interpretieren Sie mit der Hilfe von oben den Mittelwert von stratio.
# Achten Sie dabei darauf, auf was sich der Datensatz bezieht.
# Statio gibt die Student-teacher ratio an, d.h. ist sozusagen ein Indikator f?r die Betreuungs-
# intensit?t der unterschiedlichen School-Districts in Massachusetts.
# In ganz Massachusetts kommen auf einen Lehrer durchschnittlich 17,34 (ganzzahlig 18) Sch?ler, bzw.
# ein Lehrer ist f?r die Betreuung von 17,34 (18) Sch?lern verantwortlich
# e) (1 Punkt) Erzeugen Sie das logarithmierte durchschnittliche Gehalt
# als eigene Variable lsalary im Datensatz.
# f) (2 Punkte) Erzeugen Sie einen Datensatz SalSTRatIncDat, der NUR die Variablen
# lsalary, stratio und income enth?lt.
# g) (3 Punkte) Wenn Sie sich lsalary ausgeben lassen, sehen Sie, dass einige
# Beobachtungen nicht vorkommen. Benutzen Sie diejenige Teilmenge des Datensatzes,
# in dem die Beobachtungen mit NA Eintr?gen in lsalary gel?scht werden.
# Nennen Sie die reine Version des Datensatzes SalSTRatIncDat_clean.
#
# Hinweis: In der Bedingung k?nnte der Befehl is.na() gebraucht werden.
# h) (2 Punkte) Wie viele Beobachtungen wurden durch das Weglassen der NA Eintr?ge
# in lsalary gel?scht?
# i) (2 Punkte) Sch?tzen Sie ein lineares Regressionsmodell, wobei lsalary
# durch eine Konstante, stratio und income erkl?rt wird.
# Verwenden Sie dazu den bereinigten Datensatz SalSTRatIncDat_clean.
# Falls Sie diesen Datensatz nicht bereinigen konnten, nutzen Sie
# den urspr?nglichen Datensatz.
# Benennen Sie die Sch?tzung im bereinigten Fall mit eq1, im anderen
# Fall mit eq2.
# j) (3 Punkte) Testen Sie die folgende Hypothese:
# Der Einfluss des Pro-Kopf-Einkommens ist derselbe, wie der Einfluss
# des Sch?ler-Lehrer-Verh?ltnisses.
# (H0: beta_2 = beta_3)
# Falls Sie hierf?r Befehle ben?tigen, die noch nicht vorhanden sind,
# suchen und installieren Sie das entsprechende Package und machen
# es danach verf?gbar.
# j) (4 Punkte) Erzeugen Sie eine Graphik, in der stratio gegen income
# illustriert wird.
# Zeichnen Sie die Mittelwerte von stratio als gr?ne Linie und von
# income als rote Linie ein.
# Kennzeichnen Sie den Schnittpunkt gelb mit einem ausgemalten Kreis.
# Hinweis: ?points bzw. pch
######################################################
# Aufgabe 2 (20 Punkte):
######################################################
# a) (3 Punkte) Geben Sie den Namen einer Funktion an, die Kerndichtesch?tzungen von Objekten
# durchf?hrt. (engl.: Smoothing Kernel Objects). In welchem Paket liegt die Funktion?
# b) (3 Punkte) Laden Sie das Paket, falls Sie es noch nicht geladen haben. Lesen Sie die Hilfe
# von der Funktion kernel() durch.
# - Was ist der Objektname von dem Objekt, das kernel() als Wert zur?ckgibt?
# - Aus was besteht dieses Objekt?
# c) (3 Punkte) Sprechen Sie alle Werte (nicht Attribute) der Funktion am Beispiel
# kernel("daniell", 5) an.
# d) (3 Punkte) Laden Sie nun von der Kurshomepage
# (http://www-wiwi.uni-regensburg.de/Institute/VWL/Tschernig/Lehre/ProgrammierenR.html.de)
# die Datei dataUS.csv herunter und lesen Sie sie in R in die Variable data_US ein.
# Hinweis: Setzen Sie vorher Ihr Arbeitsverzeichnis entsprechend.
# e) (2 Punkte) In Ihrer dataUS steht nun in der zweiten Spalte das Datum, das noch
# nicht als DATE-Objekt erkannt wurde. ?berschreiben Sie die zweite Spalte mit
# dem Datum als DATE-Objekt und machen Sie die einzelnen Spalten verf?gbar.
# f) (3 Punkte) Wenden Sie nun die gefundene Funktion von vorher auf die Arbeitslosenraten
# im Datensatz dataUS an. Benutzen sie dazu k1<- kernel("daniell", 5) um sich einen "5-Gl?tter"
# zu erzeugen und gl?tten Sie mit dem kernapply()-Befehl und den oben erzeugten Zahlen
# die Arbeitslosenraten der USA.
# Nennen Sie die gegl?tteten Daten ur_smooth.
# Hinweis: Eventuell gibt es in der Hilfe zu kernel() ein interessantes Beispiel.
# g) (3 Punkte) Erzeugen Sie einen Linienplot der Zeitreihe ur. Zeichnen Sie zus?tzlich
# ur_smooth rot ein.
######################################################
# Aufgabe 3 (8 Punkte):
######################################################
# a) (5 Punkte) Die Fakult?t einer ganzen Zahl x ist definiert als
# x!:=x*(x-1)*(x-2)*...*1
# Schreiben Sie eine Funktion mit dem Namen fak, die bei Eingabe einer
# NAT?RLICHEN Zahl die Fakult?t dieser Zahl erzeugt.
#
# Hinweise:
# - Alle Ihnen bekannte Schleifen sind anwendbar, mit einer for-Schleife
# und dem Anwenden dieser auf die nat?rliche Zahl geht es am intuitivsten.
# - Neben Schleifen sind auch andere Konstrukte denkbar.
# - Testen Sie Ihre Funktion mit fak(3)=6 bzw. fak(4)=24
# - Notfalls k?nnen Sie im Internet nach Anregungen suchen, bedenken Sie aber,
# dass vieles auch falsch sein kann.
# b) (1 Punkt) Betrachten Sie nun Ihren Code und optimieren Sie ihn bzgl. Lesbarkeit, Eindeutigkeit
# Kommentaren.
# c) (2 Punkte) Beschreiben Sie kurz ohne Code, inwiefern man diese Funktion gegen?ber
# fehlerhafter Eingaben absichern k?nnte bzw. wo Probleme auftreten k?nnen.
######################################################
# Aufgabe 4 (7 Punkte):
######################################################
# a) (3 Punkte) Setzen Sie den Zufallsgenerator auf die Startposition 123.
# Realisieren Sie einen Vektor beta mit den Eintr?gen 1 und 2.
# Erzeugen Sie zwei Zufallsvektoren x1 und x2 mit jeweils 50 Beobachtungen. x1 sei
# normalverteilt mit Mittelwert 3 und Varianz 4, x2 chi^2-verteilt mit 5 Freiheitsgraden.
# b) (4 Punkte) Simulieren sie nun r=200 mal ein y=beta_1 x1+beta_2 x2 +u,
# indem Sie bei jedem Durchgang einen normalverteilten Fehler u (Mittelwert=0, Varianz=1)
# erzeugen. Speichern Sie ALLE simulierten y pragmatisch ab.
######################################################
# Ende
######################################################