Hilfe bei Seminararbeit

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

RickyRosey
Beiträge: 8
Registriert: Di Sep 03, 2019 4:13 pm

Hilfe bei Seminararbeit

Beitrag von RickyRosey »

Hallo liebe Leute,

ich brauche etwas Hilfe. Ich möchte in einer Seminararbeit überprüfen, ob präsidentielle Demokratien anfälliger für die Nutzung ihres Militärs sind als parlamentarische. Zusätzlich soll die Qualität der Demokratie eine Variable sein. Also: Unabhängige Variablen: Parlamentarische/präsidentielle Demokratie (binär), Demokratiequaliät (Ordinalskala Wert 6-10). Die abhängige Variable ist dann die Anzahl der militärischen Aktionen.

Dazu habe ich einen Datensatz, der alle militärischen Aktionen seit 1816 mitsamt Initiator (Staaten), Anfangs- und Enddatum enthält. Das sind insgesamt 5559 Einträge mit jeweils 20 columns, von denen ich lediglich 3 benötige, also filtern muss.
Ein weiterer Datensatz enthält von 1800 für jeden Staat u.a. einen Index zur Qualität der Regierungsform (von -10 bis 10) für jedes Jahr. Davon benötige ich jeden Wert ab 6 (da ein Staat ab dem Wert 6 als demokratisch eingeschätzt wird). Der Datensatz beinhaltet 17395 Einträge mit 36 columns, wobei ich auch hier nur 3 oder 4 columns benötige.
Zusätzlich muss ich für jeden Fall, in dem ein Staat demokratisch ist noch eine Variable erstellen, die ihn entweder in präsidentiell oder parlamentarisch einstuft.
Ich habe noch nie mit R gearbeitet, vor einigen Jahren mal Grundkenntnisse in STATA erworben und bin deshalb ein wenig überfordert.

Es tut mir leid, dass ich fast komplett unwissend hier um Hilfe bitte, aber wäre für jede Form der Hilfe dankbar!

Liebe Grüße
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Hilfe bei Seminararbeit

Beitrag von bigben »

Hallo RickeyRosey,

keine Gesetze aber doch einen weitgehenden Konsens zu unserem Umgang mit Hausaufgaben habe ich hier mal aufgeschrieben: http://forum.r-statistik.de/viewtopic.php?f=20&t=35
Punkt 1 darin hast Du schon vorbildlich erledigt, jetzt geht es um Punkt 2.

