von Reinhold Hatzinger - eRm
Transcrição
von Reinhold Hatzinger - eRm
Manual zum Softwarepackage eRm (extended Rasch modeling) Anwendung des Rasch-Modells (1-PL Modell) - deutsche Version Herbert Poinstingl, Patrick Mair & Reinhold Hatzinger 2007 eexxtteennd deed dR Raasscchh m mood deelliinng g Herbert Poinstingl [email protected] Arbeitsbereich Psychologische Diagnostik Fakultät für Psychologie der Universität Wien Liebiggasse 5, A-1010 Wien Patrick Mair [email protected] Wirtschaftsuniversität Wien Department für Statistik und Mathematik Augasse 2-6, A-1090 Wien Reinhold Hatzinger [email protected] Wirtschaftsuniversität Wien Department für Statistik und Mathematik Augasse 2-6, A-1090 Wien 2 eexxtteennd deed dR Raasscchh m mood deelliinng g Geleitwort Als „Mentor“ des vorliegenden Manuals zum Auswertungsprogramm eRm in Buchform ist es mir eine Freude, ein Geleitwort zu schreiben. Die genauen Hintergründe, wie es zu diesem Manual gekommen ist, haben die Verfasser in ihrem Vorwort kurz ausgeführt. Noch weiter zurückgehende „Hintergründe“ möchte ich hier ansprechen. Vielen Interessenten am Rasch-Modell – genauer: am dichotomen logistischen Testmodell von Rasch, heutzutage fast prägnanter, weil nicht verwechselbar mit anderen darauf aufbauenden Modellen als 1-PL Modell bezeichnet – ist nicht bekannt, wie und durch wen und damit von wo aus es seinen „Eroberungszug“ in die psychologische Testtheorie begann. Quelle ist freilich das berühmte Buch von Georg Rasch, das nach Drängen seiner Schüler endlich 1960 auf den Markt kam und 1980 neu aufgelegt wurde. Allerdings wäre nicht - neben seinem Schüler Erling B. Andersen - Gerhard Fischer aus Wien (Institut für Psychologie, Universität Wien) gewesen, hätte es nicht nur außerhalb des deutschsprachigen Raums lange gedauert bis sich das Modell endlich über Verallgemeinerungen und Anwendungen in der PISA-Studie „durchsetzte“. Ohne Gerhard Fischer also, der einen mehrmonatigen Studienaufenthalt bei Georg Rasch in Kopenhagen gegen Ende der 60er Jahre verbrachte, hätte man das Rasch-Modell auch im deutschsprachigen Raum kaum zur Kenntnis genommen. Seine, Gerhard Fischers Bücher, vor allem jenes aus 1974, und er selbst mit seinen Schülern „betrieb“ emsig die Anwendung des Rasch-Modells. Von Wien aus verbreitete es sich in die Niederlande; via Hans Spada, einem der Schüler von Fischer, nach Kiel. Andere Fischer-Schüler sind in der Literatur bekannt: Hartmann Scheiblechner, Wilhelm Kempf, Anton Formann und ich selbst sowie später Georg Gittler, noch später Norbert Tanzer und Ivo Ponocny. In den 80er Jahren entstanden dann auch erste publizierte und verlagsmäßig vertriebene Tests, die von vornherein nach dem Rasch-Modell kalibriert worden sind: WMT von Formann, AID von mir und 3DW von Gittler (alle noch immer in Wien); in der Zwischenzeit sind es deren mehr aus Wien stammende geworden. So gesehen ist Wien ein wichtiger Ausgangspunkt zur Verbreitung des Rasch-Modells gewesen. Diesem Umstand soll das Umschlagbild der vorliegenden Buchform des Manuals zum eRm Rechnung tragen. Der Kreis schließt sich, indem dieses Programm – auf das ein Mitarbeiter von mir, sicher nicht zufällig, weil systematisch suchend, doch aber überraschend, was die Adresse betrifft, gestoßen ist – von zwei Mitarbeitern des Departments für Statistik und Mathematik der Wirtschaftsuniversität Wien stammt, die beide ebenfalls an der Fakultät 3 eexxtteennd deed dR Raasscchh m mood deelliinng g für Psychologie der Universität Wien studierten; Patrick Mair verfasste nach seiner Promotion in Statistik seine Diplomarbeit in Psychologie bei Formann, Reinhold Hatzinger vor seiner Habilitation in Statistik seine Dissertation mit mir als Betreuer bei Fischer. Möge diese Software, unterstützt mit dem vorliegenden Manual, erst recht zur Verbreitung des Rasch-Modells beitragen. Klaus D. Kubinger (Arbeitsbereich Psychologische Diagnostik samt Test- und Beratungsstelle Fakultät für Psychologie, Universität Wien) 4 eexxtteennd deed dR Raasscchh m mood deelliinng g 1 Vorwort Als am Arbeitsbereich Psychologische Diagnostik (Fakultät für Psychologie, Universität Wien; www.univie.ac.at/psychologie/diagnostik) bzw. an der angeschlossenen Test- und Beratungsstelle (www.testzentrum.at ) der Bedarf an einem leistungsstärkeren Softwareprogramm zur Anwendung des Rasch-Modells (1-PL Modell) entstand (als es mit dem LPCM-Win (Seliger-Ponocny & Fischer, 1998) gegeben war), wurde man bei einer Internetrecherche fündig: Patrick Mair und Reinhold Hatzinger vom Arbeitsbereich Quantitative Research Methods, Department für Statistik und Mathematik der Wirtschaftsuniversität Wien waren gerade an der Entwicklung eines in „R“ anwendbaren Programms namens eRm (extended Rasch modeling). Daraufhin kam es zu einer sehr befruchtenden Zusammenarbeit zwischen Herbert Poinstingl und Mitarbeiter(inne)n der Test- und Beratungsstelle einerseits und den Entwicklern Mair & Hatzinger andererseits. Die jahre- bis jahrzehntelange Erfahrung in der Kalibrierung von Tests nach dem Rasch-Modell seitens des Leiters der Test- und Beratungsstelle, Klaus Kubinger, und seiner Mitarbeiter(innen) konnten bei der Fertigstellung berücksichtigt werden. So wurden vielfache Routine-Bedürfnisse sowie zahlreiche Daten„Imponderabilien“ weitergegeben und gleichzeitig an eigenen Auswertungen die praktische Bewährung von eRm erprobt. Dieser monatelange rekursive Prozess führte zu einer für den praktischen Einsatz empfehlenswerten Programmversion. Allerdings bedarf der Anwender, zumeist Psycholog(inn)en ohne viel Programmiererfahrung und -interesse nicht nur einer theoriegeleitet optimal programmierten Software, sondern auch einer benutzerfreundlichen. Der Benutzerfreundlichkeit dient nun das vorliegende Manual. Es sollte mit ihm jedem Anwender schnell und leicht möglich sein, Analysen nach dem Rasch-Modell zu bewerkstelligen. Dass eRm als OpenSource-Software nicht nur gratis, sondern der Quellcode auch für jedermann einsehbar ist, kann als ein besonderes Qualitätsmerkmal gewertet werden. Das bedingt zwar laufende Updates – abgesehen davon, dass eRm weit mehr zu leisten imstande ist als Analysen nach dem (einfachen) Rasch-Modell, also dem 1-PL Modell, trotzdem wird aber versucht, den in diesem Manual gegebenen Informationsstand möglichst lange aktuell zu halten. D.h., neuere Versionen als 0.9.5 mit Erweiterungen werden jedesmal genau darauf 5 eexxtteennd deed dR Raasscchh m mood deelliinng g hinweisen, was sich in der Benutzung ändert bzw. wird die Version 0.9.5 (ausgenommen allfällige Fehlerkorrekturen) für längere Zeit www.univie.ac.at/psychologie/diagnostik downloadbar sein. 6 auch auf der Homepage eexxtteennd deed dR Raasscchh m mood deelliinng g 2 Danksagungen Ein besonderer Dank geht an Herrn Univ.-Prof. Dr. Mag. Klaus Kubinger, ohne dessen Energie und Engagement dieses Buch nicht entstanden bzw. niemals fertig geworden wäre. Ein besonderer Dank der Autoren geht an Frau Mag. Hannelore Koch, die im letzten Moment noch zahlreiche Druckfehler entdeckt hat. Weiters danken wir auch an Herrn Andreas Schneiderbauer für seine Korrekturarbeit. Zuletzt bedanken sich die Autoren bei Frau Veronika Marek und Herrn Wolfgang Steiner für die Gestaltung des Titelbildes. 7 eexxtteennd deed dR Raasscchh m mood deelliinng g 3 Inhaltsverzeichnis 1 2 3 4 5 6 Vorwort------------------------------------------------------------------------------------------------5 Danksagungen ----------------------------------------------------------------------------------------7 Inhaltsverzeichnis ------------------------------------------------------------------------------------8 Lexikalische Anmerkungen ------------------------------------------------------------------------9 Grundsätzliches ------------------------------------------------------------------------------------ 11 GNU „R“ -------------------------------------------------------------------------------------------- 12 6.1 Voraussetzungen ----------------------------------------------------------------------------- 14 6.2 Plattformen für „R“ -------------------------------------------------------------------------- 15 6.3 Die Installation von „R“ & eRm (unter WINDOWS) ---------------------------------- 16 6.4 Programmpakete laden ---------------------------------------------------------------------- 20 6.5 Benutzeroberflächen unter „R“ für WINDOWS ---------------------------------------- 22 6.5.1 JGR („Java Gui for R“) --------------------------------------------------------------- 22 6.5.2 Der R-Commander--------------------------------------------------------------------- 24 6.5.3 Exkurs: Teaching Demos ------------------------------------------------------------- 28 6.6 Objekte in „R“-------------------------------------------------------------------------------- 30 6.7 Wichtige Befehle für „R“ ------------------------------------------------------------------- 32 6.8 Rechnen mit „R“ ----------------------------------------------------------------------------- 35 6.9 „R“-Software-Pakete im Bereich der IRT------------------------------------------------ 40 7 Daten austauschen --------------------------------------------------------------------------------- 41 7.1 Der Datenimport ----------------------------------------------------------------------------- 41 7.2 Der Datenexport – der write()-Befehl----------------------------------------------------- 49 7.3 Workspace – eine Möglichkeit zur Datenspeicherung --------------------------------- 51 8 extended Rasch modeling eRm------------------------------------------------------------------- 54 8.1 eRm - extended Rasch modeling (Mair & Hatzinger, 2006)-------------------------- 55 8.2 Die Analyse eines Rasch-Modells (RM) ------------------------------------------------- 57 8.3 Die Befehle print(), summary() und die Struktur von Rm-Objekten ----------------- 62 8.4 Möglichkeiten des Befehls RM() ---------------------------------------------------------- 68 8.5 Weitere Berechungsmöglichkeiten -------------------------------------------------------- 70 8.5.1 Schätzung von Personenparameter -------------------------------------------------- 70 8.5.2 Der bedingte Likelihood-Quotiententest (nach Andersen)----------------------- 78 8.5.3 Der Grafische Modelltest (Rasch) --------------------------------------------------- 85 8.5.4 Der Waldtest---------------------------------------------------------------------------- 92 8.5.5 Personfit und Itemfit------------------------------------------------------------------- 96 8.5.6 Die Informationsindices -------------------------------------------------------------- 99 8.5.7 Weitere grafische Möglichkeiten ---------------------------------------------------100 9 Untergruppen und missing data -----------------------------------------------------------------103 9.1 Rasch-Modell-Analyse einer Datenmatrix mit Gruppen ------------------------------105 9.2 Der bedingte LQT (Andersen) mit Untergruppen--------------------------------------107 9.3 Personenparameter-Schätzung bei Untergruppen --------------------------------------109 10 Das Rm-Objekt ---------------------------------------------------------------------------------114 11 Objekte in eRm (von Reinhold Hatzinger) -------------------------------------------------116 12 Literaturverzeichnis----------------------------------------------------------------------------119 13 Empfehlenswerte Vertiefungsliteratur ------------------------------------------------------120 14 Nützliche Webseiten---------------------------------------------------------------------------121 15 FAQ – Frequently Asked Questions --------------------------------------------------------122 16 Pakete für die Psychometrie ------------------------------------------------------------------125 17 Matrix mat1 -------------------------------------------------------------------------------------128 18 Matrix mat2 -------------------------------------------------------------------------------------129 19 Abbildungsverzeichnis ------------------------------------------------------------------------130 8 eexxtteennd deed dR Raasscchh m mood deelliinng g 4 Lexikalische Anmerkungen 1. Wichtige Hinweise erscheinen im Manual folgendermaßen Wichtig: So sehen wichtige Hinweise aus. 2. Programmcode bzw. Beispiele haben das folgende Aussehen Beispiele zu Befehlen, die direkt in die R-Benutzeroberfläche eingegeben werden können, werden folgendermaßen dargestellt. Beispiel/Code: for(i in 1:10) print(c(i,i*i)) 3. Darstellung von Menüpunkten Menüpunkt: Menüpunkte, die in der Menüleiste oder einem Submenü ausgewählt werden können, sind in diesem Format dargestellt. 4. Kommentare beginnen mit dem Zeichen „#“. # Kommentare zu den Dateien haben dieses Format 5. Weitere Informationen zu einem Thema haben folgendes Aussehen Info: Weitergehende Informationen werden in dieser Formatierung dargestellt. 9 eexxtteennd deed dR Raasscchh m mood deelliinng g 6. Zusammenfassungen haben folgendes Erscheinungsbild Zusammenfassung: So sehen Zusammenfassungen aus. 7. Tipps haben folgendes Erscheinungsbild Tipp: Tipps zu “R“ und eRm haben dieses Format. 8. Ausgaben haben folgendes Erscheinungsbild Ausgabe: Bildschirmausgaben von „R“ & eRm haben diese Formatierung. Bei den einführenden Beispielen werden allerdings der Einfachheit Missverständnissen vorzubeugen vor allem „Screenshots“ verwendet. 9. Platz für eigenen Notizen An diesen Stellen kann der Leser eigenen Notizen in das Buch eintragen. Eigene Notizen: 10 halber und um eexxtteennd deed dR Raasscchh m mood deelliinng g 5 Grundsätzliches Dieses Handbuch bezieht sich auf eRm: extended Rasch modeling. R package version 0.9.5 (Mair, P. & Hatzinger, R., 2007) erreichbar unter http://CRAN.R-project.org/. Die Autoren übernehmen keine Gewährleistung oder Haftung für etwaige Schäden, Folgeschäden oder Ausfälle, die entstehen können. Die Autoren übernehmen außerdem keinerlei Gewähr für die Aktualität, Korrektheit, Vollständigkeit oder Qualität der bereitgestellten Informationen. Haftungsansprüche gegen die Autoren, welche sich auf Schäden materieller oder ideeller Art beziehen, die durch die Nutzung oder Nichtnutzung der dargebotenen Informationen bzw. durch die Nutzung fehlerhafter und unvollständiger Informationen verursacht wurden, sind grundsätzlich ausgeschlossen, sofern seitens der Autoren kein nachweislich vorsätzliches oder grob fahrlässiges Verschulden vorliegt. Bei direkten oder indirekten Verweisen auf fremde Webseiten ("Hyperlinks"), die außerhalb des Verantwortungsbereiches der Autoren liegen, würde eine Haftungsverpflichtung ausschließlich in dem Fall in Kraft treten, in dem die Autoren von den Inhalten Kenntnis haben. Wichtig: der Pfeil und das Gleichheitszeichen: Bei der Übergabe von Werten, Objekten etc. an Variablen (z.B. x=3 oder x<=“ und der x<-3) ist zu beachten, dass das Gleichheitszeichen „= Pfeil „< <-“ bei der interaktiven Eingabe von Befehlen in „R“ gleiche Wirkung haben. Aus Formatierungsgründen wird in diesem Manual „= =“ verwendet. Der Standard- Zuweisungsoperator ist allerdings der Pfeil „< <-“ und dem Leser wird hier explizit empfohlen, diesen zu verwenden (nicht zuletzt, da das Gleichheitszeichen „= =“ im Gegensatz zum Pfeil „< <-“ nicht überall verwendet werden kann). 11 eexxtteennd deed dR Raasscchh m mood deelliinng g 6 GNU „R“ Auf der Homepage von CRAN (dem Netzwerk für R) findet man die folgenden Definitionen für die Begriffe CRAN und GNU „R“ - “CRAN is a network of ftp and web servers around the world that store identical, upto-date, versions of code and documentation for R.” - “R is ‘GNU S', a freely available language and environment for statistical computing and graphics which provides a wide variety of statistical and graphical techniques: linear and nonlinear modelling, statistical tests, time series analysis, classification, clustering, etc.” (erreichbar auf http://www.cran.r-project.org/, 31.08.2007) GNU „R“ ist eine integrierte Sammlung von Softwareprogrammen mit einer einfachen grafischen Benutzeroberfläche, die folgende Möglichkeiten anbietet: - zur Datenmanipulation - zur Datenanalyse - zur grafischen Darstellung der Ergebnisse - und zur Speicherung von Daten und Ergebnissen Vorteile von GNU R: - GNU R ist ein Klon der bekannten und sehr leistungsfähigen Programmiersprache S, die in den Bell Labs von Chambers, Becker und Wilks entwickelt wurde. - Als Programmiersprache bietet „R“ ein komfortables, objektorientiertes Programmieren an. - „R“ wird auf den Betriebssystemen LINUX, WINDOWS und Apple-Computer angeboten und kann damit praktisch auf jedem PC und Großrechner eingesetzt werden. Zusätzlich wird „R“ noch von über tausend Softwarepaketen für die verschiedenen Aufgabenbereiche der Statistik, Informatik und Mathematik unterstützt. - Ein weiterer Pluspunkt besteht durch das Konzept der freien Benutzbarkeit von „R“ unter der GPL (General Public License). Damit können Studenten, Schüler und Interessierte ein professionelles System kostenlos nutzen. 12 eexxtteennd deed dR Raasscchh m mood deelliinng g - Die Manuale und Hilfen von allen Paketen haben den gleichen Aufbau und die gleiche dahinter stehende Logik. Dies erleichtert das Lesen von Hilfen und Manualen ungemein. Tipp: Auf der Seite von CRAN (http://www.cran.r-project.org/) kann man sich die Software „R“ und Benutzerhandbücher für R herunterladen. 13 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.1 Voraussetzungen Dieses Manual bezieht sich auf die folgende Hard- und Software. Grundlegende Software - Windows XP (32 Bit) SP2 mit allen aktuellen Updates (Stand 09.08.2007) - Tinn-R 1.9.2.13. als externer Editor - „R“ 2.5.1 für Windows - „R“ 2.41 für Linux - IrfanView 4.0 & Adobe Photoshop CS2 - VMWare 5.5.4 als virtuelle Umgebung - Ubuntu Linux 7.04 (Feisty Fawn) Verwendete „R“ –Pakete - eRm (0.9.5) - R-Commander (1.3-5) Hardware - Desktop – PC DuoCore (2 Kerne mit je 2,13 GHz) und 4 GB Hauptspeicher - Desktop – PC Intel DX4 (3 GHz) mit 768 MB Hauptspeicher - Notebook – Intel DX4 (3 GHz) mit 1 GB Hauptspeicher Auf allen Systemen funktionierte „R“ einwandfrei. Es zeigte sich allerdings, dass eRm und „R“ sehr rechenintensive Anwendungen sind und die Temperaturen verschiedener Komponenten (z.B. Prozessor) erheblich steigen können. Leider kann die derzeit aktuelle Version von „R“ 2.5.1 noch nicht die Möglichkeit von mehreren Prozessorkernen nutzen. Für die Zukunft wäre dies wünschenswert. Tipp: Weitere empfehlenswerte R-Pakete werden im Anhang beschrieben. 14 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.2 Plattformen für „R“ „R“ kann auf verschiedenen Plattformen verwendet werden. Allerdings muss man beachten, dass es zwischen WINDOWS und LINUX gewisse Unterschiede gibt, die unter Umständen große Auswirkungen haben können. Ein Problem besteht z.B. darin, dass es bei den Textformaten Unterschiede gibt. Diese Unterschiede gipfeln darin, dass R-Code auf der einen Seite unter WINDOWS einwandfrei läuft, auf der anderen Seite aber unter LINUX Fehlermeldungen produziert. Um dieses Problem zu umgehen, muss man die WINDOWSDateien mit einem LINUX-Editor unter dem LINUX- Format speichern. Ein sehr guter Editor zur Bearbeitung von Quellcode stellt Programmiersprachen GEDIT (unter LINUX) dar, der für verschiedene Syntax-Highlighting anbietet. Werden beim Speichern die Einstellungen (UTF-8) im Menüpunkt „SPEICHERN UNTER“ verwendet, dann sollte es auch keine Probleme mit Textdateien geben, falls R-Code unter LINUX eingelesen werden soll. Ein weiteres Problem kann auftreten, wenn keine grafische Oberfläche unter LINUX (KDE; GNOME) installiert ist. Dann hat der Benutzer nämlich nur Zeilenkommandos zur Verfügung und kann nicht auf die Möglichkeiten der objektorientierten grafischen Benutzeroberfläche zurückgreifen. Dieses Problem lässt sich unter LINUX einfach durch die Installation von GNOME oder KDE lösen. Tipp: Ein sehr guter, frei erhältlicher Editor für „R“ unter WINDOWS ist Tinn-R. Dieses Programm arbeitet als externes Programm, verfügt aber über Möglichkeiten, um mit „R“ kommunizieren zu können. Außerdem kann in Tinn-R eine kleine Datenbank mit den wichtigsten Funktionen von „R“ angesehen werden. Zusätzlich verfügt Tinn-R selbstverständlich über Syntax - Highlighting für R. Wichtig: Verwenden Sie zur Eingabe von größeren Befehlssequenzen ein externes Programm (z.B. GEDIT (für Linux), Tinn-R (für Windows)). „R“ bietet nämlich keine wirklich komfortablen Editierfunktionen zum Schreiben von Befehlssequenzen oder zum Programmieren an. Wie der Name Tinn-R schon sagt, handelt es sich hier um einen Editor, der speziell an „R“ angepasst wurde. Man kann sich dieses Programm unter http://sourceforge.net/projects/tinn-r herunterladen. Tinn-R ist ein OpenSource-Programm, das unter der GNU General Public License (GPL) läuft. 15 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.3 Die Installation von „R“ & eRm (unter WINDOWS) Vorweg soll nochmals erwähnt werden, dass es sich hier um KEINE Einführung in „R“ handelt. Für eine grundlegende Einführung in „R“ werden Einführungsmanuale auf http://www.cran.r-project.org/doc/manuals/ angeboten. Zusätzlich gibt es unter http://de.wikibooks.org/wiki/GNU_R/ eine komplette Einführung in „R“. Hier findet man auch viele zusätzliche Informationen und Hilfstexte zu „R“. In diesem Manual liegt der Schwerpunkt allerdings auf der Einführung in „eRm – extended Rasch modeling“. Es geht also um die Analyse und Prüfung des Rasch-Modells. Dabei werden exemplarisch Beispiele gerechnet, Funktionen erklärt und in Screenshots genau gezeigt wie die Eingaben und die Ausgaben aussehen. Die Installation von „R“ ist sehr einfach und für die Systeme LINUX, MacOS und WINDOWS möglich. Da die meisten Benutzer unter WINDOWS arbeiten, wird hier nur die Installation unter WINDOWS XP beschrieben. Für die Installation von „R“ unter LINUX und MacOS lesen Sie bitte das entsprechende Manual, das man sich auf der Website http://cran.rproject.org/ des CRAN (Comprehensive R Archive Network) unter dem Menüpunkt Manuals kopieren kann. Im ersten Schritt wird „R“ (unter WINDOWS) installiert. Dazu kopiert man sich die aktuelle Version von „R“ von der Website des CRAN (Comprehensive R Archive Network). Man geht dabei auf die Site http://cran.r-project.org/ und wählt dort den Menüpunkt „R_Binaries“ aus. Dort wählt man zuerst das „WINDOWS“ - Verzeichnis und dann das Verzeichnis „base“ aus. Wie der Name „base“ bereits andeutet, enthält dieses Verzeichnis die Basisinstallation von „R“. Klicken Sie mit der linken Maustaste auf die Datei mit der Endung EXE und wählen Sie im aufscheinenden Menü den Punkt „Ziel speichern unter“. Wählen Sie einen beliebigen Ordner aus, merken Sie sich diesen Ordner und klicken Sie auf den Button „speichern“. Die (ca. 29 MB große) Datei wird nun vom CRAN - Server auf den PC kopiert. Die aktuelle Version zum Zeitpunkt des Verfassens dieses Manuals ist „R“ 2.5.1. Nachdem der Kopiervorgang beendet ist, gehen Sie bitte in jenes Verzeichnis, in das die Installationsdatei kopiert wurde, und starten Sie die Installation mit einem Doppelklick auf den Dateinamen. Die Installation fängt an und man braucht nur mehr den Anweisungen des Programms zu folgen. 16 eexxtteennd deed dR Raasscchh m mood deelliinng g Im zweiten Schritt wird nun eRm installiert. Dazu starten Sie „R“ durch einen Doppelklick auf das entsprechende Symbol auf dem Desktop oder wahlweise auch über Startmenü Start/Alle Programme. Sie werden daraufhin von der spärlichen Benutzeroberfläche von „R“ begrüßt (Abbildung 1). Abbildung 1 – Begrüßung durch R Um nun das Paket eRm zu installieren, müssen Sie im Menü „Pakete“ (Abbildung 2) den Menüpunkt „Installiere Pakete“ auswählen. Abbildung 2 - Auswahl des Menüpunkts "Installiere Pakete" 17 eexxtteennd deed dR Raasscchh m mood deelliinng g Im folgenden Menüpunkt können Sie sich nun einen Server (Abbildung 3) aussuchen, von dem Sie die gewünschten Pakete kopieren wollen. In unserem Fall wählen wir “Austria“ aus. (Dieser Server befindet sich derzeit am Department für Statistik und Mathematik an der WU Wien.) Abbildung 3 - Wahl des Servers (in diesem Fall Austria) Wichtig: Wenn der Benutzer nur über eine langsame Internetverbindung verfügt, dann sollten nur jene Pakete vom Server installiert werden, die auch tatsächlich gebraucht werden. Auf dem Server befinden sich weit über 1000 Pakete und das Downloadvolumen übersteigt bei weitem ein Gigabyte. (1 Gigabyte = 1024 Megabytes = 1024x1024 Kilobytes = 1024*1024*1024 Bytes.) „R“ öffnet und schließt nun ein paar Fenster (es werden die entsprechenden Informationen aus dem Internet geladen) und bietet schließlich in einem Dialogfenster (Abbildung 4) die Pakete an, die sich auf dem Server befinden. Die Sammlung von Paketen, die man über das Internet installieren kann, ist beeindruckend und benötigt über 1 GB, wenn alle Pakete installiert werden. 18 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 4 - Auswahl der gewünschten Pakete - in unserem Fall eRm Suchen Sie dazu in der Paketliste das Package eRm und markieren Sie es. Dann klicken Sie auf den Button „OK“. Das Paket wird installiert und im Anschluss wird „R“ aktualisiert. Damit ist die Installation von „R“ und eRm beendet. Sollten weitere Pakete installiert werden, dann gehen Sie wie oben beschrieben vor. Wollen Sie mehrere Pakete gleichzeitig installieren, dann markieren Sie einfach die gewünschten Pakete. Die markierten Pakete werden auf einmal installiert. Um mehrere Pakete zu markieren, müssen diese mit der linken Maustaste und gleichzeitig gedrückter [STRG]-Taste ausgewählt werden. Nach der Installation kann ein Paket sofort in den Speicher geladen werden und ist damit für die Benutzung bereit. Tipp: Installieren Sie nur Pakete, die tatsächlich verwendet werden sollen. Wenn alle Pakete (über 1000) installiert werden, dann kann (wie oben beschrieben) nicht nur der Download sehr lange dauern, sondern es kann auch die Geschwindigkeit bei bestimmten Operationen verlangsamt werden, weil „R“ sehr viele Dateien durcharbeiten muss. Wenn man sich nur über die Pakete informieren will, kann man sich auf der Website http://cran.r-project.org/ unter dem Menüpunkt „Packages“ kurze Beschreibungen über das gewünschte Paket ansehen oder dessen Manual lesen. 19 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.4 Programmpakete laden Um mit installierten Programmpaketen (z.B. eRm) arbeiten zu können, müssen diese zuerst geladen werden. Dazu gibt es verschiedene Möglichkeiten. Eine Möglichkeit besteht darin den Befehl library() zu verwenden. Man gibt folgende Sequenz in die Benutzeroberfläche ein: libra library(paketname). Um beispielsweise das Paket „psy“ zu laden, geben Sie einfach library(psy) (Abbildung 5) ein. Wenige Sekunden später ist das Paket für die Benutzung bereit. Abbildung 5 - das Paket „psy“ wurde geladen Eine Liste mit allen installierten Paketen bekommt man mittels Eingabe von lib library(). „R“ gibt daraufhin alle installierten Programmpakete aus. Eine zweite Möglichkeit Pakete zu laden, besteht in der Auswahl des Menüpunktes „Pakete“. Im Untermenü muss noch der Eintrag „Lade Paket“ (Abbildung 6) ausgewählt werden. Abbildung 6 - Pakete laden über die GUI 20 eexxtteennd deed dR Raasscchh m mood deelliinng g Daraufhin wird eine Liste mit Paketen angezeigt. Man wählt das gewünschte Paket aus, klickt auf den OK-Button und das Paket wird geladen. In diesem Fall wurde das Paket „psy“ ausgewählt und wird durch Klicken auf den OK-Button geladen. Abbildung 7 - Paket „psy“ wurde ausgewählt Wichtig: „Installieren“ bedeutet nicht „laden“. Programmpakete, die bereits installiert sind, müssen vor der Anwendung geladen werden und nicht installierte Programmpakete müssen zuerst installiert werden, bevor sie geladen werden können. 21 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.5 Benutzeroberflächen unter „R“ für WINDOWS Wenn die grafische Benutzeroberfläche (GUI = graphical user interface) von „R“ gestartet wird, stellt sich für den Benutzer die Frage: „Was soll das?“. Man hat nämlich nur ein Fenster mit wenigen Menübefehlen und noch weniger Inhalt am Bildschirm. Um diesen Zustand zu beenden, installiert man eine grafische Hilfsoberfläche. Die Installation solcher Benutzeroberflächen soll in den nächsten Kapiteln (4.5.1, 4.5.2, 4.5.3) besprochen werden. 6.5.1 JGR („Java Gui for R“) JGR heißt eigentlich „Java GUI for R“ und wird Jaguar (wie das Raubtier) ausgesprochen. JGR ist ein interessantes AddOn zur grafischen Benutzeroberfläche von R, hat im Moment aber noch nicht so viele Funktionen und kämpft mit Geschwindigkeitsproblemen. Die Installation von JGR erfolgt wie es im vorhergehenden Kapitel 6.4 beschrieben wurde. Außerdem muss von der Website http://www.rosuda.org/JGR/ auf der Downloadseite die entsprechende EXE-Datei auf den PC kopiert werden. Derzeit ist JGR-15.exe die aktuelle Datei. JGR wird mit einem einfachen Doppelklick auf die EXE–Datei ausgeführt. JGR startet dann die Benutzeroberfläche von „R“ und bindet sich automatisch in die GUI ein. Abbildung 8 – die R-Benutzeroberfläche mit integriertem JGR 22 eexxtteennd deed dR Raasscchh m mood deelliinng g Eine sehr gute Funktion von JGR ist der object.browser() (siehe Abbildung 9), mit dem man sich bequem über die Variablen und Objekte im Speicher von „R“ informieren kann. Abbildung 9 - der Objektbrowser von JGR Zudem bietet JGR eine hervorragende Unterstützung bei der Befehlseingabe (Abbildung 10), wie man sie von Visual Studio (Microsoft) und Netbeans (SUN) her kennt. So zeigt JGR während des Tippens an, welche Werte an eine Funktion übergeben werden können. Diese Funktion ist bei der Eingabe von Befehlssequenzen sehr hilfreich. Abbildung 10 - Befehlseingabe unter JGR 23 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.5.2 Der R-Commander R-Commander ist eine Benutzeroberfläche, die auf besondere grafische Raffinessen verzichtet und dementsprechend schnell und handlich ist. R-Commander erinnert in seinem Design an die Benutzeroberfläche von SPSS. Die meisten Benutzer werden mit dem RCommander gut zurechtkommen, weil er einfach zu bedienen ist. Da der R-Commander im nächsten Kapitel verwendet wird, um Daten zu importieren, wird er kurz beschrieben. Die Installation des R-Commander erfolgt über den Menüpunkt Pakete/Installiere Pakete/ der R-Benutzeroberfläche. Bei der Installation ist es möglich, dass sie die folgende Fehlermeldung (Abbildung 11) erhalten. Abbildung 11 - der R-Commander benötigt weitere Pakete Der R-Commander benötigt weitere Pakete. Damit das Installationsprogramm die notwendigen Programmpakete installieren kann, muss der JA-Button (Abbildung 11) gedrückt werden. 24 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 12 - Installation vom lokalen PC oder von einem CRAN - Server Nachdem mit der linken Maustaste auf „JA“ geklickt worden ist, wird ein weiteres Dialogfenster geöffnet (Abbildung 12) und das Installationsprogramm fragt, ob die Pakete von einem CRAN-Server kopiert werden sollen. Da die meisten Benutzer die notwendigen Pakete nicht auf dem lokalen PC haben, wählen wir CRAN aus und klicken auf OK. Es öffnet sich ein weiteres Fenster, in dem der Server (bzw. das Land) ausgewählt werden muss. In diesem Beispiel wurde „Austria“ gewählt. Nach einem weiteren Klick auf den OK-Button werden die Pakete installiert. Nach der Installation kann der R-Commander mit library(Rcmdr) in den Speicher geladen werden. In Abbildung 13 sieht man, dass der R-Commander viele statistische Funktionen anbietet. Selbstverständlich kann der R-Commander selbst keine statistischen Berechnungen durchführen, er kann allerdings auf die vielen statistischen und mathematischen Funktionen von „R“ zurückgreifen und diese in seine Benutzeroberfläche einbetten. Im Prinzip macht der R-Commander dasselbe wie die Benutzeroberfläche von SPSS. Beide Programme ermöglichen es dem Benutzer über eine GUI Syntaxbefehle an das zugrunde liegende Rechenprogramm zu übergeben. 25 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 13 – das Statistikmenü der R-Commanders Wie man anhand von Abbildung 14 sehen kann, haben R-Commander und „R“ verschiedene Möglichkeiten der Grafikdarstellung. Sogar 3D-Grafiken können erstellt werden. Abbildung 14 - das Grafikmenü des R-Commanders 26 eexxtteennd deed dR Raasscchh m mood deelliinng g Im Menüpunkt Modelle (Abbildung 15) findet man Tests wie den Breusch-Pagan-Test auf Heteroskedastiztität, den Durbin-Watson-Test auf Autokorrelation, den Bonferoni-AusreißerTest etc. Abbildung 15 - weitere Hilfen des R-Commanders Der R-Commander kann auch verschiedene Datenformate importieren (Abbildung 16). Der Import von Daten wird im Kapitel 7.1 noch genauer behandelt. Abbildung 16 - Datenimport mit dem R-Commander Zusammenfassung: Der R-Commander ist eine große Hilfe für den Benutzer. Da eine Beschreibung des Programmpakets „R-Commander“ dieses Handbuchs sprengen würde und hier auch nicht das Thema ist, soll nur auf die Hilfe des R-Commanders verwiesen werden. In diesem Hilfesystem gibt es unter anderem ein Manual namens „Einführung in den R-Commander“. 27 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.5.3 Exkurs: Teaching Demos Der R-Commander kann durch Plugins erweitert werden. Teaching Demos ist so ein Plugin und bietet die Möglichkeit, statistische Vorgänge grafisch zu demonstrieren. Als erstes muss dazu das entsprechende Plugin geladen werden (Abbildung 17). Abbildung 17 – ein Plugin laden Nachdem das Plugin „Teaching Demos“ geladen worden ist, muss der R-Commander neu gestartet werden. Danach hat man einen weiteren Menüpunkt namens „Demos“ zur Verfügung (Abbildung 18). Abbildung 18 - Demonstrationen 28 eexxtteennd deed dR Raasscchh m mood deelliinng g Nach der Auswahl von „Power of the test“ wird die folgende Demonstration (Abbildung 19) gestartet. Abbildung 19 - Power of the test Der Benutzer kann in dieser Demonstration ausprobieren, welche Auswirkungen die Manipulation der verschiedenen Variablen hat. 29 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.6 Objekte in „R“ „R“ arbeitet mit Objekten, die in Variablen gespeichert werden können. Solche Objekte können mehr oder weniger komplex sein. Unter anderem gibt es folgende Objekte: array, data.frame, factor, list, matrix, vector etc. Vektoren werden mit dem Befehl c() gebildet und enthalten die entsprechenden Elemente, die mit einem Komma-Zeichen voneinander getrennt werden: z.B. a=c(1,2,3) – damit wird ein Vektor mit den Elementen 1, 2, 3 erstellt und in der Variablen a gespeichert. - Matrizen werden mit Hilfe des Befehls matrix(a,zeile,spalte) erstellt. a enthält dabei die Daten, die in der Matrix gespeichert werden sollen. Mit „zeile“ und „spalte“ werden die Zeilenanzahl und die Spaltenanzahl angegeben. Z.B. matrix(c(1,2,3,4,5,6),3,2) erstellt eine Matrix mit drei Zeilen und zwei Spalten (Abbildung 20). Abbildung 20 - ein Objekt vom Typ Matrix wird erstellt Zeilenanzahl und Spaltenanzahl (die Dimensionen der Matrix) können mit dem Befehl dim() abgefragt werden. - Faktoren sind Objekte, die kategorielle Daten enthalten. - Arrays sind einfache Datenfelder, die mit dem Befehl array() erstellt werden. Dabei wird ein Vektor an die Funktion array() übergeben. In Abbildung 21 wird ein Vektor mit der Funktion c() erstellt und in der Variablen a gespeichert. Im nächsten Schritt wird dieser Vektor an die Funktion array() übergeben. Es wird ein Array mit den Werten von Variable a erstellt und in Variable b gespeichert. Die Funktion is.array() überprüft, ob es sich bei einem Objekt um ein Array handelt und gibt TRUE oder FALSE zurück. In unserem Beispiel wird bei der Variablen a FALSE zurückgegeben, da es sich um einen Vektor handelt (Abbildung 21). Bei Variable b, die tatsächlich ein Array ist, wird TRUE zurückgegeben. Auf die Elemente eines Arrays kann man zugreifen, indem 30 eexxtteennd deed dR Raasscchh m mood deelliinng g der Name des Arrays und der Index des Elements angegeben werden. Der Index muss in eckigen Klammern stehen. Mit b[2] wird zum Beispiel der Wert des zweiten Elements von b zurückgegeben. In unserem Beispiel ist das 10. Abbildung 21 - ein Array wird erstellt - Dataframes sind komplexe Strukturen und werden nicht weiter besprochen. - Listen sind die wohl mächtigsten Strukturen in „R“ und eine Liste kann sehr komplexe Strukturen beinhalten. Auch Listen werden nicht weiter besprochen. Während also Objekte vom Typ matrix, vector, array und factor relativ einfach aufgebaut sind, können die Objekte list() und data.frame() eine Vielzahl von anderen Objekten beinhalten. Sie eigenen sich damit hervorragend zur Speicherung von komplexen Ergebnissen. Auch eRm verwendet list()-Objekte zur Ergebnisspeicherung. Wichtige eRmObjekte sind das Rm-Objekt, das LLTM-Objekt, das LR-Objekt, das Wald-Objekt etc. Einen Überblick über die Objekte von eRm gibt Kapitel 10. Wichtig: Die Objekte list() und data.frame() können sehr komplex sein und brauchen viele Ressourcen (z.B. Speicher). Eine Konsequenz kann dann eine erhöhte Rechendauer sein. 31 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.7 Wichtige Befehle für „R“ Um „R“ in kurzer Zeit kennen zu lernen, lesen Sie bitte eine der vielen Einführungen, die bereits vorhanden sind. Diese Einführungen dauern nicht länger als eine Stunde, geben aber einen guten Einblick in „R“. In diesem Kapitel werden die wichtigsten „R“-Befehle erwähnt, die für dieses Manual wesentlich sind. Wichtig: Achtung, „R“ unterscheidet strikt zwischen Groß– und Kleinschreibung. Identische Befehle, die sich nur in der Großschreibung unterscheiden, können völlig unterschiedliche Bedeutungen haben. help() … der wichtigste Befehl in „R“ ist der Befehl help(). Mit ihm wird es möglich, Informationen und Hilfen zu „R“ und zu den Programmpaketen aufzurufen. Wird help() alleine aufgerufen erhält man eine Übersicht über die Befehle von „R“. Wird help(Befehl) aufgerufen, dann erhält man eine Hilfe zu dem eingegebenen Befehl. z.B.: help(str). Nachdem die Befehlssequenz mit der [RETURN]-Taste abgeschlossen wurde, werden Informationen zu str() ausgegeben. Die Hilfe ist unter „R“ sehr standardisiert. Am Anfang wird immer der Befehl mit seinen Optionen beschrieben. Dann werden die verschiedenen Befehlsvarianten beschrieben. Am Ende der Hilfe findet man oft hilfreiche Beispiele. Die Möglichkeiten von help() sind zahlreich und können in Skripten zu „R“ nachgelesen werden. Der help()-Befehl funktioniert nur bei geladenen Programmpaketen und für das „R“-Basispaket allgemein. help.search(„BEGRIFF“) … mit diesem Befehl können sämtliche Hilfedateien (inklusive der Hilfedateien von allen installierten Programmpaketen) nach Begriffen durchsucht werden. fix(name) … mit diesem Befehl kann ein Objekt, z.B. eine Matrix, betrachtet oder manipuliert werden. Außerdem kann man mit diesem Befehl eigene Funktionen schreiben. Allerdings sind die Editierfunktionen sehr eingeschränkt. Es wird hier ausdrücklich davon abgeraten, Funktionen mit Hilfe von fix() zu programmieren. 32 eexxtteennd deed dR Raasscchh m mood deelliinng g data() … damit kann man Datenpakete laden, die von den Programmierern der Softwarepakete mitgeliefert wurden. Zusätzlich kann man mit data() einen schnellen Überblick gewinnen, welche Datenpakete verfügbar sind. ? ... mit dem Fragezeichen kann auch die Hilfe aufgerufen werden; dazu gibt man einfach ?summary ein. Auch das Fragezeichen ? funktioniert nur bei geladenen Programmpaketen. str() ... damit werden die internen Strukturen eines Objektes ausgegeben. Dieser Befehl wird im Kapitel eRm noch eingehender behandelt. summary() … gibt eine Zusammenfassung aus. Diese Methode wird sehr oft von Programmpaketen (z.B. eRm) verwendet und dabei an das Paket angepasst. library(paket1) ... das Softwarepaket paket1 wird geladen. Wird nur library() eingegeben, dann werden alle installierten Programmpakete aufgelistet. ls() ... alle Objekte/Variablen werden am Bildschirm ausgegeben. print() ... eine Variable wird ausgegeben. write(a,fname) … mit dem Befehl write() können Daten in externe Dateien geschrieben werden. Dabei wird der Inhalt von Objekt a in die Datei „fname“ geschrieben. Unterbefehle von write() sind unter anderem write.csv (damit können Daten in CSV-Dateien gespeichert werden) und write.table (die Daten werden in eine Tabelle geschrieben). quit() oder q()… mit dem Befehl quit() kann „R“ beendet werden; alternativ kann man auch aus dem Menü „Datei“ den Befehl „Beenden“ auswählen. 33 eexxtteennd deed dR Raasscchh m mood deelliinng g A <- B … der Pfeil dient in „R“ als Zuweisungsoperator. Dabei wird immer der Inhalt der rechts vom Pfeil stehenden Variablen in die links vom Pfeil stehende <- 7). Damit wird der Variable myvar der Variable geschrieben. (z.B. myvar Wert 7 zugeordnet. A = B … das Gleichheitszeichen „=“ dient in „R“ als zusätzlicher Zuweisungsoperator und ist damit eine Alternative für den Pfeil „<-“ als Zuweisungsoperator. Von der Historie und der Sprachlogik her wird allerdings die Verwendung des Pfeils empfohlen. Eigene Notizen: 34 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.8 Rechnen mit „R“ „R“ ist auch ohne Erweiterungen durch Programmpakete ein sehr umfangreiches Statistikprogramm. Für eine erfolgreiche Benutzung muss man kein Programmierer sein. Um Berechnungen durchzuführen, gibt man Werte und Operationen ein und schließt die Eingabe mit der [RETURN]-Taste ab. In Abbildung 22 wurde beispielsweise 100! berechnet. Abbildung 22 - Berechnung der Faktoriellen „R“ verfügt zudem über verschiedene Möglichkeiten der grafischen Ausgabe. Da eine Einführung in die Grafikmöglichkeiten den Umfang dieses Handbuchs sprengen würde, wird der interessierte Leser darauf hingewiesen, dass man sich von der CRAN - Homepage ein Manual über den Einsatz von Grafiken in „R“ kopieren kann. Die grafischen Möglichkeiten sind der große Pluspunkt von „R“ gegenüber den anderen Statistikprogrammen. Beispiel/Code: x=seq(x=seq(-pi,pi,0.1) plot(sin(x)) In dieser Codesequenz wurde eine Variable x erstellt. Variable x enthält die Werte von –Pi bis Pi, wobei die Werte immer um 0.1 erhöht werden. Im zweiten Schritt werden die Werte von x an die Funktion sin(x) geschickt, die ihrerseits die berechneten Werte an die Funktion plot() übergibt. Das Ergebnis obigen Befehls steht in Abbildung 23. 35 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 23 - Darstellung einer Sinuskurve Ein weiteres Beispiel ist die Erstellung von gleichverteilten Zufallszahlen. „R“ verfügt über verschiedene Funktionen, um Pseudozufallszahlen zu generieren. Mit der Funktion runif() können gleichverteilte Pseudozufallszahlen erzeugt werden. Mit der Funktion rnorm() können normalverteilte Pseudozufallszahlen erzeugt werden. In Abbildung 24 wurden 50 Realisationen einer gleichverteilten Zufallsvariable gezogen. Die Zufallszahlen nehmen Werte zwischen 1 und 6 an . Abbildung 24 - Würfelsimulation Tipp: Mit „R“ werden selbstverständlich keine echten Zufallszahlen generiert, sondern es werden sogenannte Pseudozufallszahlen erzeugt. „R“ verwendet sehr gute ZufallszahlenAlgorithmen wie den Mersenne-Twister–Algorithmus. Weitere Informationen zum verwendeten Zufallszahlengenerator bekommt man mit help(RNG). Zusätzlich gibt es noch weitere Pakete mit Pseudozufallszahlengeneratoren (PRNGs). Das Paket random ermöglicht sogar den Import von angeblich echten Zufallszahlen. 36 eexxtteennd deed dR Raasscchh m mood deelliinng g Mit dem Befehl scatter3d (Abbildung 25) können 3D-Grafiken erstellt werden. Der Befehl scat scatter3d() stammt aus dem Softwarepaket „Rcmdr“ (R-Commander). Abbildung 25 - Befehl für eine 3D-Ausgabe Das Ergebnis des Befehls scatter3d() scatter3d() ist in Abbildung 26 zu sehen. Abbildung 26 - Darstellung einer 3D-Grafik In dieser Befehlssequenz wird Variable x mit den Sinuswerten von 1 bis 100 gefüllt. Die Variable y wird mit den Kosinus-Werten von 1 bis 100 gefüllt. Variable z enthält das Produkt von x*y. Die Bildschirmdarstellung von scatter3d() ist in Abbildung 28 zu sehen. Abbildung 27 - Befehl zu einer weiteren 3D-Darstellung 37 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 28 - 3D-Darstellung von Sinus und Kosinuswerten Ein letztes grafisches Beispiel gibt es in Abbildung 29 zu sehen. Beispiel/Code: scatter3d(x,sin(x),cos(y),xlab="dritteAchse",ylab="erste Ach Achse", zlab="zweite Achse", surface.col="blue", surface=T, fill=T, fog fogtype="exp") type="exp") Abbildung 29 - ein weiteres 3D-Beispiel 38 eexxtteennd deed dR Raasscchh m mood deelliinng g Tipp: Ein sehr gutes Buch zum Umgang mit Grafiken in „R“ ist „R Graphics“ von Paul Murrell erschienen im Verlag Chapman & Hall/CRC. Im letzten Beispiel (Abbildung 30) wird mittels Monte-Carlo-Simulation die Zahl Pi berechnet. Dazu wird eine kleine Funktion erstellt. An diese Funktion wird die Anzahl der verwendeten Zufallszahlen übergeben. Die Zufallszahlen stammen aus der Gleichverteilung und haben Werte zwischen 0 und 1. Je größer n gewählt wird, desto besser ist die Annäherung an die Zahl Pi. Abbildung 30 - Berechnung von Pi nach der Monte Carlo - Methode Nachdem in diesem Kapitel die Möglichkeiten von „R“ als Taschenrechner gezeigt wurden, gibt es im nächsten Kapitel einen Überblick über „R“-Programmpakete im Bereich der probabilistischen Testtheorie. Zusammenfassung: Die Funktionen plot(), scatter3d() und scatterplot3d() sind Hilfsmittel zur grafischen Darstellung von Funktionen. Der Befehl plot() ist ein Basisbefehl von R und muss nicht geladen werden. scatter3d() ist ein ein Teil des R-Commander. scatterplot3d() ist ein Befehl des gleichnamigen Pakets. 39 eexxtteennd deed dR Raasscchh m mood deelliinng g 6.9 „R“-Software-Pakete im Bereich der IRT Im Moment werden für „R“ folgende Pakete im Bereich der IRT angeboten. - eRm (Mair, Patrick & Hatzinger, Reinhold) - Schätzung von Modellen über die bedingte Maximum-Likelihood-Methode - ltm (Rizopoulos, Dimitris) – Schätzung von Modellen über die Marginal Maximum – Likelihood-Methode - irtoys (Partchev, Ivailo) – Schnittstelle zu Programmen wie ICL, BILOG, ltm - mlIRT (Fox, John) – beschäftigt sich mit Multi–Level–Modellen - mokken(van der Ark, L. Andries) – Funktionen für die Analyse von Mokken-Skalen - MiscPsycho (Doran, Harold) – Schätzung von Rasch-Modellen über die Joint – Maximum Likelihood – Methode 40 eexxtteennd deed dR Raasscchh m mood deelliinng g 7 Daten austauschen 7.1 Der Datenimport Dieses Kapitel zeigt, wie Daten in „R“ importiert werden können. Einerseits geht das mit Syntaxbefehlen. Vor allem aber für Anfänger empfiehlt sich der R-Commander. Im Folgenden wird mittels R-Commander gezeigt, wie Daten aus verschiedenen Datenquellen importiert werden können. Als Beispiel zeigen wir dies mit einer SPSS-Datei. Bevor wir mit dem Import der Daten ins „R“ beginnen können, muss der R-Commander geladen werden. Dies geschieht mit folgendem Befehl: libra library(Rcmdr) ry(Rcmdr Abbildung 31 - R-Commander laden Der R-Commander wird geladen und automatisch gestartet. Nach dem Start erhalten wir das Bild in Abbildung 32. Abbildung 32 - der R-Commander ist einsatzbereit 41 eexxtteennd deed dR Raasscchh m mood deelliinng g Tipp: Wenn Sie den R-Commander aus welchen Gründen auch immer beenden, können Sie ihn später mit dem Befehl Commander() wieder starten. Da Daten nach „R“ importiert werden sollen, ist hier der Menüpunkt Datenmanagement von Interesse. Hinter diesem Menüpunkt verstecken sich die Import-Möglichkeiten für verschiedene Dateiformate (Abbildung 33). Abbildung 33 - Möglichkeiten des Datenimports Diese Formate sind normale Textdateien (die Dateien können dabei verschiedene Trennsymbole haben wie Komma und Strichpunkt), SPSS - Dateien (viele Anwender werden ihre Daten aus SPSS ins „R“ importieren wollen), Mini-Tab-Dateien (diese Möglichkeit des Imports wird wohl weniger verwendet werden) und Stata–Datendateien. Schließlich können auch Datenbanken und Excel-Dateien über einen entsprechenden Treiber ins „R“ importiert werden. Ein weiteres interessantes Merkmal stellt der Import von Daten direkt aus der Zwischenablage dar. Info: Der Fachausdruck für Trennsymbole ist „Delimiter“. Tipp: Wollen Sie tatsächlich Excel-Dateien ins „R“ importieren, dann verwenden Sie das Package (xlsReadWrite). Von diesem Package gibt es eine Normalversion (gratis) und eine Profi-Version (kommerziell). Für fast alle Zwecke reicht die Standardversion aus. Mit diesem Package können Excel-Dateien sauber ins „R“ importiert werden. 42 eexxtteennd deed dR Raasscchh m mood deelliinng g Es wird nun eine SPSS-Datei über den Menüpunkt Datenmanagement/Importiere Daten/ aus SPSS-Datendatei importiert (siehe Abbildung 34). Abbildung 34 - eine SPSS - Datei soll importiert werden Dazu wählen wir den Unterpunkt aus SPSS Datendatei und gelangen zu dem Dialogfenster in Abbildung 35. Abbildung 35 - Import einer SPSS - Datendatei Das Dialogfenster (Abbildung 35) bietet folgende Möglichkeiten: - Angabe eines Namens für die Datenmatrix (der Name der Datenmatrix ist der Name, mit dem wir unsere Datenmatrix unter „R“ oder dem R-Commander aufrufen können) - Konvertierung der Werteetiketten zu Faktorstufen 43 eexxtteennd deed dR Raasscchh m mood deelliinng g - Angabe der maximalen Anzahl der Werteetiketten für die Umwandlung Standardmäßig konvertiert „R“ die Werteetiketten beim Importieren und man kann unendlich viele Werteetiketten verwenden. Bei der Namenswahl der Datenmatrix sollte man einen kurzen Namen verwenden, der aber trotzdem informativ ist. Unter Umständen müssen Sie den Namen der Datenmatrix sehr oft schreiben. Wichtig: Werteetiketten sind ein unglücklicher Name, der wohl seinen Ursprung in einer allzu wörtlichen Übersetzung vom Englischen ins Deutsche hat. Der Name Label wurde hier nämlich sehr unzutreffend mit Etikette übersetzt. Das stimmt im Prinzip, aber „label“ heißt im Deutschen auch Beschriftung und Name. Und diese beiden Begriffe sind dann auch sinnvoller als Etikette. Man gibt ja schließlich Namen für die entsprechenden Werte an. Als Beispiel kann man an das Geschlecht denken. Hier haben wir die Werte 1 und 2. Diese beiden Werte haben dann die Namen Mann und Frau. SPSS bezeichnet die „value labels“ im Deutschen ganz einfach mit Wertelabels. Das ist auch kein schöner Begriff, aber er verwirrt weniger als das Wort „Werteetikette“. 44 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 36 - Auswahl der Datendatei, die importiert werden soll Nachdem wir auf den „OK-Button gedrückt haben, kommen wir zu einem DateidialogFenster, in dem wir die Datei suchen müssen, die importiert werden soll. In Abbildung 36 können Sie sehen, dass die Datei bereits gefunden wurde. Nachdem die Datei markiert wurde, kann man sie mit einem Klick auf den Button „Öffnen“ nach „R“ importieren. Damit wurde eine erste Datei des kommerziellen SPSS in das OpenSource - Programm „R“ importiert. Wir wechseln nun zum R-Commander und sehen, dass im Skript und im Ausgabefenster eine Befehlssequenz steht. Diese Befehlsequenz haben wir gerade mit dem R-Commander erstellt. Im Skriptfenster des R-Commanders können Sie auch Befehle direkt eingeben. Ausgeführt werden die Befehle, wenn Sie auf den Button „Befehl ausführen“ klicken (siehe Abbildung 37). 45 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 37 –Import der SPSS-Datendatei mittels „read.spss“ Nachdem wir eine Datei nach „R“ importiert haben, wollen wir nun überprüfen, ob dieser Vorgang auch korrekt durchgeführt wurde. Zur Überprüfung werden die beiden Buttons „Datenmatrix bearbeiten“ und „Datenmatrix betrachten“ verwendet, die sich knapp unterhalb der Menüleiste befinden. Mit letzterem Befehl können wir nur die Datenmatrix betrachten. Das ist nicht sehr zweckmäßig. Aus diesem Grund drücken wir auf den Button „Datenmatrix bearbeiten“ drücken (Abbildung 38). Abbildung 38 - die Buttons "Datenmatrix bearbeiten" & "Datenmatrix betrachten" Auf ihrem Bildschirm sollte dann eine Datenmatrix ähnlich Abbildung 39 dargestellt werden. Abbildung 39 – eine Datenmatrix 46 eexxtteennd deed dR Raasscchh m mood deelliinng g Das markierte Feld (Abbildung 39, Spalte V1, Zeile 1) ist zu diesem Zeitpunkt ausgewählt und kann deshalb verändert werden. Der Dateneditor ist nur ein einfacher Editor mit wenigen Mitteln, um Datenmatrizen zu manipulieren. Zur weiteren Information: Der Button „Datenmatrix bearbeiten“ entspricht genau dem Befehl fix(). Genauer gesagt, wenn der Button „Datenmatrix bearbeiten“ angeklickt wird, dann wird der Befehl fix() ausgeführt. Bei kurzen Befehlssequenzen ist es sinnvoll, den Code direkt ins „R“ einzutippen. Wichtig: Die Konvertierung von der Struktur Liste in die Wichtig: Eine Liste in „R“ darf nicht mit einer normalen Liste verwechselt werden, wie man sie von Programmiersprachen wie LISP oder JAVA her kennt. Eine Liste in „R“ ist ein viel komplexeres Gebilde und kann große Datenmengen speichern. Eine Liste ist ein mächtiges Objekt und kann sehr viele Ressourcen benötigen. Wir beenden nun den R-Commander mit dem Menübefehl „Datei/Beenden/des Commanders“. Damit wird nur der R-Commander beendet. Wird der Befehl „Beenden/des Commanders und Rs“ ausgewählt, dann wird auch „R“ beendet (Abbildung 40). Abbildung 40 - R-Commander beenden Der Import der Datenmatrix ist damit abgeschlossen. Mit dem Befehl is.xxx() kann man nun überprüfen, ob ein Objekt von einem bestimmten Typ ist. Mit is.matrix(d) kann 47 eexxtteennd deed dR Raasscchh m mood deelliinng g überprüft werden, ob d eine Matrix ist. Da in diesem Fall ein FALSE als Ergebnis zurückgeliefert wird, ist die d also eine einfache Matrix (siehe Abbildung 41). Abbildung 41 - die Datenmatrix d ist keine Matrix Als nächstes wird mit is.list(d) geprüft, ob es sich bei d um eine Liste handelt (Abbildung 42). Als Ergebnis wird ein TRUE zurückgegeben und wir wissen damit, dass d ein Objekt vom Typ Liste ist. Abbildung 42 - die Datenmatrix d ist eine Liste Um eine Struktur zu konvertieren (in diesem Fall wollen wir eine Liste in eine Matrix umwandeln), braucht man den Befehl as und den Namen der Struktur. Mit der Befehlssequenz „d=as.matrix(d)“ kann d in eine echte Matrix konvertiert werden. Die Konvertierung von einer Liste in eine Matrix hat aber einen Nachteil. Der R-Commander kann mit einfachen Matrizen nicht arbeiten. Nachdem wir nun wissen, wie wir Daten importieren können, müssen die Dateien auch wieder gespeichert werden. Dazu gibt es zwei Möglichkeiten. Man kann die Daten in eine externe Datei exportieren oder man speichert die Daten mit Hilfe eines Workspace. Diese beiden Möglichkeiten werden in den nächsten beiden Kapiteln besprochen. 48 eexxtteennd deed dR Raasscchh m mood deelliinng g 7.2 Der Datenexport – der write()-Befehl Daten brauchen nur dann extern gespeichert werden, wenn sie anderen Programmen (z.B. Excel, SPSS) zur Verfügung gestellt werden sollen. Für die Speicherung von Daten innerhalb von „R“ gibt es die Möglichkeit, alle Daten mit der Menüoption „Datei/Sichere Workspace“ auf einmal zu speichern. Mit dem Befehl write() wird dem Benutzer die Möglichkeit geboten, seine Daten in externen Dateien zu speichern. Mit dem Befehl write(a,“info.txt“) werden die Daten in Variable a in die Datei „info.txt“ geschrieben. Dies ist die einfachste Version des Befehls write() und das Ergebnis der Datensicherung ist nicht immer erwünscht. Mit write.table(data, „c:\ „c:\\patrick\ patrick\\mydata.csv“, sep=“;“) wird eine Tabelle namens „data“ in eine externe Datei mit dem Namen „mydata.csv“ geschrieben. Dabei wird als Trennsymbol der Strichpunkt genommen. Außerdem wird die Datei ins Verzeichnis „patrick“ geschrieben. Der Befehl write.table() bietet viele Optionen an und die Hilfe zu diesem Befehl ist sehr nützlich. Mit write.csv(data, „c:\ „c:\\daten\ daten\\mydata.csv“) werden Daten in die Datei mydata.csv geschrieben, die sich im Verzeichnis „c:\\daten“ befindet. Dabei wird das Komma „,“ als Trennsymbol und der Punkt „.“ als Dezimalpunkt verwendet. Das CSV-Format ist ein einfaches Textformat und eignet sich sehr gut für den Export, da es von fast allen Programmen erkannt wird. CSV steht für „commata separated values“. Mit write.csv2(data, „c:\ „c:\\daten\ daten\\mydata.csv“) werden ebenfalls Daten in die Datei mydata.csv geschrieben, die sich im Verzeichnis „c:\\daten“ befindet. Dabei werden allerdings der Strichpunkt „;“ als Trennsymbol und das Komma „,“ als Dezimalpunkt verwendet. CSV2-Dateien sind an die deutschsprachige Excel-Version angepasst, die das Komma als Dezimalpunkt verwendet. 49 eexxtteennd deed dR Raasscchh m mood deelliinng g Zusätzlich zum einfachen write()-Befehl bietet das „R“-Paket foreign noch zusätzliche Möglichkeiten zum Lesen und Schreiben von Dateien. So kann man mit diesem Package z.B. Dbase – Dateien (.dbf) erstellen. Sollten Daten in Excel-Tabellen (*.xls) gespeichert werden, eignet sich das Package xlsReadWrite mit den Befehlen write.xls und read.xls sehr gut zur Speicherung. Eigene Notizen: 50 eexxtteennd deed dR Raasscchh m mood deelliinng g 7.3 Workspace – eine Möglichkeit zur Datenspeicherung Ein Workspace (Arbeitsplatz) ist eine Möglichkeit, um komplette Projekte zu managen. Der Vorteil von einem Arbeitsplatz ist seine Fähigkeit, mehrere Objekte auf einmal im Speicher halten und verwalten zu können. Diese Objekte können Ergebnisse, Grafiken, Funktionen etc. sein. Wird ein Arbeitsplatz mit „Datei/Sichere Workspace“ gespeichert, dann werden automatisch alle im Workspace enthaltenen Objekte gespeichert. Wird der Workspace wieder geladen, werden automatisch auch alle Objekte geladen. Dies ist die effizienteste Art der Datenspeicherung unter „R“. Um einen Workspace zu speichern, klickt man auf das Menü „Datei/Sichere Workspace“ (Abbildung 43). Abbildung 43 – Sichere Workspace Auf dem Bildschirm öffnet sich ein Datei-Dialogfenster (Abbildung 44). Nun muss man ein Verzeichnis und einen Dateinamen für den Workspace auswählen. Die Endung .RData steht für einen Workspace und sollte nicht geändert werden. Nachdem man sich ein Verzeichnis ausgesucht hat und den Namen eingegeben hat, klickt man auf Speichern. 51 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 44 – Datei zum Speichern auswählen Geladen wird ein Workspace, indem man im Menü „Datei/Lade Workspace“ (Abbildung 45) auswählt. Abbildung 45 – Lade Workspace Im nun erscheinenden Dialogfenster (Abbildung 46) muss man das Verzeichnis und die gespeicherte Workspace - Datei auswählen. Anschließend klickt man auf „Öffnen“ und der Workspace wird geladen. Damit ist der Ladevorgang abgeschlossen. 52 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 46 – Datei auswählen Tipp: Der Workspace ist eine sehr effiziente und einfache Möglichkeit zum Verwalten von Objekten und Projekten. 53 eexxtteennd deed dR Raasscchh m mood deelliinng g 8 extended Rasch modeling eRm Bevor auf das Paket „eRm – extended Rasch Modeling“ eingegangen wird, wird dem Anfänger und interessierten Laien empfohlen, sich eine entsprechende Literatur für die Einarbeitung in die Theorie zu besorgen. Bücher, die für eine Einführung in die Praxis und Theorie des Rasch-Modells geeignet sind Bond, T., & Fox, C. (2001). Applying the Rasch model: Fundamental measurement in the human sciences. Mahwah, NJ: Lawrence Erlbaum Associates, Inc. Baker, F. B., & Kim, S. (2004). Item Response Theory: Parameter Estimation Techniques. (2nd ed.). New York: Dekker. Fischer, G. H. (1974). Einführung in die Theorie psychologischer Tests [Introduction to Mental Test Theory]. Huber, Bern. Kubinger, K.D. (1989). Aktueller Stand und kritische Würdigung der probabilistischen Testtheorie. In K.D. Kubinger (Hrsg.), Moderne Testtheorie - Ein Abriß samt neuesten Beiträgen (S. 19-83), (2. Aufl.). München: Psychologie Verlags Union. Kubinger, K.D. (2003). Skalierung. In K.D. Kubinger & R.S. Jäger (Hrsg.), Schlüsselbegriffe der Psychologischen Diagnostik (S. 387-390). Weinheim: Beltz/PVU. Rasch, G. (1960). Probabilistic models for some intelligence and attainment tests. Copenhagen: Danish Institute for Educational Research. Rost, J. (2004). Lehrbuch Testtheorie - Testkonstruktion. (2. Aufl.). Bern: Huber. Für ein erstes Arbeiten mit eRm werden keine besonderen Kenntnisse vorausgesetzt, wobei natürlich gute Kenntnisse des Rasch-Modells von Vorteil sind. 54 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.1 eRm - extended Rasch modeling (Mair & Hatzinger, 2006) eRm ist ein Programmpaket für „R“, das anhand der bedingten Maximum-LikelihoodSchätzung (CML = conditional maximum likelihood) verschiedene Modelle aus der Familie des Rasch-Modells analysiert. Das dichotome logistische Raschmodell ist das einfachste Modell. Das LPCM ist das komplexeste Modell. Jedes andere Modell kann durch ein LPCM gebildet werden. eRm kann folgende Modelle über die bedingte Maximum-Likelihood-Schätzung analysieren - das dichotome logistische Rasch-Modell (RM) (Rasch, 1960)- das einfache dichotome, logistische Rasch-Modell mit einem Parameter – die Analyse dieses Modells mit eRm wird in diesem Kapitel ausführlich behandelt - das linear-logistische Test-Modell (LLTM) (Scheiblechner, 1972 & Fischer, 1973) linear logistic test model – das lineare logistische Testmodell und seine Anwendungsmöglichkeiten werden in diesem Manual nicht besprochen. Es ist allerdings für spätere Versionen geplant, auch das LLTM zu besprechen. - das Ratingskalen-Modell (RSM) (Andrich, 1978) - das partial-credit Modell (PCM ) (Masters, 1982) - das lineare Ratingskalen–Modell (LRSM) (Fischer & Parzer, 1991) - das lineare partial-credit Modell (LPCM) (Fischer & Ponocny, 1994) – das lineare partial-credit Modell ist das allgemeinste Modell in der Familie der Rasch-Modelle und alle anderen Modelle können durch das LPCM dargestellt werden. Da das einfache, dichotome Rasch-Modell das wichtigste Modell ist, wird dieses Modell besprochen. Die Modelle LLTM, RSM, PCM, LRSM und LPCM werden in der ersten 55 eexxtteennd deed dR Raasscchh m mood deelliinng g Version des Handbuchs nicht besprochen, für zukünftige Versionen ist allerdings geplant, auch diese Modelle zu behandeln. eRm verfügt über folgende Befehle zur Rasch-Modell-Analyse: − RM() – Datenanalyse nach dem einfachen Rasch-Modell − LLTM() – Datenanalyse nach dem linear-logistischen Test-Modell − RSM() – Datenanalyse nach dem Ratingskalen-Modell − PCM() – Datenanalyse nach dem partial-credit Modell − LRSM() – Datenanalyse nach dem linearen Ratingskalen-Modell − LPCM() – Datenanalyse nach dem linearen partial-credit Modell Das eRm bietet neben Modellschätzungen noch folgende Möglichkeiten an - Schätzung der Personenparameter (siehe Kapitel 8.5.1) - Überprüfung des Modells nach dem bedingten Likelihood-Quotiententest (Andersen, 1973) (siehe Kapitel 8.5.2) 56 - Überprüfung des Modells mittels Grafischem Modelltest (siehe Kapitel 8.5.3) - Überprüfung der Items mittels Waldtest (siehe Kapitel 8.5.4) - Berechnung von Personfit und Itemfit – Statistiken (siehe Kapitel 8.5.5) - Berechnung der Informationsindices (siehe Kapitel 8.5.6) eexxtteennd deed dR Raasscchh m mood deelliinng g 8.2 Die Analyse eines Rasch-Modells (RM) Abbildung 47 - Formel des dichotomen, logistischen Rasch-Modells Da es sich beim Programmpaket eRm um ein spezielles Paket zur Analyse von RaschModellen handelt, wird hier davon ausgegangen, dass der Leser bereits theoretische Kenntnisse über das Rasch-Modell hat. Sollte dies nicht der Fall sein, gibt es verschiedene Bücher, die für einen Einstieg in die IRT gut geeignet sind. Aus diesem Grund wird hier auf eine Einführung verzichtet. Für einen Einblick hinter die Theorie von eRm eignen sich besonders die folgenden Artikel: − Mair, P., & Hatzinger, R. (2007). Extended Rasch modeling: The eRm package for the application of IRT Models in R. Journal of Statistical Software, 20, 9. URL http://www.jstatsoft.org/v20/i09/. − Mair, P., & Hatzinger, R. (2007). CML based estimation of extended Rasch models with the eRm package in “R”. Psychology Science, 49, 26-43. Bevor die Arbeit mit eRm beginnen kann, muss im ersten Schritt eRm geladen werden. Dazu gibt man folgendes ein: library(eRm) Nach wenigen Sekunden sollte das eRm - Programmpaket geladen sein (Abbildung 48) und es wird folgende Nachricht ausgegeben: Abbildung 48 – eRm wurde geladen 57 eexxtteennd deed dR Raasscchh m mood deelliinng g Für die Berechnungen werden Daten benötigt. Wenn eigene Datenmatrizen verwendet werden sollen, kann man so vorgehen, wie es im vorigen Kapitel beschrieben wurde - man lädt den R-Commander und importiert die Daten. In diesem Beispiel wurde von den Autoren bereits eine kleine CSV-Datei vorbereitet. Stehen keine Daten zur Verfügung, kann man sich vom Arbeitsbereich Psychologische Diagnostik der Fakultät für Psychologie eine entsprechende Datenmatrix von der Homepage www.univie.ac.at/psychologie/diagnostik kopieren. Nach dem erfolgreichen Datenimport wird eine erste Rasch-Modell-Analyse durchgeführt. Dazu wird folgende Befehlssequenz in die R-GUI eingegeben(siehe Abbildung 49) RM(mat1) Zur weiteren Information: CSV-Dateien haben den Vorteil, dass sie sehr einfach aufgebaut sind und von den meisten Programmen wie SPSS, Excel, R etc. ohne Probleme verarbeitet werden können. Ein weiterer Vorteil der CSV– Dateien besteht darin, dass sie aufgrund ihres einfachen Aufbaus programmunabhängig sind. Abbildung 49 - Berechnungen mit dem Rasch-Modell RM() ist jener wichtige Befehl, mit dem Analysen und Parameterschätzungen mittels dichotomen logistischen Rasch-Modells durchgeführt werden. mat1 ist der Name unserer Datenmatrix. Hat der Leser einen anderen Namen für seine Datenmatrix gewählt, dann muss selbstverständlich dieser Name in den Befehl RM() eingefügt werden. 58 eexxtteennd deed dR Raasscchh m mood deelliinng g Wichtig: Vergessen Sie bitte nicht, dass „R“ zwischen Groß– und Kleinschreibung strikt unterscheidet. Das bedeutet, dass RM, rm, Rm und rM vier unterschiedliche Bedeutungen haben. Wird RM mit rm verwechselt, kann das fatale Auswirkungen haben. Während nämlich RM() eine Rasch-Modell –Analyse durchführt, ist rm() der Standardbefehl, um ein Objekt aus dem Speicher zu löschen. Das Ergebnis von RM(mat1) sieht man in Abbildung 50. Am Anfang der Ausgabe wird der von eRm verarbeitete Befehl („Call“) ausgegeben. In diesem Beispiel lautet der „Call“: RM(X=mat1). Danach wird die bedingte Log-Likelihood ausgegeben. In unserem Fall beträgt die Log-Likelihood ungefähr -4731. Im Anschluss werden 14 eta-Parameter ausgegeben. Für jeden dieser Parameter erhält man eine Schätzung (Estimate) und den dazugehörigen Standardfehler (Std.Err). Abbildung 50 - die Ausgabe eines einfachen RM Wichtig: Überprüfen Sie immer, ob es sich um Itemschwierigkeits-Parameter oder um Itemleichtigkeits-Parameter handelt. 59 eexxtteennd deed dR Raasscchh m mood deelliinng g Zur weiteren Information: Wie lange die Berechnungen dauern, hängt sowohl von der Größe Ihrer Datenmatrix (vor allem die Anzahl der Items entscheidet über die Rechendauer) als auch von der Struktur Ihrer Datenmatrix und von den verwendeten Befehlsoptionen ab. Je mehr Untergruppen verwendet werden, desto länger dauern die Berechnungen. Auch der Standardfehler spielt eine Rolle – wird er berechnet, dann dauern die Analysen erheblich länger. Nachdem die erste Berechnung erfolgreich war und Schätzwerte für die Itemparameter zurückgegeben wurden, wird eine weitere Rasch-Modell–Analyse durchgeführt. Im Gegensatz zur ersten Analyse werden die Ergebnisse diesmal in der Variablen a gespeichert. Dazu wird folgende Befehlssequenz eingegeben: a=RM(mat1) (Abbildung 51) oder a<-RM(mat1). Es wird hier aber nochmals empfohlen, den Pfeil als Zuweisungs-Operator zu verwenden. Genauer gesagt wird in Abbildung 51 ein Rm-Objekt von der Funktion RM() erstellt und dieses Rm-Objekt wird dann in Variable a gespeichert. Objekte werden etwas später noch genauer erklärt. Es soll hier nur gesagt werden, dass alles in „R“ ein Objekt ist. Objekte sind unter anderem sehr gut für die Handhabung von zusammengehörigen Daten geeignet, die aber von unterschiedlichem Typ (z.B. Matrizen, Vektoren, Text, Funktionen, etc) sind. Wichtig: Der Einfachheit halber wird hier gesagt, dass durch die RM()-Funktion ein RmObjekt erstellt wird. Das ist richtig, aber gleichzeitig ist dieses Objekt auch vom Typ dRm und eRm. Dies soll der Vollständigkeit halber erwähnt werden. Der interessierte Leser wird noch auf Kapitel 11 verwiesen. Abbildung 51 - eine weitere RM - Berechnung Nachdem ein Rm-Objekt in der Variablen a gespeichert wurde, werden keine Ergebnisse mehr am Bildschirm ausgegeben. Der Vorteil dieser Vorgangsweise liegt darin, dass die in Variable a gespeicherten Ergebnisse weiterverarbeitet werden können. Außerdem werden 60 eexxtteennd deed dR Raasscchh m mood deelliinng g verschiedene Ergebnisse (Objekte) als Eingabe für andere Funktionen benötigt. So braucht z.B. LRtest() (diese Funktion berechnet einen bedingten Likelihood-Quotiententest nach Andersen) ein Rm-Objekt als Input. Um zu überprüfen, ob die Ergebnisse der Berechnung tatsächlich im Objekt a gespeichert wurden, geben wir a in die Benutzeroberfläche ein (Abbildung 52). Abbildung 52 - Ausgabe der Variablen a 61 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.3 Die Befehle print(), summary() und die Struktur von RmObjekten Die Ausgabe in Abbildung 53 erhält man auch mit dem print() – Befehl. Man gibt dazu die folgende Befehlssequenz ein: print(a) Abbildung 53 - Ausgabe mit Hilfe des Befehls print() Bis jetzt wurden die Daten nach dem einfachen Rasch-Modell mit dem Befehl RM() analysiert und gleichzeitig die Itemparameter und Standardfehler geschätzt. Anschließend sind die Ergebnisse als ein Rm-Objekt in der Variablen a gespeichert worden. Für eine zusammenfassende Darstellung der Ergebnisse verwendet man den Befehl sum summary() und gibt folgende Befehlssequenz ein: sum summary(a) 62 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 54 - der Befehl summary() Nach der Eingabe von summary(a) (Abbildung 54) wird das Ergebnis auf dem Bildschirm ausgegeben (Abbildung 55). Wie man sehen kann, werden bei weitem mehr Informationen über unsere Ergebnisse ausgegeben als dies mit dem print()-Befehl der Fall war. Vor allem werden hier die für die RM-Analyse wichtigen beta-Parameter ausgegeben. Die Ausgabe beinhaltet dabei folgende Werte: - Call (der verarbeitete Befehl wird ausgegeben). - die Log-Likelihood – dieser Wert wird für verschiedene Berechnungen intern von eRm gebraucht. Likelihood bedeutet übersetzt Mutmaßlichkeit oder Plausibilität und gibt an, wie wahrscheinlich das Auftreten einer Datenmenge unter einem bestimmten Modell ist. Für weitere Erklärungen zur Likelihood siehe Fischer (1974) oder Rost (2004). - die Anzahl der Iterationen – sie gibt an, wie viele Durchläufe der Schätzalgorithmus benötigte, um die Bedingung für eine Beendigung zu erfüllen. - zwei Tabellen: Die erste Tabelle „Basic Parameters (eta) …“ bezieht sich wieder auf die eta-Parameter. Die eta-Parameter sind bei der RM-Analyse nicht so bedeutend wie die beta-Parameter, die in der zweiten Tabelle ausgegeben und in diesem Handbuch verwendet werden. Für die eta-Parameter und die beta-Parameter werden folgende Werte ausgegeben: o in der ersten Spalte die Namen der Itemparameter o in der zweiten Spalte die Parameterschätzungen o in der dritten Spalte die Standardfehler o in der vierten Spalte die unteren Grenzen der Konfidenzintervalle o und in der fünften Spalte die oberen Grenzen der Konfidenzintervalle Die Konfidenzintervalle beruhen dabei auf einer 95%-Wahrscheinlichkeit. Aus Platzgründen wurde darauf verzichtet alle eta-Parameter anzuzeigen (Abbildung 55). 63 eexxtteennd deed dR Raasscchh m mood deelliinng g Results of RM estimation: Call: RM(X = p1000i15.mat, sum0 = TRUE) Conditional log-likelihood: -4731.239 Number of iterations: 24 Number of parameters: 14 Basic Parameters (eta) with 0.95 CI: Estimate Std. Error lower CI upper CI eta 1 -1.707 0.088 -1.880 -1.535 . . . eta 14 1.087 0.078 0.933 1.240 Item Parameters (beta) with 0.95 CI: Estimate Std. Error lower CI upper CI beta col1 1.954 0.088 1.781 2.126 beta col2 -1.707 0.088 -1.880 -1.535 beta col3 2.614 0.101 2.415 2.813 beta col4 2.503 0.099 2.310 2.697 beta col5 -0.356 0.076 -0.504 -0.208 beta col6 -0.184 0.075 -0.331 -0.037 beta col7 1.800 0.086 1.632 1.968 beta col8 -1.684 0.088 -1.855 -1.512 beta col9 -1.462 0.084 -1.627 -1.296 beta col10 -1.310 0.083 -1.472 -1.148 beta col11 -0.752 0.078 -0.904 -0.600 beta col12 -1.660 0.087 -1.831 -1.489 beta col13 -0.409 0.076 -0.558 -0.261 beta col14 -0.433 0.076 -0.582 -0.285 beta col15 1.087 0.078 0.933 1.240 Abbildung 55 – die Ausgabe von summary(a) Mit dem Befehl summary(a) werden die Ergebnisse der Berechnungen zuerst zusammengefasst, dann formatiert und schließlich übersichtlich ausgegeben. Sollen wirklich alle in einem Objekt gespeicherten Informationen ausgegeben werden, dann verwendet man den Befehl str() und gibt folgendes ein: str(a) (Abbildung 56). Abbildung 56 - der Befehl str() 64 eexxtteennd deed dR Raasscchh m mood deelliinng g Mit diesem Befehl werden die komplette Objektstruktur und alle Daten ausgegeben, die in der Variablen a gespeichert sind. Sind in einer Unterstruktur zu viele Daten für eine Ausgabe gespeichert, dann wird der Benutzer mit 3 Punkten … darüber informiert (Abbildung 57). Die Bildschirmausgabe des Objekts in Variable a wirkt im ersten Moment verwirrend, es kann aber hilfreich sein, sich die Strukturen und Daten in einem Objekt anzuschauen (Abbildung 57). Abbildung 57 - die Objektstruktur, die in Variable a gespeichert ist Ein Teil der in Abbildung 57 dargestellten Daten wird für die Ergebnisausgabe am Bildschirm verwendet, ein Teil dieser Daten wird aber auch für weitergehende Berechnungen intern verwendet. So benötigt z.B. der Befehl Waldtest() ein RM-Objekt. Ähnliches gilt auch für andere Funktionen. So brauchen die Funktionen zur Berechnung der Fit-Statistiken als Eingabe ein PPAR-Objekt, wie es von der Funktion person.parameter() erstellt wird. Objekte werden in Kapitel 10 eingehender behandelt. 65 eexxtteennd deed dR Raasscchh m mood deelliinng g Da das Rm-Objekt in Variable a wichtige Daten enthält, kommt man zu der Frage, ob und wie man auf diese internen Daten zugreifen kann. Der Zugriff auf interne Strukturen geschieht mittels des „$“-Operators. Man verwendet den Namen des Objektes (in diesem Fall wäre das a), hängt das $-Zeichen an den Objektnamen an und hängt daran wiederum den Namen der internen Struktur, die man entweder ausgeben oder ändern will. Verwendet man das RmObjekt aus Abbildung 58, dann kann man sich mit „a$betapar“ die Itemparameter ausgeben lassen, Mit dem $-Zeichen kann man also auf die internen Strukturen eines Objektes zugreifen. Will man diese Strukturen ändern, sollte man Vorsicht walten lassen und eine Kopie des Originalobjektes erstellen. So eine Kopie kann man mit dem Befehl a <- b generieren. Abbildung 58 - Zugriff auf interne Objektstrukturen Mit dem Befehl a$betapar kann man sich direkt die Itemparameter anzeigen lassen. Selbstverständlich kann man die Itemparameter auch in einer Variablen speichern. (z.B. c=a$betapar). Wichtig: Bitte verwenden Sie nur die beta-Parameter als Itemparameter. Die betaParameter werden aus den eta-Parametern gebildet. Genauer gesagt, die Itemparameter (also die beta-Parameter) werden als eine Summe von additiven, gewichteten Basisparametern (eta-Parameter) gebildet. 66 eexxtteennd deed dR Raasscchh m mood deelliinng g Das Objekt RM und die Bedeutung von verschiedenen Substrukturen $X: in dieser Struktur wird diejenige Datenmatrix gespeichert, die bei der Analyse verwendet wurde $X01: mit Hilfe dieser Struktur stehen dem Benutzer konstante Namen für die Personen und Items zur Verfügung; dies ist wichtig, wenn Items oder Personen ausgeschlossen werden müssen $model: in dieser Struktur steht die Abkürzung des verwendeten Modells (z.B. RM steht für das Rasch-Modell, LLTM steht für das linear logistische Testmodell, …) $loglik: der Wert der Log-Likelihood $npar: enthält die Anzahl der eta–Parameter $iter: Anzahl der Iterationen (der Durchläufe), die gebraucht wurden, bis das Kriterium zum Beenden erreicht wurde $convergence: gibt an, ob der Algorithmus konvergiert hat $etapar: enthält die eta-Parameter $se.eta: enthält die Standardfehler der eta-Parameter $hessian: enthält die Hesse-Matrix $betapar: enthält die Itemparameter $se.beta: enthält die Standardfehler der Itemparameter $W: hier wird die Designmatrix gespeichert; diese Matrix definiert die Normierung der Itemparameter; sie spielt aber beim einfachen Rasch-Modell eine untergeordnete Rolle. $call: gibt den von eRm verarbeiteten Befehl aus Abbildung 59 - Beschreibung der Strukturen eines Rm-Objektes Zusammenfassung: Durch die Verwendung des RM() – Befehls wird ein Objekt vom Typ Rm erzeugt. Dieses Rm-Objekt, das gleichzeitig auch ein dRm-Objekt und ein eRm-Objekt ist, verfügt über interne Strukturen, die mit dem Befehl str(Objektname) angesehen werden können. Zugreifen kann man auf die internen Strukturen mit Hilfe des „$“-Zeichens. 67 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.4 Möglichkeiten des Befehls RM() Abbildung 60 - Möglichkeiten des Befehls RM() Die Variablen, die zur Übergabe von Werten an eine Funktion verwendet werden (in unserem Fall X, se, W etc. nennt man Parameter. Wie man anhand von Abbildung 60 sehen kann, kann man nicht nur die Datenmatrix X , sondern auch verschiedene andere Parameterwerte an die Funktion RM() übergeben. Der Parameter W (Designmatrix) braucht bei der Analyse von Rasch-Modellen nicht spezifiziert werden. (Man könnte hier eine eigene Designmatrix verwenden, wenn man z.B. auf das 3. Item normieren will). se ist eine logische Variable, die nur zwei Werte annehmen kann. T (TRUE) und F (FALSE). Wird diese Variable auf FALSE gesetzt, dann werden die Standardfehler bei Analysen nicht berechnet. Dies hat einen starken Einfluss auf die Rechenzeit. Nach Delphi-Schätzung kann man ungefähr die Hälfte der Rechenzeit einsparen, wenn die Standardfehler nicht berechnet werden. Wird se nicht explizit auf FALSE gesetzt, dann werden die Standardfehler automatisch berechnet. sum0 ist ebenfalls eine logische Variable, die nur die Werte TRUE und FALSE annehmen kann. Enthält sum0 den Wert TRUE, dann wird bei der Berechnung die Summennormierung verwendet. Hat sum0 den Wert FALSE, dann wird die Itemnormierung verwendet. Wenn nichts anderes angegeben wird, dann ist sum0 auf TRUE gesetzt und es wird die Summennormierung verwendet. etastart - normalerweise verwendet die RM()-Funktion den Startwert 0 für die Itemparameter, wenn es mit der Datenanalyse beginnt. Es kann nun aber sein, dass man 68 eexxtteennd deed dR Raasscchh m mood deelliinng g zusätzliche Informationen über die Itemparameter hat. Diese Informationen kann man an die Funktion RM() übergeben. Dazu übergibt man die vermuteten Parameterschätzwerte als Vektor an den Parameter etastart. Die Übergabe von Startwerten an RM() ist dann sinnvoll, wenn die Berechnungen sehr lange dauern und man ungefähr weiß, wie die Parameterwerte der einzelnen Items aussehen. Eigene Notizen: 69 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5 Weitere Berechungsmöglichkeiten 8.5.1 Schätzung von Personenparameter Im Gegensatz zu den Itemparametern, die automatisch bei der Analyse des Rasch-Modells geschätzt werden, müssen die Personenparameter explizit mittels der Funktion per person.parameter() son.parameter geschätzt werden. Dazu muss der Inhalt der Variablen a (das Ergebnis unserer vorherigen Rasch-Modell-Analyse) an die Funktion person.parameter() übergeben werden. Die Befehlssequenz schaut dann so aus: ppar1 = person.parameter(a) Abbildung 61 – die Personenparameter werden geschätzt Nachdem die Eingabe mit der [RETURN]-Taste beendet wurde, werden die Personenparameter geschätzt. Dabei gibt die Funktion person.parameter() ein pparObjekt zurück. Dieses Objekt „ppar“ wird in der Variablen ppar1 gespeichert. Das Ergebnis bzw. das Objekt wird in einer Variablen gespeichert, weil andere Funktionen (z.B. FitStatistiken) dieses Ergebnis als Input brauchen. Die bereits aus vorhergehenden Kapiteln bekannten Befehle print(), summary summary() und str() können wieder zur Ausgabe der Personenparameterschätzungen verwendet werden. Wir geben print(ppar1) ein und auf dem Bildschirm werden die Personenparameter von rv=1 bis rv=14 ausgegeben. rv steht für den Personenscore, also für die Anzahl der Items, die eine Person v gelöst hat. Wie der Leser aus der Theorie weiß, können für Personenrohscores, bei welchen kein Item gelöst wurde bzw. für Personenrohscores, bei denen alle Items gelöst wurden, keine Personenparameter geschätzt werden. Diese Personenparameter können von eRm „nur“ interpoliert werden. Aus diesem Grund ist für diese Personenparameter kein Standardfehler angegeben (Abbildung 62). 70 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 62 – Ausgabe der Personenparameter von rv=0 bis rv=15 Mit dem Befehl summary (ppar1) kann man sich eine Zusammenfassung ausgeben lassen, wobei in diesem Fall das Wort Zusammenfassung nicht gut gewählt ist, weil summa summary(ppar1) die Personenparameter von allen Personen inklusive der Standardfehler ausgibt. Zusätzlich werden wieder die Collapsed Log-Likelihood, die Anzahl der Iterationen und die Anzahl der verwendeten Parameter ausgegeben. Collapsed LogLikelihood bedeutet, dass Personen mit dem gleichen Rohscore zusammengefasst werden, um die Berechnungen zu beschleunigen. 71 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 63 - Ausgabe der Personenparameter Bei den Personenparametern ist der Befehl summary() alles andere als eine Zusammenfassung und gibt für die Matrix mat1 die Personenparameter für alle 979 Personen aus. Aus Platzgründen werden in Abbildung 63 nur die Daten der ersten 10 Personen dargestellt. Folgende Daten werden von summary bei ppar-Objekten ausgegeben: - die Collapsed Log-Likelihood - die Anzahl der Iterationen - die Anzahl der Parameter - eine Tabelle: o in der ersten Spalte steht der Name der Person o in der zweiten Spalte steht die Schätzung des Personenparameters o in der dritten Spalte steht der Standardfehler o in der vierten und fünften Spalte werden wieder die untere und die obere Grenze des 95%-Konfidenzintervalls angegeben. 72 eexxtteennd deed dR Raasscchh m mood deelliinng g Wie bereits erwähnt wurde, sind in Objekten (ppar1 ist ein ppar-Objekt) viele Informationen in strukturierter Weise gespeichert. Um sich alle Informationen eines Objekts anzusehen, verwenden wir den Befehl str(ppar1). In Abbildung 64 kann man die komplette interne Struktur des Objektes ppar1 und alle darin gespeicherten Daten sehen. Auf die einzelnen Substrukturen kann man wieder mittels „$“-Operator zugreifen. Um beispielsweise alle Personenparameter auszugeben, gibt man ppar1$thetapar ein. Das Ergebnis kann man sich in Abbildung 65 ansehen. Tipp: Will man sich nur die Namen der Objektstrukturen ausgeben lassen, ist der Befehl names() besser geeignet, da dann nur die Namen der Objektstrukturen ausgegeben werden. 73 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 64 - die komplette interne Struktur des Objektes ppar Abbildung 65 - die Personenparameter in kompakter Darstellung 74 eexxtteennd deed dR Raasscchh m mood deelliinng g Da die Schätzung der Personenparameter wichtig ist, sollen hier die Strukturen des Objektes ppar kurz beschrieben werden. Einige Strukturen sind schon von der Beschreibung des RmObjektes her bekannt. Das Objekt ppar und die Bedeutung von verschiedenen Substrukturen $X: in dieser Struktur wird die Datenmatrix gespeichert, die für die Berechnungen verwendet worden ist $X01: mit Hilfe dieser Struktur stehen dem Benutzer konstante Namen für die Personen und Items zur Verfügung; dies ist wichtig, da es ansonsten sehr mühsam wäre, den Überblick über die Daten zu behalten, wenn Items oder Personen ausgeschlossen werden $W: hier wird die Designmatrix gespeichert $model: in dieser Struktur steht die Abkürzung des verwendeten Modells (z.B. RM steht für das Rasch-Modell, LLTM steht für das linear logistische Testmodell etc.) $loglik: enthält den Wert der Log-Likelihood $npar: Anzahl der Parameter $iter: Anzahl der Iterationen (der Durchläufe), die gebraucht wurden, bis das Kriterium zum Beenden erreicht wurde $betapar: enthält die Itemparameter – diese Struktur ist identisch mit jener im Objekt RM $thetapar: diese Struktur enthält die Personenparameter $se.theta: enthält die Standardfehler der Personenparameter $pred.list: in dieser Struktur sind die Personenparameter von rv=0 bis rv=15 gespeichert (rv … Rohwert) $hessian: enthält die geschätzte Hessematrix – diese Struktur wird vom Benutzer nicht benötigt $mpoints: enthält die Anzahl der Messpunkte $pers.ex: enthält die ausgeschlossenen Personen $gmemb: enthält die bei der Schätzung verwendeten Personen 75 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Struktur $pers.ex des Objektes ppar Mit Hilfe von ppar1$pers.ex kann man kontrollieren, wieso Personen von einer Personenparameterschätzung ausgeschlossen worden sind. Nach der Eingabe von ppar1$pers.ex werden die Nummern von allen ausgeschlossenen Personen ausgegeben. Abbildung 66 – von der Schätzung ausgeschlossene Personen Mit der Befehlssequenz length(ppar1$pers.ex) erhält man die Anzahl der Personen, die ausgeschlossen wurden. Der Befehl length() gibt die Länge einer Struktur (z.B. Vektor) an. In diesem Fall wird die Zahl 21 ausgegeben. Wie wir bereits wissen, wurden 21 Personen ausgeschlossen. An den Werten ppar1$X[33, ] und ppar1$X[34, ] soll nun kontrolliert werden, wieso diese von der Berechnung ausgeschlossen worden sind. Dabei erhalten wir das Ergebnis in Abbildung 67. Abbildung 67 - Ergebnisse der Personen 33 und 34 Aus Abbildung 67 folgt, dass Person 33 alle Items richtig beantwortet hat. Damit kann der Personenparameter nicht geschätzt werden und Person 33 muss von der Schätzung ausgeschlossen werden. Person 34 dagegen hat kein Item gelöst und muss ebenfalls ausgeschlossen werden. Um dennoch Parameter für die Extremscores (kein Item gelöst, alle Items gelöst) zu erhalten, wendet eRm eine Interpolation an. 76 eexxtteennd deed dR Raasscchh m mood deelliinng g Wichtig: eRm kann keine Personenparameter schätzen, wenn alle Items gelöst wurden (in unserem Beispiel rv=15) oder wenn kein Item gelöst wurde (rv=0). Um dennoch Personenparameter ausgeben zu können, werden diese Werte interpoliert. Eigene Notizen: 77 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.2 Der bedingte Likelihood-Quotiententest (nach Andersen) Nachdem in den vorhergehenden Kapiteln die Personen- und Itemparameter für das dichotome, logistische Rasch-Modell geschätzt wurden, sollen in den nächsten Kapiteln Möglichkeiten demonstriert werden wie man Daten auf Rasch-Modell-Konformität überprüfen kann. Der Bedingte Likelihood-Quotiententest (LQT bzw. LRT) von Andersen (1973) überprüft, ob sich die zu analysierenden Daten Rasch-Modell-konform verhalten. Dazu teilt man in einem ersten Schritt die Stichprobe in zwei Personengruppen auf (Teilungskriterien sind dabei Geschlecht, Alter, Leistung im Test, Schule etc.) und berechnet die Likelihoods der beiden Untergruppen. In einem zweiten Schritt wird dann der CHi²-Wert berechnet. Für den LQT gilt dabei: Ist der errechnetet Chi²-Wert kleiner als der kritische Chi²-Wert, dann wird die H0: „Das Rasch-Modell gilt“ beibehalten. Ist der errechnete Chi²-Wert größer als der kritische Chi²-Wert, dann muss die H0: „Das Rasch-Modell gilt“ verworfen werden. Mit jedem nicht signifikanten LQT steigt dabei die Wahrscheinlichkeit, dass die H0 gültig ist (Popper spricht dabei vom „Grad der Bewährung“). Der Befehl zur Berechnung eines bedingten Likelihood-Quotiententests nach Andersen lautet: LRtest(). Nach der Eingabe von LRtest erhält man die Abbildung 68. LRtest (object, splitcr = "median", se = FALSE) Abbildung 68 - die Möglichkeiten des LRtest Wichtig: Wenn Mittelwert oder Median als Trennungskriterium verwendet werden, dann müssen die Werte „mean“ und „median“ tatsächlich MIT den Anführungszeichen an LRtest() übergeben werden. Ansonsten kommt es nämlich zu einer Fehlermeldung und die Berechnung wird nicht gestartet. Der Grund dafür liegt am Umstand, dass R mean und median ohne Anführungszeichen als Variablen interpretiert. Da diese Variablen aber nicht existieren, kommt es zu einer Fehlermeldung. Auch bei der Funktion Waldtest() müssen mean und median in Anführungszeichen übergeben werden. 78 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Eingabemöglichkeiten für die Funktion LRtest() Anhand von Abbildung 68 kann man erkennen, dass verschiedene Werte an den Befehl LRtest() übergeben werden können. object muss angegeben werden und muss ein Rm-Objekt sein. Rm-Objekte werden durch die Verwendung der Funktion RM() erzeugt. Im Einführungsbeispiel wurde bereits ein RmObjekt erzeugt und in Variable a gespeichert. Dieses Objekt soll in diesem Beispiel verwendet werden. Der LRtest akzeptiert derzeit nur Rm-Objekte als Input. Damit kann LRtest() nur für das einfache Rasch-Modell verwendet werden. splitcr ist das Teilungskriterium (Tk). Normalerweise werden externe Teilungskriterien wie Alter, Geschlecht etc. oder interne Teilungskriterien wie die Anzahl gelöster Items (Mittelwerte, Median) verwendet. Wird kein Teilungskriterium (Tk) angegeben, dann verwendet LRtest() automatisch den Median. Wird ein externes Teilungskriterium verwendet, müssen die Werte als ein Vektor an den Parameter splitcr übergeben werden. Vektoren können u. a. mit der Funktion c() erstellt werden. Mit b=c(1,2,3,4,5) wird zum Beispiel ein Vektor erstellt, der die Werte 1, 2, 3, 4 und 5 enthält. Natürlich muss der Vektor, der an splitcr übergeben wird, für jede Person im Datensatz einen Wert haben. se ist eine logische Variable, die nur zwei Werte annehmen kann. T (TRUE) und F (FALSE). Wird diese Variable auf FALSE gesetzt, dann werden die Standardfehler beim LQT nicht berechnet. Dies beeinflusst die Länge der Rechenzeit. Wird se nicht explizit auf TRUE gesetzt, dann werden die Standardfehler nicht berechnet. 79 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Funktionen LRtest(), print(), summary() & str() Um die Ergebnisse print(), summary() und str() zu erklären, wird ein einfaches Beispiel mit dem LRtest gerechnet. Dazu wird wieder die Matrix mat1 verwendet. Mit a=RM(mat1) wird ein Rm-Objekt erzeugt und in der Variablen a gespeichert, während mittels lrt1=LRtest(a) ein LR-Objekt generiert und in Variable lrt1 gespeichert wird. In diesem Beispiel wurden die Standardwerte der Funktion (keine Standardfehler, Teilungskriterium ist der Median) verwendet. Mit print(lrt1) erhält man Abbildung 69. Abbildung 69 - Ausgabe eines LRtest – Ergebnisses Der in Abbildung 69 angezeigte „LR-Value“ ist der errechnete CHi²-Wert von LRtest, „df“ sind die Freiheitsgrade und „p-value“ ist die Fehlerwahrscheinlichkeit des Tests. Wir erhalten also ein nicht signifikantes Ergebnis und behalten damit die H0: „Das Rasch-Modell gilt“ bei. Der kritische Chi²-Wert kann „händisch“ berechnet werden, indem man folgende Befehlssequenz eingibt: qchisq(p=1qchisq(p=1-alpha,df=14) Dabei werden die Irrtumswahrscheinlichkeit „alpha“ und die Freiheitsgrade „df“ an qchisq() übergeben. Mit summary(lrt1) ausgegeben. 80 wird Abbildung 70 am Bildschirm eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 70 – LRT-Ergebnisse– Tk ist der Mittelwert summary() liefert folgende Informationen: „LR-Value“ ist der vom LRtest() errechnete Chi²-Wert. „Chi-square df“ sind die verwendeten Freiheitsgrade. „p-value“ ist die Fehlerwahrscheinlichkeit (sie zeigt an, ob das Ergebnis signifikant ist). Zusätzlich werden für jede der beiden Untergruppen, die durch das Teilungskriterium definiert sind, die Log-Likelihood und die beta–Parameter ausgegeben. In Abbildung 71 wird die interne Struktur des LR-Objektes dargestellt. 81 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 71 - interne Struktur von lrt1 82 eexxtteennd deed dR Raasscchh m mood deelliinng g In der folgenden weiterführenden Information wird die Struktur des LR-Objektes erklärt. Die meisten Substrukturen sind durch das Rm-Objekt und das ppar-Objekt bereits bekannt. Das Objekt LR $X: in dieser Struktur wird die Datenmatrix gespeichert $X.list: diese Variable enthält zwei Untergruppen ($low, $high). Die Personen sind in dieser Variablen bereits nach dem Teilungskriterium in zwei Untergruppen aufgeteilt $model: gibt das verwendete Rasch-Modell an (in diesem Fall RM) $LR: gibt den errechneten CHI²-Werte an $df: Freiheitsgrade $pvalue : Fehlerwahrscheinlichkeit des Tests $likgroup: gibt die Log-Likelihood der beiden Untergruppen an $betalist: enthält die Itemparameter der beiden Untergruppen ($low, $high) $etalist: enthält die eta–Parameter der beiden Untergruppen $selist: enthält die Standardfehler für beide Untergruppen Wichtig: Bitte vergessen Sie nicht, dass die Funktion LRtest() ein Rm-Objekt (also das Ergebnis einer RM()-Berechnung) als Eingabe zwingend vorschreibt. In obigem Fall war dieses Objekt in der Variablen a gespeichert. Daraus ergibt sich die folgende Befehlssequenz: lrt1=LRtest(a). Mit dem bedingten LQT nach Andersen kann die Gültigkeit des RM-Modells überprüft werden. Ein nicht signifikanter LQT bedeutet aber noch nicht, dass das Rasch-Modell tatsächlich gilt. Es ist deshalb notwendig, den LQT mit weiteren Kriterien durchzuführen. Diese Kriterien können z.B. Alter und Geschlecht sein. Wird ein externes Teilungskriterium verwendet, dann müssen die Werte als ein Vektor an den Parameter splitcr übergeben werden. Da es sich bei mat1 um eine simulierte Datenmatrix handelt, haben wir leider kein echtes externes Kriterium wie Alter oder Geschlecht zur Verfügung. Aus diesem Grund wird die Datenmatrix aufgeteilt, indem Person 1-500 die erste Gruppe und Person 501-1000 die zweite Gruppe bilden. Wir nehmen an, dass in der ersten Gruppe alle Personen weiblich und 83 eexxtteennd deed dR Raasscchh m mood deelliinng g in der zweiten Gruppe alle Personen männlich sind. Den Teilungskriteriumsvektor erstellen wir, indem wir folgende Sequenz eingeben: gs=c(rep(0,500), rep(1,500)) Damit wird ein Vektor in die Variable gs geschrieben, der zuerst 500 mal 0 und dann 500 mal 1 enthält. Ein LQT mit einem externen Teilungskriterium wird dann folgendermaßen berechnet: lrt2=LRtest(a,splitcr=gs) Das Ergebnis des obigen Befehls sieht man in Abbildung 72. Abbildung 72 - LRtest() – externes Teilungskriterium In Abbildung 72 liefert der LRTest mit dem „externen“ Kriterium einen sehr niedrigen Chi²Wert. Damit kann die H0: „Das Rasch-Modell gilt“ beibehalten werden. Tipp: Zur Übung kann der Leser weitere LQTs mit verschiedenen Teilungskriterien berechnen. 84 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.3 Der Grafische Modelltest (Rasch) Nachdem mit zwei Teilungskriterien (Median, externes Kriterium) gezeigt wurde, dass das Rasch-Modell nicht verworfen werden muss, soll nun mit Hilfe des Grafischen Modelltests (GMT) untersucht werden, wie sich die einzelnen Items verhalten. Um einen Grafischen Modelltest durchzuführen, kann man die R-Funktion plot() verwenden. Aber auch hier bietet eRm eine eigene Funktion namens plotGOF() an. Als Input verlangt plotGOF() ein LRObjekt. An die Funktion plotGOF können die folgenden Werte übergeben werden: plotGOF(x, beta.subset = "all", xlab = "Beta Group 1", ylab = "Beta Group 2", tlab = "item", ylim = c(c(-3, 3), xlim = c(c(-3, 3), type = "p", pos = "4", ...) Optionen für die Funktion plotGOF() x … ist ein LR-Objekt. Dieses Objekt muss an die Funktion übergeben werden beta.subset … hier können mittels Vektor jene Items angegeben werden, die dargestellt werden sollen (z.B beta.subset=c(1,2,3,4,5,6) oder beta.subset=c(3,8,9,10)) xlab … Beschriftung für die x-Achse (z.B. xlab=“x-Achse“) ylab … Beschriftung für die y-Achse tlab … mit dieser Option ist es möglich, die Art der Itemnamen zu ändern. Dabei können die Werte „item“, „number“, „none“ verwendet werden. Mit „identify“ kann man sich sogar die Namen der Punkte interaktiv (mittels Mausklick) anzeigen lassen. xlim … setzt die Begrenzungen für die x-Achse ylim … setzt die Begrenzungen für die y-Achse (Die von plotGOF() verwendeten Standardwerte für die Grenzen sind mit dem Intervall von 3 bis +3 für beide Achsen etwas gering gewählt. Mit den Parametern xlim und ylim können die Werte vom Benutzer überschrieben werden.) pos … mit dem Parameter pos kann eine vordefinierte Position für die Itemlabels gewählt werden (1…unten, 2…links, 3…oben, 4…rechts) type … gibt den Typ der grafischen Darstellung an: sinnvoll sind nur die Optionen "p" (Darstellung durch Punkte) und "n" (nur die Labels werden dargestellt) 85 eexxtteennd deed dR Raasscchh m mood deelliinng g Tipp: plotGOF() bietet verschiedene grafische Möglichkeiten an. Es ist durchaus lohnenswert, diese Optionen auszuprobieren. Es werden nun verschiedene Darstellungsarten des Grafischen Modelltest vorgestellt. Bis jetzt wurden die LR-Objekte lrt1und lrt2 erzeugt. Diese beiden Objekte werden im folgendem für die Darstellungen verwendet. Mit der folgenden Funktion erhalten Sie einen Grafischen Modelltest wie er in Abbildung 73 zu sehen ist: plotGOF(p1000i15.lrt1,xlim=c(plotGOF(p1000i15.lrt1,xlim=c(-4,4),ylim=c(4,4),ylim=c(-4,4), xlab="xxlab="xAchse",ylab="yAchse",ylab="y-Achse") Abbildung 73 - Grafischer Modelltest - Median als Tk. 86 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Items in Abbildung 73 zeigen ein Rasch-Modell-konformes Verhalten und sind alle in der Nähe der 45°-Geraden angesiedelt. Um einen Grafischen Modelltest für das externe Teilungskriterium auf dem Bildschirm darzustellen, wird folgende Codesequenz eingegeben: plotGOF(lrt2) Nachdem keine Grenzwerte für die Achsen eingegeben wurden, setzt plotGOF() die Grenzen für beide Achsen auf -3 bzw. +3 (Abbildung 74a). Abbildung 74a - Grafischer Modelltest - externes Tk. 87 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Items der Datenmatrix 1 zeigen auch bei einem externen Teilungskriterium ein RaschModell-konformes Verhalten. Bei den folgenden Beispielen werden nun verschiedene Darstellungen des Grafischen Modelltests gezeigt. Es werden dabei immer der Median als Teilungskriterium und die gleiche Datenmatrix verwendet. In Abbildung 74b wird auf die Ausgabe von Namen oder Nummern für die Items verzichtet. Der dazugehörige Befehl lautet: plotGOF(p1000i15.lrt_median, xlim=c(xlim=c(-3,3), ylim=c(ylim=c(-3,3), xlab="Das ist die xAchse", ylab="Das ist die yy-Achse", Achse", tlab="none") Abbildung 74b - Grafischer Modelltest 88 eexxtteennd deed dR Raasscchh m mood deelliinng g In Abbildung 74c werden die Grenzen für die x-Achse und die y-Achse auf -3 und + 4 gesetzt. Als Benennung für die Items wird die Standardoption tlab=„item“ verwendet. Damit werden die Standardnamen geplottet. Der dazugehörige Befehl lautet: plotGOF(p1000i15.lrt_median, xlim=c(xlim=c(-3,4), ylim=c(ylim=c(-3,4), xlab="Das ist die xx-Achse", ylab="Das ist die yy-Achse", tlab="item") Abbildung 74c - Grafischer Modelltest 89 eexxtteennd deed dR Raasscchh m mood deelliinng g In Abbildung 74d werden Zahlen für die Benennung der Items verwendet. Die dazugehörige Codesequenz lautet dann: plotGOF(p1000i15.lrt_median, xlim=c(xlim=c(-3,3), ylim=c(ylim=c(-3,3), xlab="Das ist die xx-Achse", ylab="Das ist die yy-Achse", tlab="number") Abbildung 74d - Grafischer Modelltest 90 eexxtteennd deed dR Raasscchh m mood deelliinng g In Abbildung 74e werden nur die Items 1-5 dargestellt. Die Befehlssequenz lautet dann: plotGOF(p1000i15.lrt_median, beta.subset=c(1,2,3,4,5), xlim=c(xlim=c(3,3), ylim=c(ylim=c(-3,3), xlab="Das ist die xx-Achse", ylab="Das ist die yyAchse", tlab="number") Abbildung 74e - Grafischer Modelltest Wichtige Info: Nachdem die Datenmatrix mittels der Funktion LRtest() einem Likelihood-Quotiententest bezüglich des Standard-Teilungskriteriums Median als auch bezüglich eines „externen“ Teilungskriteriums unterzogen worden ist, wurde im Anschluss noch mittels der Funktion plotGOF() ein Grafischer Modelltest (GMT) durchgeführt, um die einzelnen Items grafisch auf Rasch-Modell-Konformität zu prüfen. 91 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.4 Der Waldtest Im Anschluss an die allgemeine Überprüfung der Daten mittels bedingten Likelihood-RatioTest (nach Andersen) und der einzelnen Items mittels Grafischem Modelltest sollen die Items mittels Waldtest geprüft werden. Dazu werden der Mittelwert und ein willkürlich erstellter Vektor als Teilungskriterien verwendet. Der Befehl zur Berechnung des Waldtests lautet: Waldtest() Waldtest (object, splitcr = "median") Abbildung 75 - die Funktion Waldtest Die Funktion Waldtest (Abbildung 75) verlangt zwingend die Eingabe eines Rm-Objekts. Damit kann diese Funktion nur für Analysen nach dem einfachen Rasch-Modell verwendet werden. Optional kann ein Teilungskriterium an den Waldtest übergeben werden. Teilungskriterien können wieder Mittelwert, Median oder ein externer Vektor sein. Wird vom Benutzer kein Teilungskriterium angegeben, dann wird der Median standardmäßig verwendet. Für ein erstes Beispiel verwenden wir die folgende Syntax: wald1=Waldtest(a, splitcr=“mean“). Es wird wieder das Rm-Objekt von Kapitel 8.2 verwendet. Sollte das Rm-Objekt nicht mehr vorhanden sein, kann es mit a=RM(mat1) erstellt werden. An die Waldtest()-Funktion wird das Rm-Objekt a und das Teilungskriterium Mittelwert (mean) übergeben. Nach dem Drücken der [RETURN]-Taste wird das Ergebnis als Wald-Objekt in Variable wald1 gespeichert. Mit print(wald1) erhält man folgende Darstellung (Abbildung 76) auf dem Bildschirm. Aus Platzgründen wurde auf eine komplette Darstellung aller Items verzichtet. 92 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 76 – Waldtest – Teilungskriterium ist der Mittelwert Mit der Funktion Waldtest() werden die z-Werte und die dazugehörigen Wahrscheinlichkeiten berechnet. Wie man anhand von Abbildung 76 erkennen kann, unterschreitet kein P-Wert den vorher festgelegten Wert von 0.05. Damit ist in diesem Beispiel kein Item signifikant und es dürfen alle Items weiterverwendet werden. Nach diesem zufriedenstellenden Ergebnis wollen wir die interne Struktur von wald1 betrachten. Der summary()–Befehl ist beim Wald-Objekt nicht definiert. Wir geben str(wald1) ein und erhalten die folgende Ausgabe (Abbildung 77). Abbildung 77 – die interne Struktur eines Wald-Objekts 93 eexxtteennd deed dR Raasscchh m mood deelliinng g Die internen Strukturen des Wald-Objekts haben folgende Bedeutung. Das Objekt Wald $coef.table: in dieser Struktur sind jene Werte gespeichert, die beim print()–Befehl ausgegeben werden. Das sind also die z-Werte (z-statistic) und die dazugehörigen Irrtumswahrscheinlichkeiten (p-value) $betapar1: in dieser Struktur sind die Itemparameter der ersten Untergruppe gespeichert $se.beta1: in dieser Struktur sind die Standardfehler für die erste Untergruppe gespeichert $betapar2: hier sind die Itemparameter der zweiten Untergruppe gespeichert $se.beta2: hier sind die Standardfehler für die zweite Untergruppe gespeichert Zum Abschluss soll noch ein Waldtest mit einem externen Teilungskriterium gerechnet werden. Dazu wird ein einfacher Zufallsvektor mit der Funktion runif() erstellt. Die Funktion runif(n, min, max) erstellt gleichverteilte Zufallszahlen zwischen min (dem kleinsten Wert) und max (dem größten Wert). Die Anzahl der zufällig gezogenen Werte wird über den Parameter n bestimmt. Die Werte werden noch mit der Funktion round() gerundet und in Variable vk gespeichert. Es ergibt sich damit die folgende Sequenz: vk=round(runif(1000,min=0,max=1)) vk=round(runif(1000,min=0,max=1)) Es wurde ein Vektor mit 1000 gleichverteilten Zufallszahlen erstellt. Dieser Vektor vk wird an die Funktion Waldtest als Teilungskriterium übergeben. Das Ergebnis der Funktion Waldtest() wird schließlich in der Variablen wald2 gespeichert. Wir geben also folgende Befehlssequenz ein: wald2=Waldtest(a,splitcr=vk) Das Ergebnis finden Sie in Abbildung 78. Da hier ein Vektor aus Pseudo-Zufallszahlen verwendet wurde, erhalten Sie ein anderes Ergebnis. 94 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 78 - Waldtest-Ergebnis (ein externer Vektor als Tk) Nachdem ein Zufallsvektor als Teilungskriterium verwendet wurde, findet man signifikante Ergebnisse (Abbildung 78). Im Item Nr. 2 erhalten wir einen z-Wert über 2 und eine Wahrscheinlichkeit, die bei einem Signifikanzniveau von 0.05 signifikant ist. Auch die Items 4 und 13 sind signifikant. Bitte vergessen Sie nicht, dass wir aus Demonstrationszwecken zufallsverteilte Zahlen als Teilungskriterium verwendet haben! Zusammenfassung: Mit der Funktion Waldtest() können Items auf Rasch-ModellKonformität geprüft werden. Dazu muss ein Rm-Objekt an die Funktion Waldtest() übergeben werden. Optional kann auch ein Teilungskriterium angegeben werden. Für Wald-Objekte ist die Funktion summary() nicht definiert. 95 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.5 Personfit und Itemfit Neben dem bedingten Likelihood–Quotiententest (LQT) nach Andersen, dem Waldtest und dem Grafischen Modelltest (GMT) stellt eRm noch weitere Funktionen zur Verfügung, nämlich die Fit-Statistiken itemfit() und personfit()für die Überprüfung von Items und Personen. Zusätzlich werden mit der Funktion pmat() die theoretischen Wahrscheinlichkeiten und mit der Funktion residuals() die standardisierten Residuen und die quadrierten standardisierten Residuen ausgegeben. Alle 4 Funktionen benötigen als Eingabe ein pparObjekt. Dieses Objekt ist das Ergebnis einer Personenparameterschätzung mit der Funktion person.parameter(). Um beispielsweise die Itemfit-Statistik der Datenmatrix mat1 zu berechnen, müssen im ersten Schritt die Personenparameter geschätzt und in Variable a gespeichert werden (siehe Kapitel 8.5.1). Im zweiten Schritt wird der Inhalt von Variable a an die Itemfit-Funktion übergeben und das Resultat in Variable ifit gespeichert. Man muss also folgende Codesequenz eingeben: a=person.parameter(mat1); a=person.parameter(mat1); ifit=itemfit(a); print(ifit) Das Ergebnis steht in Abbildung 79. Abbildung 79 - Fit-Statistik für die Itemparameter 96 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Funktion Itemfit() liefert die folgenden Werte: - in der ersten Spalte stehen die Itemnamen - in der zweiten Spalte stehen die CHI²-basierten Itemfit-Statistiken - in der dritten Spalte werden die Freiheitsgrade angegeben - in der vierten Spalte schließlich werden die Wahrscheinlichkeiten ausgegeben Um die Fit-Statistik für die Personenparameter zu berechnen, verwendet man: pfit=personfit(a) Man erhält dann die Ausgabe in Abbildung 80. (Aus Platzgründen werden nur die ersten zehn Personen aufgelistet) Abbildung 80 - Ausgabe der Personen-Fit-Statistiken Die Funktion personfit liefert die folgenden Werte: - in der ersten Spalte stehen die Itemnamen - in der zweiten Spalte stehen die CHI²-basierten Personfit-Statistiken - in der dritten Spalte werden die Freiheitsgrade angegeben - in der vierten Spalte stehen die Wahrscheinlichkeiten ausgegeben 97 eexxtteennd deed dR Raasscchh m mood deelliinng g Mit der Funktion pm=pmat(a) wird schließlich eine Liste zurückgegeben, die die Personen-Item–Matrix mit den theoretisch zu erwartenden Wahrscheinlichkeiten enthält. Die Matrix ist etwas unübersichtlich. Ein Teil dieser Matrix wird in Abbildung 81 dargestellt. Abbildung 81 – Personen-Item-Matrix mit den erwarteten Wahrscheinlichkeiten Die Funktion res=residuals(a) gibt schließlich die Residuen aus. Eigene Notizen: 98 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.6 Die Informationsindices Die Informationsindices AIC, BIC und CAIC überprüfen, welches Modell am besten auf die Daten passt. − Das AIC ist das Akaike Information Criterion und ist der älteste Informationsindex. − Das BIC ist das Bayes Information Critierion (manchmal auch als Best Information Criterion bezeichnet). − Der dritte Informationsindex, der mittels eRm berechnet werden kann, ist das CAIC (consistent Akaike Information Criterion). Mittels Informationsindices ist es möglich, verschiedene Modelle miteinander zu vergleichen. Dabei gilt: je kleiner der Informationsindex ist, desto besser passt das Modell. Für die Berechnung der Informationsindices wird die Funktion IC() verwendet. An die Funktion IC() muss ein ppar-Objekt, wie es von der Funktion person.parameter (also bei der Berechnung der Personenparameter) erstellt wird, übergeben werden. Nach der Eingabe von myIC=IC(ppar1) erstellt die Funktion IC() die Informationsindices und speichert sie in der Variablen myIC. Mit print(myIC) werden die Informationsindices und die unconditional joint log-likelihood (die unbedingte LogLikelihood) ausgegeben (siehe Abbildung 82). Abbildung 82 - Ausgabe eines Ergebnisses der Funktion IC() . 99 eexxtteennd deed dR Raasscchh m mood deelliinng g 8.5.7 Weitere grafische Möglichkeiten Zusätzlich zur Schätzung der Personenparameter bietet eRm für ppar-Objekte die Möglichkeit einer grafischen Darstellung. Dabei werden auf der y-Achse die Personenparameter und auf der x-Achse die dazugehörigen Rohscores aufgetragen. Nach der Eingabe von plot(ppar1) erhält man die grafische Darstellung in Abbildung 83. Abbildung 83 - Grafische Darstellung der Personenparameter Auch für die Items werden mit den Funktionen plotICC() und plotjointICC() weitere grafische Darstellungsmöglichkeiten angeboten. Mit der Funktion plotICC() können „Item Characteristic Curves“ grafisch dargestellt werden. Die Eingabe sieht folgendermaßen aus: a=RM(mat1) plotICC(a) 100 eexxtteennd deed dR Raasscchh m mood deelliinng g Das Ergebnis dieser Befehlssequenz sind die grafischen Darstellungen in Abbildung 84. Dabei werden die latenten Dimensionen auf der x-Achse und die Lösungs- wahrscheinlichkeiten auf der y-Achse aufgetragen. Abbildung 84 - Grafische Darstellung der ICCs Mit plotjointICC() können alle ICCs gleichzeitig auf dem Bildschirm dargestellt werden. Nach der Eingabe der untenstehenden Sequenz erhalten wir die Darstellung in Abbildung 85. a=RM(mat1) plotjointICC(a) . 101 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 85 - Grafische Darstellung aller ICCs Auf der x-Achse wurde die latente Dimension und auf der y-Achse die Lösungswahrscheinlichkeit aufgetragen. Zusammenfassung: Neben dem Grafischen Modelltest plotGOF() bietet eRm weitere grafische Möglichkeiten. Mit der Funktion plot() (verlangt ein ppar-Objekt) können die Personenparameter dargestellt werden. Mit der Funktion plotICC() (verlangt ein RmObjekt) können die Item-Charakteristik-Kurven grafisch ausgegeben werden. Schließlich können mit der Funktion plotjoin plotjointICC() (verlangt ein Rm-Objekt) können alle ICCs auf einmal auf dem Bildschirm dargestellt werden. 102 eexxtteennd deed dR Raasscchh m mood deelliinng g 9 Untergruppen und missing data Wenn nicht genügend Zeit für eine Testung zur Verfügung steht oder die Testungen zu umfangreich sind, um einer Person alle Aufgaben vorzugeben, können Untergruppen verwendet werden. Untergruppen entstehen, indem Testpersonen unterschiedliche Itemsets bearbeiten müssen. Die Testpersonen haben dann vom Design her fehlende Testwerte, es handelt sich also um „missing data by design“. eRm hat nun die Fähigkeit mit Untergruppen arbeiten zu können. Dies ist der große Pluspunkt gegenüber Softwarelösungen, die keine „missing data by design“ verarbeiten können (z.B. Winmira). Nachdem im vorigen Kapitel eine vollständige Datenmatrix für die Berechnungen verwendet wurde, soll in diesem Kapitel an einem Beispiel die Arbeit mit Untergruppen demonstriert werden. Die Eingabe der Daten für eine Datenmatrix mit mehreren Gruppen ist sehr einfach. Dazu wird eine gewöhnliche Personen-Item–Matrix verwendet. In den Zeilen stehen die Personen, in den Spalten stehen die Items. Zusätzlich wird noch das Symbol NA eingeführt. Wenn eRm bzw. „R“ auf den Wert NA in einer Datenmatrix trifft, weiß das Programm automatisch, dass es sich hier um einen fehlenden Wert handelt. Die Datenmatrix kann wie gewohnt erstellt werden. Überall dort, wo eine Person bzw. eine Untergruppe ein Item nicht bearbeitet hat, wird ein NA eingefügt. Die Matrix muss dabei weder nach Gruppen noch sonstigen Kriterien geordnet sein. Ein Vorteil von eRm gegenüber anderen Programmen wie LPCMWin, welches auch „missing values by design“ verarbeiten kann, ist dabei, dass die anfallenden Zwischenschritte (Eingabe der Anzahl der Gruppen, Gruppengröße, sortieren der Matrix nach Gruppen, Angabe der verwendeten Items pro Gruppe) von eRm selbstständig erledigt werden. eRm sucht sich eigenständig die benötigten Informationen in der Datenmatrix. Dieses automatisierte Vorgehen bedeutet nicht nur zusätzlichen Komfort, sondern auch erhöhte Datensicherheit, da hier die Fehleranfälligkeit minimiert wird. Bei diesem Beispiel wird nun eine Datenmatrix mit „missing values by design“ benötigt. Man kann dazu die Beispieldatensätze verwenden, die von eRm selbst angeboten werden. Solche Beispieldaten können mit dem Befehl data() geladen werden. Um die kleine Beispielmatrix raschdat2 in den Speicher zu laden, geben Sie data(raschdat2) ein. Mit der Befehlssequenz edit(raschdat2) kann man die Datenmatrix überprüfen und gegebenenfalls Änderungen vornehmen. Da diese Matrix sehr klein ist, wird sie hier nicht 103 eexxtteennd deed dR Raasscchh m mood deelliinng g verwendet. Dieses Handbuch verwendet stattdessen die Matrix mat2. Diese Rasch-Modellkonforme Matrix hat die Dimensionen von 2000 Personen und 20 Items. Außerdem besitzt sie fünf Untergruppen. Da die mat2 als CSV-Datei vorliegt, kann sie mittels R-Commander importiert werden. Tipp: Diese Matrix kann wieder vom Arbeitsbereich Psychologische Diagnostik (Fakultät für Psychologie) von der Homepage www.univie.ac.at/psychologie/diagnostik kopiert werden. Zur weiteren Information: Programmpakete unter „R“ müssen nicht nur Funktionen enthalten. Teilweise werden mit den Programmpaketen auch Beispieldaten mitgeliefert. Diese Daten können mit dem Befehl data(DATENNAME) geladen werden. Mit data() werden alle angebotenen Datensätze aufgelistet. 104 eexxtteennd deed dR Raasscchh m mood deelliinng g 9.1 Rasch-Modell-Analyse einer Datenmatrix mit Gruppen Nach dem Import der Datenmatrix wird mit folgender Befehlssequenz wieder ein RaschModell gerechnet: b=RM(mat2) Es wird wieder der Befehl RM() zur Datenanalyse verwendet. Nach der Eingabe von summa summary(b) erhalten wir ein Ergebnis wie es in der Abbildung 86 dargestellt wird. Es werden wieder die Log-Likelihood, die Anzahl der Iterationen und die die Anzahl der Parameter ausgegeben. In der darauf folgenden Tabelle findet man die eta-Parameter. Dann werden die 20 Itemparameter (beta-Parameter) angezeigt. Aus Platzgründen wurde auf die Darstellung aller eta-Parameter verzichtet. In der ersten Spalte findet man den Namen, in der zweiten Spalte die Parameterschätzungen, in der dritten Spalte die Standardfehler und in der vierten und fünften Spalte sind die unteren und die oberen Grenzen des 95%-igen Konfidenzintervalls dargestellt. Das in b gespeicherte Ergebnis der Analyse unterscheidet sich also nicht vom Beispiel ohne Untergruppen. Der aufmerksame Benutzer wird bemerken, dass bei dieser Berechnung die Rechendauer angestiegen ist. Dies ist darauf zurückzuführen, dass die nun durchgeführten Berechnungen um einiges komplexer sind, da die Matrix mat2 fünf Untergruppen beinhaltet. Wichtig: Die Anzahl der Personen wirkt sich kaum auf die Dauer der Berechnung aus. Wohl aber hat die Anzahl der Gruppen als auch die Anzahl der Items einen erheblichen Einfluss auf die Dauer der Berechnungen. Dabei hat sich durch simulierte Berechnungen gezeigt, dass der Schätzalgorithmus einem exponentiellen Laufzeitverhalten folgt. Dies bedeutet, dass ab einer gewissen Anzahl von Items (insbesondere wenn viele Untergruppen existieren) die Berechnungsdauer extrem groß wird. Um Zeit zu gewinnen, gibt es zwei Möglichkeiten. Erstens kann man auf die Berechnung der Standardfehler verzichten. Zweitens können Startwerte bei den Itemparameterschätzungen verwendet werden. Beide Möglichkeiten wurden bereits diskutiert. 105 summary() –Ausgabe bei RM() - Log-Likelikhood - 1. Tab.: enthält die eta-Parameter - 2. Tab.: enthält die auf Nullsumme normierte beta-Parameter – diese sind für einfache Rasch-Modell-Analysen für besonderer Bedeutung - Beide Tabellen zeigen folgende Werte – Namen – Parameterschätzung die Anzahl der Iterationen die Anzahl der Parameter – – Standardfehler 95%iges Konfidenzintervall Abbildung 86 – Zusammenfassung einer RM-Analyse Mit str(b) kann sich der Benutzer wieder die interne Objektstruktur ansehen. Wie man erkennen kann, gibt es zwischen Rasch-Modell-Analysen mit oder ohne Untergruppen nur minimale Unterschiede. eexxtteennd deed dR Raasscchh m mood deelliinng g 9.2 Der bedingte LQT (Andersen) mit Untergruppen Im Anschluss an die RM-Analyse wird jetzt ein bedingter Likelihood-Quotiententest (Andersen) gerechnet. Wir geben dazu folgendes ein: lrt3=LRtest(b,splitcr=“median“) Wichtig: Bitte vergessen Sie nicht, dass LRtest() ein Rm-Objekt (also das Ergebnis einer RM()-Analyse) als Eingabe benötigt. In unserem Fall ist dieses Objekt in der Variablen b gespeichert worden. Daraus ergibt sich die Befehlssequenz: lrt3=LRtest(b) Wir überprüfen das Ergebnis von LRtest() wiederum und sehen in Abbildung 87, dass es auch hier kaum Unterschiede zwischen der LQT-Berechnung mit und ohne Untergruppen gibt. Als Teilungskriterium wurde dabei der Median verwendet. summary() liefert folgende Informationen: LR-Value ist der vom LRtest() errechnete Chi²-Wert. Chi-square df sind die verwendeten Freiheitsgrade. p-value ist die Irrtumswahrscheinlichkeit. Zusätzlich werden für die beiden Untergruppen die Log-Likelihood und die beta-Parameter (die Itemparameter) ausgegeben. Anschließend werden für die Parameter die Tabellen ausgegeben (Abbildung 87). Abbildung 87 – LRT-Berechnung - Tk ist Median 107 eexxtteennd deed dR Raasscchh m mood deelliinng g Der Vollständigkeit halber soll auch noch ein Grafischer Modelltest durchgeführt werden. Wie man anhand von Abbildung 88 erkennen kann, zeigen die Items ein Rasch-Modellkonformes Verhalten. Zur Erstellung eines Grafischen Modelltests siehe Kapitel 8.5.3. Abbildung 88 - der Grafische Modelltest – Median ist das Tk. 108 eexxtteennd deed dR Raasscchh m mood deelliinng g 9.3 Personenparameter-Schätzung bei Untergruppen Im nächsten Schritt werden die Personenparameter geschätzt. Dabei ist klar, dass es erhebliche Unterschiede zwischen den Schätzungen mit Gruppen und ohne Gruppen geben muss. Nachdem Matrix mat2 aus insgesamt fünf Gruppen besteht, müssen für jede Gruppe die Personenparameter geschätzt werden. Der Grund liegt darin, dass die Untergruppen unterschiedliche Itemsets bearbeitet haben. Zur Berechnung der Personenparameter verwenden wir folgende Befehlssequenz: ppar2=person.parameter(b) ppar2=person.parameter(b) Bei der anschließenden Ausgabe mit dem Befehl print(ppar2) zeigt eRm bei jeder Gruppe zuerst, welche Items bearbeitet worden sind. Diese Information steht im NA-Pattern. Items, die nicht bearbeitet worden sind, haben dabei den Wert NA. In der ersten Gruppe (siehe Abbildung 89) wurden die Items 10, 17 und 18 nicht bearbeitet. NA pattern: x x x x x x x x x NA x x x x x x NA NA x x Abbildung 89 – NA-Pattern der Untergruppe 1 Anschließend wird für jede Gruppe eine Tabelle ausgegeben (Abbildung 90). In der ersten Spalte steht der Rohscore rv, in der zweiten Spalte steht die Schätzung für den Personenparameter einer Person mit Rohscore rv und in der dritten Spalte steht der Standardfehler. NA gibt dabei an, dass kein Standardfehler berechnet werden konnte. Wie schon erwähnt ist es nicht möglich den Rohscore von Personen zu schätzen, die kein Item oder alle Items beantwortet haben. Ist so ein Extremfall eingetreten, dann interpoliert eRm den entsprechenden Personenparameter. Mit Hilfe der Interpolation kann aber kein Standardfehler berechnet werden. Wie man an den Schätzungen von Gruppe1 auch sehen kann, interpoliert eRm auch jene Rohscores, die Personen unmöglich erreichen können. Da eine Person in Gruppe 1 maximal einen Rohscore von 17 = 20 (alle Items) – 3 (Anzahl der Items, die in Gruppe 1 nicht vorgegeben worden sind) erreichen kann, können nur die Rohscores von rv=1 bis rv=16 geschätzt werden. 109 eexxtteennd deed dR Raasscchh m mood deelliinng g Die Befehlssequenz print(ppar2) ergibt folgende Ergebnisdarstellung Person NA Group: 1 NA pattern: x x x x x x x x x NA x x x x x x NA NA x x Raw Score Estimate Std.Error 0 -3.58731505 NA 1 -3.14459640 NA 2 -2.70187776 NA 3 -2.25915912 0.7006513 4 -1.82086998 NA 5 -1.40915792 0.6180007 6 -1.03851558 0.6011960 7 -0.68295202 0.5924811 8 -0.33410289 0.5896803 9 0.01455856 0.5921548 10 0.36945636 0.6003415 11 0.73828755 0.6156077 12 1.13157105 0.6404534 13 1.59934533 NA 14 2.12970631 NA 15 2.69136064 0.8501845 16 3.25823054 NA 17 3.82510043 NA 18 4.39197033 NA 19 4.95884022 NA 20 5.52571012 NA . . . Person NA Group: 5 NA pattern: NA x x NA x x x x x x x x x x x NA x x NA x Raw Score Estimate Std.Error 0 -3.2744338 NA 1 -2.8638039 NA 2 -2.4531739 NA 3 -2.0425440 NA 4 -1.6319141 0.6525822 5 -1.2263772 0.6237852 6 -0.8441656 NA 7 -0.4796718 NA 8 -0.1200553 0.6024325 9 0.2461292 0.6088556 10 0.6241040 0.6219463 11 1.0235110 0.6436731 12 1.4730686 NA 13 1.9546101 0.7348182 14 2.4414823 NA 15 2.9283546 NA 16 3.4152268 NA 17 3.9020990 NA 18 4.3889712 NA 19 4.8758434 NA 20 5.3627156 NA Abbildung 90 – Ausgabe der Personenparameterschätzung 110 eexxtteennd deed dR Raasscchh m mood deelliinng g Mit der Funktion summary(ppar2) werden die Personenparameter von allen Personen ausgegeben, bei denen eine Schätzung möglich war. Personen, die alle Items falsch oder richtig beantwortet haben, müssen von der Schätzung ausgeschlossen werden. Die Personen werden dabei nach Untergruppen aufgeteilt in Tabellen ausgegeben. Dabei werden für jede Tabelle der Name der Person, die Personenparameter, der Standardfehler für die Personenparameter und die beiden Grenzen des Konfidenzintervalls ausgegeben. Zusätzlich werden am Anfang jeder Tabelle die Log-Likelihood der Gruppe, die Anzahl der Parameter und die Anzahl der Iterationen ausgegeben. Aus Platzgründen wurde darauf verzichtet, die Personenparameterschätzung hier darzustellen. Zum Abschluss des Themas „Personenparameter und missing data“ wollen wir noch die Strukturen untersuchen, die in der Variablen ppar2 gespeichert sind. Die Ausgabe der Objektstruktur von ppar2 List of 15 $X : num [1:2000, 1:20] 0 0 0 1 0 0 0 0 0 1 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:2000] "P1" "P2" "P3" "P4" ... .. ..$ : chr [1:20] "I1" "I2" "I3" "I4" ... $ X01 : num [1:2000, 1:20] 0 0 0 1 0 0 0 0 0 1 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:2000] "P1" "P2" "P3" "P4" ... .. ..$ : chr [1:20] "I1" "I2" "I3" "I4" ... $W : num [1:20, 1:19] -1 1 0 0 0 0 0 0 0 0 ... ..- attr(*, "dimnames")=List of 2 .. ..$ : chr [1:20] "beta I1" "beta I2" "beta I3" "beta I4" ... .. ..$ : chr [1:19] "eta 1" "eta 2" "eta 3" "eta 4" ... $ model : chr "RM" $ loglik : num [1:5] -3328 -3060 -1479 -3930 -1761 $ npar : int [1:5] 470 480 211 533 256 $ iter : int [1:5] 8 11 8 8 8 $ betapar : Named num [1:20] -2.8964 1.5958 -1.4303 0.0174 2.2113 ... ..- attr(*, "names")= chr [1:20] "beta I1" "beta I2" "beta I3" "beta I4" ... $ thetapar :List of 5 ..$ NAgroup1: Named num [1:470] -0.6829 0.0146 0.0146 -0.6829 0.0146 ... .. ..- attr(*, "names")= chr [1:470] "P2" "P8" "P20" "P25" ... ..$ NAgroup2: Named num [1:480] 0.233 -2.235 -0.958 -2.800 -0.173 ... .. ..- attr(*, "names")= chr [1:480] "P1" "P4" "P6" "P9" ... ..$ NAgroup3: Named num [1:211] 0.146 0.491 -2.377 -2.377 -1.329 ... .. ..- attr(*, "names")= chr [1:211] "P29" "P32" "P44" "P46" ... ..$ NAgroup4: Named num [1:533] -0.021 -2.205 1.045 0.314 -1.017 ... .. ..- attr(*, "names")= chr [1:533] "P3" "P5" "P7" "P10" ... ..$ NAgroup5: Named num [1:256] -0.848 -0.848 1.024 1.955 2.565 ... .. ..- attr(*, "names")= chr [1:256] "P13" "P15" "P22" "P24" ... Abbildung 91 - die Struktur von ppar2 111 eexxtteennd deed dR Raasscchh m mood deelliinng g $ se.theta :List of 5 ..$ NAgroup1: Named num [1:470] 0.592 0.592 0.592 0.592 0.592 ... .. ..- attr(*, "names")= chr [1:470] "P2" "P8" "P20" "P25" ... ..$ NAgroup2: Named num [1:480] 0.643 0.708 0.626 0.808 0.632 ... .. ..- attr(*, "names")= chr [1:480] "P1" "P4" "P6" "P9" ... ..$ NAgroup3: Named num [1:211] 0.586 0.591 0.821 0.821 0.657 ... .. ..- attr(*, "names")= chr [1:211] "P29" "P32" "P44" "P46" ... ..$ NAgroup4: Named num [1:533] 0.575 0.697 0.631 0.584 0.588 ... .. ..- attr(*, "names")= chr [1:533] "P3" "P5" "P7" "P10" ... ..$ NAgroup5: Named num [1:256] 0.609 0.609 0.644 0.735 0.838 ... .. ..- attr(*, "names")= chr [1:256] "P13" "P15" "P22" "P24" ... $ pred.list:List of 5 ..$ 1:List of 2 .. ..$ x: int [1:21] 0 1 2 3 4 5 6 7 8 9 ... .. ..$ y: num [1:21] -4.55 -3.65 -2.82 -2.26 -1.81 ... .. ..- attr(*, "class")= chr "xyVector" ..$ 2:List of 2 .. ..$ x: int [1:21] 0 1 2 3 4 5 6 7 8 9 ... .. ..$ y: num [1:21] -4.55 -3.64 -2.80 -2.23 -1.77 ... .. ..- attr(*, "class")= chr "xyVector" ..$ 3:List of 2 .. ..$ x: int [1:21] 0 1 2 3 4 5 6 7 8 9 ... .. ..$ y: num [1:21] -4.18 -3.24 -2.38 -1.80 -1.33 ... .. ..- attr(*, "class")= chr "xyVector" ..$ 4:List of 2 .. ..$ x: int [1:21] 0 1 2 3 4 5 6 7 8 9 ... .. ..$ y: num [1:21] -4.50 -3.59 -2.76 -2.20 -1.76 ... .. ..- attr(*, "class")= chr "xyVector" ..$ 5:List of 2 .. ..$ x: int [1:21] 0 1 2 3 4 5 6 7 8 9 ... .. ..$ y: num [1:21] -4.40 -3.49 -2.65 -2.09 -1.63 ... .. ..- attr(*, "class")= chr "xyVector" $ hessian :List of 5 ..$ : num [1:470, 1:470] 2.848719 0.000091 0.000091 0.000000 0.000091 ... ..$ : num [1:480, 1:480] 2.416709 0.000000 0.000091 0.000091 0.000000 ... ..$ : num [1:211, 1:211] 2.92e+00 0.00e+00 0.00e+00 0.00e+00 -4.55e-05 ... ..$ : num [1:533, 1:533] 3.024797 0.000000 0.000000 -0.000091 0.000091 ... ..$ : num [1:256, 1:256] 2.70e+00 4.55e-05 0.00e+00 -4.65e-05 0.00e+00 ... $ mpoints : num 1 $ pers.ex : int [1:50] 23 127 175 184 265 297 390 398 406 443 ... $ gmemb : int [1:1950] 2 1 4 2 4 2 4 1 2 4 ... - attr(*, "class")= chr "ppar" Abbildung 91 – Fortsetzung: die Struktur von ppar2 Die Strukturen von ppar2 (mit Untergruppen) und ppar1 (ohne Untergruppen) ähneln einander. Allerdings sind in ppar2 die Personenfähigkeitsparameter ($thetapar) in 5 Untergruppen aufgeteilt. Gleiches gilt auch für die Standardfehler ($se.thetapar), die HesseMatrix ($hessian), die Rohscores und ihre dazugehörigen Personenparameter ($pred.list). Abschließend soll mittels Waldtest geprüft werden, ob die die einzelnen Items Rasch-Modellkonform sind. Wie man anhand von Abbildung 92 sehen kann, sind keine Items signifikant. 112 eexxtteennd deed dR Raasscchh m mood deelliinng g Auch bei der Verwendung des Waldtests bemerkt man keine Unterschiede zwischen Daten mit und ohne Untergruppen. Abbildung 92 - Waldtest bei Daten mit Untergruppen Zusammenfassung: Bei der Analyse der Datenmatrix werden automatisch alle Informationen über die Untergruppen aus der Datenmatrix gewonnen. Neben der Funktion RM gibt es auch beim LRtest(), beim Waldtest() und beim grafischen Modelltest plotGOF() keine Unterschiede zwischen Daten mit und ohne “missing values by design“. Nur bei der Funktion person.parameter() gibt es Unterschiede bei der Ausgabe, da die Personengruppen unterschiedliche Itemsets bearbeitet haben. Ein leider wenig erfreulicher Unterschied zwischen Daten ohne Untergruppen und mit vielen Untergruppen besteht in der Rechenzeit. Aufgrund der Komplexität und der Datenmenge brauchen große Datenmatrizen mit vielen Items und vielen Untergruppen sehr viel länger als Datenmatrizen mit wenig Items und wenigen Untergruppen. 113 eexxtteennd deed dR Raasscchh m mood deelliinng g 10 Das Rm-Objekt In diesem Kapitel wird ein einfacher Überblick über das Rm-Objekt gegeben. Für einen Einblick in die Welt der Objekte, Methode und Funktionen wird auf Kapitel 11 – Objekte in eRm verwiesen. Das Rm-Objekt wird von der RM()-Funktion erstellt und u. a. von diesen Funktionen verwendet: - LRtest() - Waldtest() - person.parameter() - plotICC(), plotjointICC() Dabei ist zu beachten, dass die Funktionen LRtest() und Waldtest() nur mit Rm-Objekten arbeiten können. Dazu gehören neben dem RM, auch das RSM und das PCM. Für die linearisierten Versionen (das LLTM, LRSM und LPCM) können kein Waldtest und kein bedingter LRT gerechnet werden. Die Funktion person.parameter() akzeptiert darüber hinaus mit Einschränkungen auch LLTM-, LRSM- und LPCM-Objekte. Damit kann man auch bei diesen Modellen die Personenparameter schätzen. Das LR-Objekt wird von der Funktion LRtest() LRtest() generiert und von der Funktion plotGOF() verwendet. Das Wald-Objekt wird von der Funktion Waldtest() generiert. Dieses Objekt wird von keiner anderen Funktion benötigt. Das ppar-Objekt wird von der Funktion person.parameter() erzeugt und von den folgenden Funktionen verwendet: - itemfit(), personfit() - pmat(), residuals() - plot(), IC() Auf der folgenden Seite finden Sie eine vereinfachte Darstellung der Funktionen und Beziehungen im Rm-Objekt. 114 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 93 – Beziehungen im Rm-Objekt 115 eexxtteennd deed dR Raasscchh m mood deelliinng g 11 Objekte in eRm (von Reinhold Hatzinger) In diesem Kapitel wird ein Überblick über Objekttypen, Funktionen und Methoden von eRm gegeben. Im Anschluss werden Beispiele demonstriert. Welche Objekttypen werden von welcher Funktion erzeugt Funktion RM() PCM() RSM() LLTM() LRSM() LPCM() Ausgabeobjekt ist vom Typ: dRm, Rm, eRm Rm, eRm Rm, eRm eRm eRm eRm Abbildung 94-Objekttypen und ihre erzeugenden Funktionen Welche Methode kann welche Objekttypen verarbeiten Methode Objekttyp der von Methode verarbeitet werden kann: dRm dRm, Rm plotjointICC() LRtest() plotICC() Waldtest() coef() dRm, Rm, eRm confint() logLik() model.matrix() person.parameter() print() summary() thresholds()* vcov() *(geht nur bei polytomen Modellen) 116 erzeugt von RM() RM(), PCM(), RSM() RM(), PCM(), RSM(), LLTM(), LRSM(), LPCM() eexxtteennd deed dR Raasscchh m mood deelliinng g Beispiele zur Demonstration: Rasch Modell resRM <- RM(dat) # class(resRM) # ergibt: [1] "dRm" "Rm" "eRm" coef(resRM) # alles funtioniert LRtest(resRM) plotjointICC(resRM) Rating Scale Modell: resRSM <- RSM(dat2) # class(resRM) # ergibt: [1] "Rm" "eRm" coef(resRM) # funktioniert LRtest(resRM) # funktioniert plotjointICC(resRM).# funnktioniert nicht weil nicht „dRm“ Lineares Partial Credit Modell: resLPCM <- LPCM(dat3, W=desmat) class(resRM) # ergibt: [1] "eRm" coef(resRM) # funktioniert LRtest(resRM) # funktioniert nicht weil nicht „Rm“ plotjointICC(resRM).# funktioniert nicht weil nicht „dRm“ 117 eexxtteennd deed dR Raasscchh m mood deelliinng g Grafische Darstellung: Schachtelung der Objekttypen und mögliche Methoden eRm: RM(), PCM(), RSM(). LLTM(), LRSM(), LPCM() Rm: RM(), PCM(), RSM() dRm: RM() plotjointICC() LRtest() plotICC() Waldtest() coef() confint() logLik() model.matrix() person.parameter() print() summary() thresholds() (nur bei polytomen Modellen) vcov() Abbildung 95 – Schachtelung der Objekttypen 118 eexxtteennd deed dR Raasscchh m mood deelliinng g 12 Literaturverzeichnis Andersen, E.B. (1973). A Goodness of Fit Test for the Rasch model. Psychometrika, 38, 123– 140. Andrich, D. (1978). A rating formulation for ordered response categories. Psychometrika, 43(4), 561-573. Fischer, G. H. (1973). The linear logistic test model as an instrument in educational research. Acta Psychologica, 37, 359-374. Fischer, G.H. (1974). Einführung in die Theorie psychologischer Tests [Introduction to Mental Test Theory]. Huber, Bern. Fischer, G.H. & Parzer, P. (1991). An Extension of the Rating Scale Model with an Application to the Measurement of Change. Psychometrika, 56, 637–651. Fischer, G.H. & Ponocny, I. (1994). An Extension of the Partial Credit Model with an Application to the Measurement of Change. Psychometrika, 59, 177–192. Fischer, G.H. & Ponocny-Seliger, E. (1998). Structural Rasch Modeling: Handbook of the Usage of LPCM-WIN 1.0. ProGAMMA, Groningen. Mair, P. & Hatzinger, R. (2007). eRm: extended Rasch modeling. R package version 0.9.5. URL http://CRAN.R-project.org/. Mair, P., & Hatzinger, R. (2007). Extended Rasch Modeling: The eRm Package for the Application of IRT Models in R. Journal of Statistical Software, 20(9). URL http://www.jstatsoft.org/v20/i09/. Mair P., & Hatzinger, R. (2007). „CML based estimation of extended Rasch models with the eRm package in R” . Psychology Science, Volume 49, 2007 (1), p. 26-43 Masters, G.N. (1982). A Rasch model for partial credit scoring. Psychometrika, 47, 149-174. R Development Core Team (2006). R: A Language and Environment for Statistical Computing. „R“ Foundation for Statistical Computing, Vienna, Austria. ISBN 3900051-07-0, URL: http://www.R-project.org. Rasch, G. (1960). Probabilistic models for some intelligence and attainment tests. Copenhagen: Danish Institute for Educational Research. Scheiblechner, H. (1972). Das Lernen und Lösen komplexer Denkaufgaben. [The Learning and Solving of Complex Reasoning Items.]. Zeitschrift f¨ur Experimentelle und Angewandte Psychologie, 3, 456–506. 119 eexxtteennd deed dR Raasscchh m mood deelliinng g 13 Empfehlenswerte Vertiefungsliteratur Baker, F.B. & Kim, S. (2004). Item Response Theory: Parameter Estimation Techniques. (2nd ed.). New York: Dekker. Bond, T. & Fox, C. (2001). Applying the Rasch model: Fundamental measurement in the human sciences. Mahwah, NJ: Lawrence Erlbaum Associates, Inc. Fischer, G.H. & Molenaar, I.W. (1995). Rasch Models. Springer-Verlag, New York. ISBN 0-387-94499-0. Kubinger, K.D. (1989). Aktueller Stand und kritische Würdigung der Probabilistischen Testtheorie. In K.D. Kubinger (Hrsg.), Moderne Testtheorie - Ein Abriß samt neuesten Beiträgen (S. 19-83), (2. Aufl.). München: Psychologie Verlags Union. Kubinger, K.D. (2003). Skalierung. In K.D. Kubinger & R.S. Jäger (Hrsg.), Schlüsselbegriffe der Psychologischen Diagnostik (S. 387-390). Weinheim: Beltz/PVU. Kubinger, K.D. (2005). Psychological Test Calibration using the Rasch Model - Some Critical Suggestions on Traditional Approaches. International Journal of Testing, 5, 377-394. Kubinger, K.D. & Draxler, C. & (2007). Probleme bei der Testkonstruktion nach dem RaschModell. Diagnostica, 53, 131-143. Rasch, D. & Kubinger, K.D. (2006). Statistik für das Psychologiestudium – Mit Softwareunterstützung zur Planung und Auswertung von Untersuchungen sowie zu sequentiellen Verfahren. Heidelberg: Spectrum. Rizopoulos, D. (2006). ltm: An R Package for Latent Variable Modeling and Item Response Theory Analyses. Journal of Statistical Software, 17(5), 1–25. URL http://www.jstatsoft.org/v17/i05/. Rost, J. (2004). Lehrbuch Testtheorie - Testkonstruktion. (2. Aufl.). Bern: Huber. 120 eexxtteennd deed dR Raasscchh m mood deelliinng g 14 Nützliche Webseiten Handbuch „extended Rasch modeling“ http://homepage.univie.ac.at/herbert.poinstingl/php/erm.php http://www.univie.ac.at/psychologie/diagnostik http://r-forge.r-project.org/ R-Forge – Unterstützung zu eRm http://r-forge.r-project.org/ AB Psychologische Diagnostik - Universität Wien http://www.univie.ac.at/psychologie/diagnostik The R Project for Statistical Computing http://www.r-project.org/ Comprehensive R Archive Network - CRAN http://cran.r-project.org/ R-Handbücher auf CRAN http://www.cran.r-project.org/doc/manuals/ R-Wikibooks http://de.wikibooks.org/wiki/GNU_R R-Wiki http://wiki.r-project.org/rwiki/doku.php R-Einführung auf CRAN http://cran.r-project.org/doc/manuals/R-intro.html Tinn-R http://sourceforge.net/projects/tinn-r 121 eexxtteennd deed dR Raasscchh m mood deelliinng g 15 FAQ – Frequently Asked Questions 1. Lösung für das Geschwindigkeitsproblem von von importierten Daten Das Importieren von Daten verläuft an sich unproblematisch. Es kann aber sein, dass die entsprechenden Daten als Listen in „R“ importiert werden. Listen können aber viele Ressourcen benötigen und damit wird die Rechenzeit drastisch verlängert. Damit die Daten in einer einfachen Matrix gespeichert werden, kann man folgende Befehlssequenz eingeben: a=as.matrix(read.table("b.txt",sep=",")) Durch den Befehl as.matrix() werden die Daten in eine Matrix konvertiert, die bei weitem weniger Mittel benötigt als eine Liste. 2. Installation/Deinstallation von „R“„R“-Paketen Programmpakete können folgendermaßen installiert werden. Dazu wählt man im Menüpunkt „Pakete“ den Unterpunkt „Installiere Pakete“. Im nächsten Schritte wählt man das Land (einen Server) aus, von dem man die Pakete installieren will. Abschließend muss man im nächsten Fenster die Pakete auswählen, die installiert werden sollen. Mit dem Unterpunkt „Aktualisiere Pakete“ schaut „R“ nach, ob neue Versionen der installierten Pakete auf dem gewählten Server vorhanden sind. Mit dem Menüpunkt „Installiere Pakete aus einem zip.File“ können auf der Festplatte bereits vorhandene Pakete ohne Internet installiert werden. Mit dem Befehl remove.packages() können Pakete deinstalliert werden. Ein manuelles Löschen der Package - Dateien sollte nicht vorgenommen werden. 3. Wie erstelle ich ein externes Teilungskriterium beim LRLR-Test Das Erstellen eines externen Teilungskriteriums für den LRtest ist sehr einfach. Man übergibt nämlich einen Vektor an die Funktion. Da man für jede Person die Gruppenzugehörigkeit angeben muss, muss die Anzahl der Elemente im Vektor gleich der Zeilenanzahl der Matrix sein. 122 eexxtteennd deed dR Raasscchh m mood deelliinng g 4. Das Einlesen von RR-Code Das Einlesen von R-Code in „R“ unter WINDOWS ist sehr einfach. Hier funktioniert das Einlesen von R-Code über das Menü („Datei/Lese R-Code ein“). Unter LINUX muss man allerdings mit dem Befehl source arbeiten und kann leider nicht auf Menüfunktionen zurückgreifen. Den Befehl source wendet man folgendermaßen an. Beispiel: source(„/home/ source(„/home/ info/R/rasch/1.r“) Damit kann aus einem bestimmten Verzeichnis eine R-Datei (in diesem Fall „1.r“) eingelesen werden. 5. Verwendung eines externen Editors unter Windows – TinnTinn-R Ein sehr guter, frei erhältlicher Editor für „R“ (unter WINDOWS) ist Tinn-R. Dieses Programm arbeitet außerhalb von R, verfügt aber über Möglichkeiten, um „R“ zu steuern. Zusätzlich besitzt Tinn-R Syntax-Highlighting für „R“-Code und eine kleine Hilfe-Datenbank für „R“-Befehle. 6. Hilfe – die Rechendauer in eRm ist sehr lang Die Anzahl der Personen wirkt sich kaum auf die Dauer der Berechnung aus. Wohl aber haben die Anzahl der Gruppen als auch die Anzahl der Items einen erheblichen Einfluss auf die Dauer der Berechnungen. Dabei hat sich durch simulierte Berechnungen gezeigt, dass der Schätzalgorithmus einem exponentiellen Laufzeitverhalten folgt. Dies bedeutet, dass ab einer gewissen Anzahl von Items (insbesondere wenn viele Untergruppen existieren) die Berechnungsdauer extrem lang wird. Um Zeit zu gewinnen, gibt es dazu zwei Möglichkeiten. Diese sind der Verzicht auf die Berechnung der Standardfehler und die Verwendung von Startwerten. 7. Hilfe – eine Berechnung in „R“ dauert sehr lang Es kann sein, dass Berechnungen sehr lange dauern, obwohl die importierte Datenmatrix relativ klein ist. Dieses Phänomen tritt auf, wenn Datenmatrizen in einer komplexen Struktur (z.B. eine Liste) in „R“ gespeichert sind und eigene Funktionen für Berechnungen verwendet werden. Wurden in dieser Funktion Befehle verwendet, die nicht für Listenberechnungen 123 eexxtteennd deed dR Raasscchh m mood deelliinng g optimiert sind, steigt die Rechenzeit beträchtlich an. Um dieses Problem zu lösen, gibt es zwei Möglichkeiten. Man schreibt die Funktion neu und verwendet die entsprechenden Befehle von „R“ oder man konvertiert die komplexe Struktur in eine einfache Matrix und führt dann die Berechnungen durch. Eine Neuprogrammierung der entsprechenden Funktion ist sicher der beste Weg. Allerdings kann dies eine sehr zeitintensive Angelegenheit sein, die nicht immer sofort durchgeführt werden kann. Deshalb wollen wir das Objekt konvertieren und geben is.matrix(d) ein. (Achtung – die Datenmatrix wurde vom Autor mit „d“ bezeichnet. Haben Sie einen anderen Namen für Ihre Datenmatrix gewählt, dann müssen Sie selbstverständlich diesen Namen eingeben.) Mit is.matrix() kann man überprüfen, ob ein Objekt eine einfache Matrix ist. Wird hier ein FALSE zurückgeliefert, ist das Objekt keine Matrix. Um eine Struktur in eine Matrix zu konvertieren, braucht man den Befehl as und den Namen der Struktur. Mit der Befehlssequenz „d=as.matrix(d) d=as.matrix(d)“ kann d in eine einfache Matrix konvertiert werden. Die Konvertierung hat einen positiven Effekt auf die Geschwindigkeit der Berechnungen, hat aber auch einen Nachteil. Der R-Commander kann mit einfachen Matrizen nicht arbeiten. Wenn also eine Datenmatrix in eine echte Matrix umgewandelt wird, dann kann die Matrix nicht mehr mit dem R-Commander bearbeitet werden. Eigene Notizen: 124 eexxtteennd deed dR Raasscchh m mood deelliinng g 16 Pakete für die Psychometrie Die hier aufgeführte Auswahl an Programmpaketen soll die Arbeit erleichtern bzw. zusätzliche Möglichkeiten für psychometrische Berechnungen bieten. Wichtig: Prüfen Sie Ihre Programmpakete regelmäßig nach Aktualisierungen im Internet. - e1071 - Misc. Functions of the Department of Statistics (e1071), TU Wien - eRm - extended Rasch modeling - FactoMineR - Factor Analysis and Data Mining with R - gnomeGUI - GNOME Console for R - gsl - wrapper for the Gnu Scientific Library - HTMLapplets - Dynamic visualisation in HTML documents - iplots - iPlots - interactive graphics for R - irtoys - Simple interface to the estimation and plotting of IRT models - JavaGD - Java Graphics Device - JGR - JGR - Java Gui for R - lattice - Lattice Graphics - latticeExtra - Extra Graphical Utilities Based on Lattice 125 eexxtteennd deed dR Raasscchh m mood deelliinng g 126 - ltm - Latent Trait Models under IRT - misc3d - Miscellaneous 3D Plots - MiscPsycho - Miscellaneous Psychometrics - pscl - Political Science Computational Laboratory - psy - Various procedures used in psychometry - psych - Procedures for Personality and Psychological Research - psychometric - Applied Psychometric Theory - psyphy - Functions for analyzing psychophysical data in R - R.utils - Various programming utilities - R2HTML - HTML exportation for R objects - random - True random numbers using random.org - Rcmdr.HH - Rcmdr support for the introductory course at Temple University - Rcmdr - R Commander - RcmdrPlugin.TeachingDemos - Rcmdr Teaching Demos Plug-In - rgl - 3D visualization device system (OpenGL) - RGraphics - Data and Functions from the book R Graphics - rJava - Low-level R to Java interface eexxtteennd deed dR Raasscchh m mood deelliinng g - RMySQL - R interface to the MySQL database - scatterplot3d - 3D Scatter Plot - wle - Weighted Likelihood Estimation - xlsReadWrite - Natively read and write Excel files - xtable - Export tables to LaTeX or HTM 127 eexxtteennd deed dR Raasscchh m mood deelliinng g 17 Matrix mat1 Die Matrix mat1 ist eine 1000 (Personen) x 15 (Items) – Datenmatrix, die für Beispielberechnungen verwendet wurde. mat1 enthält keine Gruppen und wurde mittels einer Simulation als Rasch-Modell-konforme Datenmatrix erzeugt. Diese Matrix kann vom AB Psychologische Diagnostik von der Homepage www.univie.ac.at/psychologie/diagnostik kopiert werden. 128 eexxtteennd deed dR Raasscchh m mood deelliinng g 18 Matrix mat2 Die Matrix mat2 ist eine 2000 (Personen) x 20 (Items) – Datenmatrix, die für die Beispiele mit Untergruppen verwendet wurde. mat2 wurde ebenfalls mittels Simulation als RaschModell-konforme Datenmatrix generiert. Sie kann ebenfalls vom AB Psychologische Diagnostik der Fakultät für Psychologie kopiert werden (www.univie.ac.at/psychologie/diagnostik). 129 eexxtteennd deed dR Raasscchh m mood deelliinng g 19 Abbildungsverzeichnis Abbildung 1 – Begrüßung durch R...........................................................................................17 Abbildung 2 - Auswahl des Menüpunkts "Installiere Pakete" .................................................17 Abbildung 3 - Wahl des Servers (in diesem Fall Austria)........................................................18 Abbildung 4 - Auswahl der gewünschten Pakete - in unserem Fall eRm ................................19 Abbildung 5 - das Paket „psy“ wurde geladen .........................................................................20 Abbildung 6 - Pakete laden über die GUI ................................................................................20 Abbildung 7 - Paket „psy“ wurde ausgewählt..........................................................................21 Abbildung 8 – die R-Benutzeroberfläche mit integriertem JGR..............................................22 Abbildung 9 - der Objektbrowser von JGR..............................................................................23 Abbildung 10 - Befehlseingabe unter JGR...............................................................................23 Abbildung 11 - der R-Commander benötigt weitere Pakete ....................................................24 Abbildung 12 - Installation vom lokalen PC oder von einem CRAN - Server ........................25 Abbildung 13 – das Statistikmenü der R-Commanders ...........................................................26 Abbildung 14 - das Grafikmenü des R-Commanders ..............................................................26 Abbildung 15 - weitere Hilfen des R-Commanders .................................................................27 Abbildung 16 - Datenimport mit dem R-Commander..............................................................27 Abbildung 17 – ein Plugin laden ..............................................................................................28 Abbildung 18 - Demonstrationen .............................................................................................28 Abbildung 19 - Power of the test..............................................................................................29 Abbildung 20 - ein Objekt vom Typ Matrix wird erstellt ........................................................30 Abbildung 21 - ein Array wird erstellt .....................................................................................31 Abbildung 22 - Berechnung der Faktoriellen ...........................................................................35 Abbildung 23 - Darstellung einer Sinuskurve ..........................................................................36 Abbildung 24 - Würfelsimulation ............................................................................................36 Abbildung 25 - Befehl für eine 3D-Ausgabe............................................................................37 Abbildung 26 - Darstellung einer 3D-Grafik ...........................................................................37 Abbildung 27 - Befehl zu einer weiteren 3D-Darstellung........................................................37 Abbildung 28 - 3D-Darstellung von Sinus und Kosinuswerten ...............................................38 Abbildung 29 - ein weiteres 3D-Beispiel .................................................................................38 Abbildung 30 - Berechnung von Pi nach der Monte Carlo - Methode.....................................39 Abbildung 31 - R-Commander laden .......................................................................................41 Abbildung 32 - der R-Commander ist einsatzbereit................................................................41 Abbildung 33 - Möglichkeiten des Datenimports ....................................................................42 Abbildung 34 - eine SPSS - Datei soll importiert werden........................................................43 Abbildung 35 - Import einer SPSS - Datendatei ......................................................................43 Abbildung 36 - Auswahl der Datendatei, die importiert werden soll.......................................45 Abbildung 37 –Import der SPSS-Datendatei mittels „read.spss“............................................46 Abbildung 38 - die Buttons "Datenmatrix bearbeiten" & "Datenmatrix betrachten" ..............46 Abbildung 39 – eine Datenmatrix ............................................................................................46 Abbildung 40 - R-Commander beenden...................................................................................47 Abbildung 41 - die Datenmatrix d ist keine Matrix..................................................................48 Abbildung 42 - die Datenmatrix d ist eine Liste ......................................................................48 Abbildung 43 – Sichere Workspace .........................................................................................51 Abbildung 44 – Datei zum Speichern auswählen.....................................................................52 Abbildung 45 – Lade Workspace .............................................................................................52 Abbildung 46 – Datei auswählen .............................................................................................53 Abbildung 47 - Formel des dichotomen, logistischen Rasch-Modells.....................................57 130 eexxtteennd deed dR Raasscchh m mood deelliinng g Abbildung 48 – eRm wurde geladen.........................................................................................57 Abbildung 49 - Berechnungen mit dem Rasch-Modell............................................................58 Abbildung 50 - die Ausgabe eines einfachen RM....................................................................59 Abbildung 51 - eine weitere RM - Berechnung .......................................................................60 Abbildung 52 - Ausgabe der Variablen a .................................................................................61 Abbildung 53 - Ausgabe mit Hilfe des Befehls print() ............................................................62 Abbildung 54 - der Befehl summary() .....................................................................................63 Abbildung 55 – die Ausgabe von summary(a).........................................................................64 Abbildung 56 - der Befehl str() ................................................................................................64 Abbildung 57 - die Objektstruktur, die in Variable a gespeichert ist .......................................65 Abbildung 58 - Zugriff auf interne Objektstrukturen...............................................................66 Abbildung 59 - Beschreibung der Strukturen eines Rm-Objektes ...........................................67 Abbildung 60 - Möglichkeiten des Befehls RM() ....................................................................68 Abbildung 61 – die Personenparameter werden geschätzt.......................................................70 Abbildung 62 – Ausgabe der Personenparameter von rv=0 bis rv=15 ....................................71 Abbildung 63 - Ausgabe der Personenparameter .....................................................................72 Abbildung 64 - die komplette interne Struktur des Objektes ppar ...........................................74 Abbildung 65 - die Personenparameter in kompakter Darstellung ..........................................74 Abbildung 66 – von der Schätzung ausgeschlossene Personen ...............................................76 Abbildung 67 - Ergebnisse der Personen 33 und 34 ................................................................76 Abbildung 68 - die Möglichkeiten des LRtest .........................................................................78 Abbildung 69 - Ausgabe eines LRtest – Ergebnisses...............................................................80 Abbildung 70 – LRT-Ergebnisse– Tk ist der Mittelwert .........................................................81 Abbildung 71 - interne Struktur von lrt1 ..................................................................................82 Abbildung 72 - LRtest() – externes Teilungskriterium ............................................................84 Abbildung 73 - Grafischer Modelltest - Median als Tk. ..........................................................86 Abbildung 74a - Grafischer Modelltest - externes Tk..............................................................87 Abbildung 75 - die Funktion Waldtest .....................................................................................92 Abbildung 76 – Waldtest – Teilungskriterium ist der Mittelwert ............................................93 Abbildung 77 – die interne Struktur eines Wald-Objekts ........................................................93 Abbildung 78 - Waldtest-Ergebnis (ein externer Vektor als Tk) .............................................95 Abbildung 79 - Fit-Statistik für die Itemparameter ..................................................................96 Abbildung 80 - Ausgabe der Personen-Fit-Statistiken .............................................................97 Abbildung 81 – Personen-Item-Matrix mit den erwarteten Wahrscheinlichkeiten..................98 Abbildung 82 - Ausgabe eines Ergebnisses der Funktion IC() ................................................99 Abbildung 83 - Grafische Darstellung der Personenparameter..............................................100 Abbildung 84 - Grafische Darstellung der ICCs ....................................................................101 Abbildung 85 - Grafische Darstellung aller ICCs ..................................................................102 Abbildung 86 – Zusammenfassung einer RM-Analyse .........................................................106 Abbildung 87 – LRT-Berechnung - Tk ist Median ................................................................107 Abbildung 88 - der Grafische Modelltest – Median ist das Tk. ............................................108 Abbildung 89 – NA-Pattern der Untergruppe 1 .....................................................................109 Abbildung 90 – Ausgabe der Personenparameterschätzung ..................................................110 Abbildung 91 – Fortsetzung: die Struktur von ppar2 ............................................................112 Abbildung 92 - Waldtest bei Daten mit Untergruppen...........................................................113 Abbildung 93 – Beziehungen im Rm-Objekt .........................................................................115 Abbildung 94-Objekttypen und ihre erzeugenden Funktionen ..............................................116 Abbildung 95 – Schachtelung der Objekttypen......................................................................118 131