Erfahrungsgemäß sind die ersten Fragen die man zu leicht übergeht aber unbedingt geklärt haben muss: Wie liegen die Daten vor? Hast Du sie schon in R eingelesen? Kannst Du uns einen Beispieldatensatz ( http://forum.r-statistik.de/viewtopic.php?f=20&t=11 ) der Deine Daten widerspiegelt zur Verfügung stellen?

Danach kommt dann: Welche statistische Methoden willst Du einsetzen? Ist Dir die Poisson-Regression ein Begriff oder kennst Du bislang nur die ordinary least squares Regression?
Ich habe noch nie mit R gearbeitet, vor einigen Jahren mal Grundkenntnisse in STATA erworben und bin deshalb ein wenig überfordert.
Die Frage mag unerwartet sein, aber wäre es nicht viel ökonomischer, die Arbeit in STATA zu machen, als sich den Stress dieser Arbeit mit dem zusätzlichen Stress, R zu lernen, zu erhöhen?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
RickyRosey
Beiträge: 8
Registriert: Di Sep 03, 2019 4:13 pm

Re: Hilfe bei Seminararbeit

Beitrag von RickyRosey »

Hallo Bernhard,
zu Beginn einmal besten Dank für die schnelle, verständnisvolle und konstruktive Antwort.

Code: Alles auswählen

> str(MIDB.4.3)
'data.frame':	5559 obs. of  20 variables:
 $ V1 : Factor w/ 2316 levels "100","1002","1006",..: 2316 550 550 1148 1148 1702 1702 2303 2303 2307 ...
 $ V2 : Factor w/ 264 levels "-9","10201","10202",..: 264 1 1 1 1 1 1 1 1 1 ...
 $ V3 : Factor w/ 196 levels "AAB","AFG","ALB",..: 161 181 184 193 8 3 181 181 54 84 ...
 $ V4 : Factor w/ 193 levels "100","101","110",..: 193 15 13 52 36 49 15 15 136 133 ...
 $ V5 : Factor w/ 33 levels "-9","1","10",..: 33 1 1 13 13 8 8 6 6 1 ...
 $ V6 : Factor w/ 13 levels "1","10","11",..: 13 10 10 8 8 8 8 2 2 10 ...
 $ V7 : Factor w/ 189 levels "1816","1817",..: 189 80 80 91 91 124 124 129 129 36 ...
 $ V8 : Factor w/ 33 levels "-9","1","10",..: 33 18 18 19 19 6 6 20 20 7 ...
 $ V9 : Factor w/ 13 levels "1","10","11",..: 13 1 1 2 2 3 3 1 1 6 ...
 $ V10: Factor w/ 190 levels "1816","1817",..: 190 82 82 92 92 125 125 131 131 37 ...
 $ V11: Factor w/ 3 levels "0","1","sidea": 3 1 2 1 2 2 1 2 1 1 ...
 $ V12: Factor w/ 3 levels "0","1","revstate": 3 2 2 1 2 1 1 1 2 1 ...
 $ V13: Factor w/ 6 levels "0","1","2","3",..: 6 2 2 1 3 1 1 1 3 1 ...
 $ V14: Factor w/ 7 levels "-9","0","1","2",..: 7 1 1 1 1 1 1 1 1 1 ...
 $ V15: Factor w/ 9 levels "-9","0","1","2",..: 9 2 2 2 2 2 4 3 4 8 ...
 $ V16: Factor w/ 18 levels "-9","0","1","10",..: 18 2 2 2 2 2 1 1 1 1 ...
 $ V17: Factor w/ 19 levels "0","1","10","11",..: 19 1 17 1 18 9 17 10 10 13 ...
 $ V18: Factor w/ 7 levels "0","1","2","3",..: 7 2 4 2 4 5 4 5 5 6 ...
 $ V19: Factor w/ 3 levels "0","1","orig": 3 2 2 2 2 2 2 2 2 2 ...
 $ V20: Factor w/ 2 levels "4.3000002","version": 2 1 1 1 1 1 1 1 1 1 ...
Dies ist der erste Datensatz zu den Einsätzen des Militärs. Nötig sind hier die Variablen V4, V7 und V10. V4 sind die Ländercodes, V7 das Startjahr und V10 das Endjahr der Einsätze. Ich erkenne, dass auch die "num" Variablen als "Factor" interpretiert werden.

Code: Alles auswählen

> str(Polity_IV_Series_1800_2017)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	17395 obs. of  36 variables:
 $ cyear   : num  21800 21801 21802 21803 21804 ...
 $ ccode   : num  2 2 2 2 2 2 2 2 2 2 ...
 $ scode   : chr  "USA" "USA" "USA" "USA" ...
 $ country : chr  "United States" "United States" "United States" "United States" ...
 $ year    : num  1800 1801 1802 1803 1804 ...
 $ flag    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ fragment: num  NA NA NA NA NA NA NA NA NA NA ...
 $ democ   : num  7 7 7 7 7 7 7 7 7 9 ...
 $ autoc   : num  3 3 3 3 3 3 3 3 3 0 ...
 $ polity  : num  4 4 4 4 4 4 4 4 4 9 ...
 $ polity2 : num  4 4 4 4 4 4 4 4 4 9 ...
 $ durable : num  NA NA NA NA NA NA NA NA NA 0 ...
 $ xrreg   : num  3 3 3 3 3 3 3 3 3 3 ...
 $ xrcomp  : num  3 3 3 3 3 3 3 3 3 3 ...
 $ xropen  : num  4 4 4 4 4 4 4 4 4 4 ...
 $ xconst  : num  7 7 7 7 7 7 7 7 7 7 ...
 $ parreg  : num  4 4 4 4 4 4 4 4 4 2 ...
 $ parcomp : num  2 2 2 2 2 2 2 2 2 4 ...
 $ exrec   : num  8 8 8 8 8 8 8 8 8 8 ...
 $ exconst : num  7 7 7 7 7 7 7 7 7 7 ...
 $ polcomp : num  2 2 2 2 2 2 2 2 2 9 ...
 $ prior   : num  NA NA NA NA NA NA NA NA NA 4 ...
 $ emonth  : num  NA NA NA NA NA NA NA NA NA 3 ...
 $ eday    : num  NA NA NA NA NA NA NA NA NA 4 ...
 $ eyear   : num  NA NA NA NA NA ...
 $ eprec   : num  NA NA NA NA NA NA NA NA NA 1 ...
 $ interim : num  NA NA NA NA NA NA NA NA NA NA ...
 $ bmonth  : num  1 NA NA NA NA NA NA NA NA 3 ...
 $ bday    : num  1 NA NA NA NA NA NA NA NA 5 ...
 $ byear   : num  1800 NA NA NA NA ...
 $ bprec   : num  1 NA NA NA NA NA NA NA NA 1 ...
 $ post    : num  4 NA NA NA NA NA NA NA NA 9 ...
 $ change  : num  88 NA NA NA NA NA NA NA NA 5 ...
 $ d4      : num  1 NA NA NA NA NA NA NA NA 1 ...
 $ sf      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ regtrans: num  NA NA NA NA NA NA NA NA NA 2 ...
Dies ist der zweite Datensatz zur Demokratiequalität. Hier sind die relevanten Variablen "ccode", "year" und "polity2". Diese sind alle (korrekterweise?) als "num" eingeteilt.

Die Variablen V4 aus dem MIDB4.3-Datensatz und "ccode" aus dem Polity_IV_Series_1800_2017-Datensatz sind quasi einheitliche Ländercodes, also z.B. Wert=2 steht bei beiden für USA.
Die Daten sind schon in R eingelesen und ich habe die letzten zwei Tage versucht, autodidaktisch Herr über die Daten zu werden und weiß nicht so recht weiter.

Ich kenne die OLS-Regression und multivariate Regression und logistische Regression. Poisson-Regression scheint (nach kurzer Google-Recherche) eine verallgemeinernde Regressionsanalyse zu sein und in ähnlicher Weise wie die logistische Regression zu sein.

Ich benutze R, da es kostenfrei ist und unsere Uni, nachdem sie früher STATA als Standardprogramm einsetzte, inzwischen hauptsächlich mit R arbeitet und ich die nächsten Semester weiter damit arbeiten muss. Die Kenntnisse in STATA sind ein paar Jahre alt und waren nicht so tiefgehend, als dass ich jetzt genau wüsste, was ich zu tun habe.. :roll:

Ich hoffe, das bringt vielleicht etwas mehr Klarheit und bin wirklich sehr dankbar!

Liebe Grüße
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Hilfe bei Seminararbeit

Beitrag von bigben »

Hi!

Das ist ein guter Anfang.
RickyRosey hat geschrieben: Di Sep 03, 2019 6:19 pmNötig sind hier die Variablen V4, V7 und V10. V4 sind die Ländercodes, V7 das Startjahr und V10 das Endjahr der Einsätze. Ich erkenne, dass auch die "num" Variablen als "Factor" interpretiert werden.
Das mit der Interpretation als factor muss korrigiert werden. Vorzugsweise sucht man, welchen Fehler man beim Einlesen gemacht hat. Quick&dirty kann man auch versuchen, sie umzuwandeln. Im Prinzip so

Code: Alles auswählen

MIDB.4.3$startjahr <- as.numeric(as.character(MIDB.4.3$V7))
str(MIDB.4.3)
sind quasi einheitliche Ländercodes, also z.B. Wert=2 steht bei beiden für USA.
Datensätze aus zwei Datensätzen anhand eines solchen einheitlichen Codes zusammenführen kann man in R beispielsweise mit der sehr mächtigen Funktion merge(). Wahrscheinlich magst Du das mal googlen.
Ich kenne die OLS-Regression und multivariate Regression und logistische Regression. Poisson-Regression scheint (nach kurzer Google-Recherche) eine verallgemeinernde Regressionsanalyse zu sein und in ähnlicher Weise wie die logistische Regression zu sein.
Richtig, die Poisson-Regression ist dem Prinzip der logistischen sehr ähnlich. Sie eignet sich sehr oft für Regressionen, bei denen die abhängige Variable Zählwerte sind. Wie die logistische Regression so wird auch die Poisson-Regression in R mit der Funktion glm() gerechnet. Zunächst solltest Du aber an den Daten arbeiten und die in geeigneter Weise zusammenstellen.

Weiter oben ging es Dir darum, einige Spalten aus einem Datensatz zu extrahieren. Das scheint mir nicht die vorrangige Aufgabe zu sein, aber man kann sich kaum zu früh mit der Bedeutung eckiger klammern in R auseinandersetzen: https://bookdown.org/ndphillips/YaRrr/slicing-dataframes.html (dort findet man auch ewas über merge).
Ich benutze R, da es kostenfrei ist und unsere Uni, nachdem sie früher STATA als Standardprogramm einsetzte, inzwischen hauptsächlich mit R arbeitet und ich die nächsten Semester weiter damit arbeiten muss.

Das klingt nach einem guten Grund.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
RickyRosey
Beiträge: 8
Registriert: Di Sep 03, 2019 4:13 pm

Re: Hilfe bei Seminararbeit

Beitrag von RickyRosey »

Hallo Bernhard,

nochmals vielen Dank!
Ich glaube, den Fehler beim Einlesen des Datensatzes gefunden zu haben. Die Bezeichnung der jeweiligen Variablen wird als "Ausprägung" gelesen. Dadurch sind die Werte nun nicht mehr nur Zahlen, sondern auch Buchstaben. Die Datei MIDB.4.3 ist im csv-Format. Wie kann ich also den Datensatz dahingehend korrigieren, dass die oberste Zeile als Bezeichnung und nicht als Ausprägung der Variablen gelesen wird?
Edit: Ich habe die Zeile mit den Bezeichnungen in der csv-Datei entfernt, ich weiß ja so welche columns ich benötige und wie ich diese bezeichnen kann.

Mit merge werde ich mich anschließend beschäftigen, step by step :P

Danke nochmals und besten Gruß!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Hilfe bei Seminararbeit

Beitrag von jogo »

Hallo Rickey,
RickyRosey hat geschrieben: Mi Sep 04, 2019 7:42 pm Wie kann ich also den Datensatz dahingehend korrigieren, dass die oberste Zeile als Bezeichnung und nicht als Ausprägung der Variablen gelesen wird?
das macht der Parameter header=TRUE beim Einlesen.
Es gibt noch viele andere nützliche Parameter bei der Funktion read.table() (und ihren vorparametrisierten Geschwistern). Ein Blick in die Dokumentation lohnt sich immer:

Code: Alles auswählen

?read.table
Gruß, Jörg
RickyRosey
Beiträge: 8
Registriert: Di Sep 03, 2019 4:13 pm

Re: Hilfe bei Seminararbeit

Beitrag von RickyRosey »

Guten Morgen,

auch dir Jörg herzlichen Dank!

Nachdem ich nun beide Datensätze eingelesen habe und die relevanten Variablen numerisch sind, kommt es nun zur Zusammenführung der Datensätze. Obwohl ich mich mit der Funktion merge() nun etwas beschäftigt habe, ist mir noch nicht ganz klar, wie ich nun weiterkomme.

Code: Alles auswählen

'data.frame':	5558 obs. of  23 variables:
 $ dispnum3 : int  2 2 3 3 4 4 7 7 8 8 ...
 $ dispnum4 : int  -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 ...
 $ stabb    : Factor w/ 195 levels "AAB","AFG","ALB",..: 180 183 192 8 3 180 180 54 84 180 ...
 $ ccode    : num  200 2 345 300 339 200 200 651 630 200 ...
 $ stday    : int  -9 -9 2 2 15 15 13 13 -9 -9 ...
 $ stmon    : int  7 7 5 5 5 5 10 10 7 7 ...
 $ styear   : int  1902 1902 1913 1913 1946 1946 1951 1951 1856 1856 ...
 $ endday   : int  24 24 25 25 13 13 26 26 14 14 ...
 $ endmon   : int  1 1 10 10 11 11 1 1 3 3 ...
 $ endyear  : int  1903 1903 1913 1913 1946 1946 1952 1952 1857 1857 ...
 $ sidea    : int  0 1 0 1 1 0 1 0 0 1 ...
 $ revstate : int  1 1 0 1 0 0 0 1 0 1 ...
 $ revtype1 : int  1 1 0 2 0 0 0 2 0 2 ...
 $ revtype2 : int  -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 ...
 $ fatality : int  0 0 0 0 0 2 1 2 6 6 ...
 $ fatalpre : int  0 0 0 0 0 -9 -9 -9 -9 -9 ...
 $ hiact    : int  0 7 0 8 16 7 17 17 20 20 ...
 $ hostlev  : int  1 3 1 3 4 3 4 4 5 5 ...
 $ orig     : int  1 1 1 1 1 1 1 1 1 1 ...
 $ version  : num  4.3 4.3 4.3 4.3 4.3 ...
 $ startjahr: num  1902 1902 1913 1913 1946 ...
 $ ccoder   : num  200 2 345 300 339 200 200 651 630 200 ...
 $ endjahr  : num  1903 1903 1913 1913 1946 ... 
Aus diesem Datensatz sind die wichtigen Variablen "startjahr" und "ccoder" und "endyear".

Code: Alles auswählen

Classes ‘tbl_df’, ‘tbl’ and 'data.frame':	17395 obs. of  36 variables:
 $ cyear   : num  21800 21801 21802 21803 21804 ...
 $ ccode   : num  2 2 2 2 2 2 2 2 2 2 ...
 $ scode   : chr  "USA" "USA" "USA" "USA" ...
 $ country : chr  "United States" "United States" "United States" "United States" ...
 $ year    : num  1800 1801 1802 1803 1804 ...
 $ flag    : num  0 0 0 0 0 0 0 0 0 0 ...
 $ fragment: num  NA NA NA NA NA NA NA NA NA NA ...
 $ democ   : num  7 7 7 7 7 7 7 7 7 9 ...
 $ autoc   : num  3 3 3 3 3 3 3 3 3 0 ...
 $ polity  : num  4 4 4 4 4 4 4 4 4 9 ...
 $ polity2 : num  4 4 4 4 4 4 4 4 4 9 ...
 $ durable : num  NA NA NA NA NA NA NA NA NA 0 ...
 $ xrreg   : num  3 3 3 3 3 3 3 3 3 3 ...
 $ xrcomp  : num  3 3 3 3 3 3 3 3 3 3 ...
 $ xropen  : num  4 4 4 4 4 4 4 4 4 4 ...
 $ xconst  : num  7 7 7 7 7 7 7 7 7 7 ...
 $ parreg  : num  4 4 4 4 4 4 4 4 4 2 ...
 $ parcomp : num  2 2 2 2 2 2 2 2 2 4 ...
 $ exrec   : num  8 8 8 8 8 8 8 8 8 8 ...
 $ exconst : num  7 7 7 7 7 7 7 7 7 7 ...
 $ polcomp : num  2 2 2 2 2 2 2 2 2 9 ...
 $ prior   : num  NA NA NA NA NA NA NA NA NA 4 ...
 $ emonth  : num  NA NA NA NA NA NA NA NA NA 3 ...
 $ eday    : num  NA NA NA NA NA NA NA NA NA 4 ...
 $ eyear   : num  NA NA NA NA NA ...
 $ eprec   : num  NA NA NA NA NA NA NA NA NA 1 ...
 $ interim : num  NA NA NA NA NA NA NA NA NA NA ...
 $ bmonth  : num  1 NA NA NA NA NA NA NA NA 3 ...
 $ bday    : num  1 NA NA NA NA NA NA NA NA 5 ...
 $ byear   : num  1800 NA NA NA NA ...
 $ bprec   : num  1 NA NA NA NA NA NA NA NA 1 ...
 $ post    : num  4 NA NA NA NA NA NA NA NA 9 ...
 $ change  : num  88 NA NA NA NA NA NA NA NA 5 ...
 $ d4      : num  1 NA NA NA NA NA NA NA NA 1 ...
 $ sf      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ regtrans: num  NA NA NA NA NA NA NA NA NA 2 ...
Aus diesem Datensatz sind die relevanten Variablen "ccode", "year" und "polity2".

Dabei möchte ich aus dem Datensatz MIDB.4.3 nun die Variablen "ccoder" und "startjahr" decken mit den Variablen "ccode" und "year" aus dem Datensatz Polity_IV_Series_1800_2017. Damit ich - so meine Vorstellung - in einer Zeile dann die gleichen Ausprägungen von "ccode" und "ccoder" (Länderziffer, die in beiden Datensätzen gleich sind) und "year" und "startjahr", also die Jahre in denen die Variablen ihre Ausprägung haben.
Zusätzlich möchte ich aber nur noch die Zeilen ab einer Ausprägung der "polity2"-Variable von polity2>6 sehen.
Die Idee dahinter ist: Ich möchte die Jahre zusammenfügen, in denen ein Staat (identifizierbar über den ccode) gleichzeitig einen polity2>6 hatte (also als demokratisch gilt) und gleichzeitig militärische Konflikte geführt hat (also die Jahre zwischen "startjahr" und "endjahr" in einer Zeile des MIDB.4.3-Datensatzes). Ich hoffe, ich konnte das verständlich formulieren.
Anschließend möchte ich noch eine zusätzliche, binäre Variable einfügen nach der Art der Demokratie (präsidentiell/parlamentarisch) für jedes Jahr und jedes Land, dass gleichzeitig demokratisch war und militärische Konflikte geführt hat.

Ich hatte nun vor mit merge zu arbeiten, aber bin noch nicht darauf gekommen, wie ich mein Unterfangen sinnvoll umsetzen kann.

Danke euch für eure Zeit und Hilfe!
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Hilfe bei Seminararbeit

Beitrag von bigben »

möchte ich aus dem Datensatz MIDB.4.3 nun die Variablen "ccoder" und "startjahr" decken mit den Variablen "ccode" und "year" aus dem Datensatz Polity_IV_Series_1800_2017
Was macht denn

Code: Alles auswählen

merge(MIDB.4.3, Polity_IV_Series_1800_2017, by.x = c("ccoder", "startjahr"), by.y = c("ccode", "year"))
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
RickyRosey
Beiträge: 8
Registriert: Di Sep 03, 2019 4:13 pm

Re: Hilfe bei Seminararbeit

Beitrag von RickyRosey »

Tausend Dank, war ja eigentlich ein recht simpler Befehl. Nun möchte ich mit dem zusammengesetzten "merged" dataframe weiterarbeiten und ihn filtern, so dass die nur noch Beobachtungen der Variable polity2>6 angezeigt werden. Wie kann ich den zusammengesetzten "neuen" dataframe nun als Datensatz benutzen?

Beste Grüße und vielen Dank!
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Hilfe bei Seminararbeit

Beitrag von jogo »

Code: Alles auswählen

neuDF <- merge(...) ## in neuem Objekt abspeichern
subset(neuDF, polity2>6) ## ... eventuell in einem neuen Objekt speichern ;-) 
Gruß, Jörg
Antworten