rpart/0000755000176200001440000000000013454120607011404 5ustar liggesusersrpart/po/0000755000176200001440000000000013306236017012021 5ustar liggesusersrpart/po/R-fr.po0000644000176200001440000002166413306236017013200 0ustar liggesusers# Translation of R-rpart.pot to French # Copyright (C) 2005 The R Foundation # This file is distributed under the same license as the rpart R package. # Philippe Grosjean , 2005. # msgid "" msgstr "" "Project-Id-Version: rpart 3.1-24\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2014-03-18 11:16+0100\n" "Last-Translator: Philippe Grosjean \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.6.4\n" msgid "'x' must be a numeric vector" msgstr "'x' doit tre un vecteur numrique" msgid "Not a legitimate \"rpart\" object" msgstr "Ceci n'est pas un objet \"rpart\" valide" msgid "Plot not useful for classification or poisson trees" msgstr "" "Le graphe n'est pas utile pour des arbres de classification ou de poisson" msgid "fit is not a tree, just a root" msgstr "l'ajustement n'est pas un arbre, juste une racine" msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' ne contients aucuns rsultats de validation croise" msgid "Tree has variables not found in new data" msgstr "L'arbre a des variables introuvables dans le nouveau jeu de donnes" msgid "type 'class' is only appropriate for classification" msgstr "type 'class' n'est appropri que pour une classification" msgid "Invalid prediction for \"rpart\" object" msgstr "Prdiction incorrecte pour un objet \"rpart\"" msgid "'x' must be an \"rpart\" object" msgstr "'x' doit tre un objet \"rpart\"" msgid "Invalid type of residual" msgstr "Type de rsidus inconnus" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" "Arbre \"rpart\" inappropri et feuille de l'arbre diffrente d'un facteur " "2 niveaux" msgid "a 'formula' argument is required" msgstr "un argument 'formula' est ncessaire" msgid "Trees cannot handle interaction terms" msgstr "Les arbres ne peuvent prendre en compte les termes d'interaction" msgid "negative weights not allowed" msgstr "les pondrations ngatives ne sont pas autorises" msgid "Invalid method" msgstr "Methode incorrecte" msgid "Argument %s not matched" msgstr "L'argument %s est inconnu" msgid "Wrong length for 'xval'" msgstr "Longueur incorrecte de 'xval'" msgid "Cost vector is the wrong length" msgstr "le vecteur de cot n'est pas de la bonne taille" msgid "Cost vector must be positive" msgstr "Le vecteur de cot doit tre positif" msgid "Initialization routine is missing the 'summary' function" msgstr "La routine d'initialisation ne trouve pas la fonction 'summary'" msgid "no information available on parameters from previous call to plot()" msgstr "" "aucune information disponible pour les paramtres depuis un appel antrieur " " plot()" msgid "No offset allowed in classification models" msgstr "Aucun dcalage n'est autoris pour les modles de classification" msgid "The parms list must have names" msgstr "La liste des 'parms' doit tre nomme" msgid "'parms' component not matched: %s" msgstr "Composants de 'parms' inconnus: %s" msgid "Priors must sum to 1" msgstr "la somme des 'priors' doit tre 1" msgid "Priors must be >= 0" msgstr "les 'priors' doivent tre >= 0" msgid "Wrong length for priors" msgstr "Longueur incorrecte pour 'priors'" msgid "Wrong length for loss matrix" msgstr "Longueur inconnue pour la 'loss matrix'" msgid "Loss matrix must have zero on diagonals" msgstr "La 'loss matrix' doit avoir des zros dans sa diagonale" msgid "Loss matrix cannot have negative elements" msgstr "La 'loss matrix' ne peut avoir des lments ngatifs" msgid "Loss matrix has a row of zeros" msgstr "La 'loss matrix' a une ligne remplie de zros" msgid "Invalid splitting rule" msgstr "Rgle de sparation des groupes incorrecte" msgid "Parameter argument must be a list" msgstr "L'argument 'parameter' doit tre une liste" msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" "La valeur de 'maxcompete' fournie est < 0 ; La valeur 0 sera utilise la " "place" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" "La valeur de 'xval' fournie est < 0 ; La valeur 0 sera utilise la place" msgid "Maximum depth is 30" msgstr "La profondeur maximale est de 30" msgid "Maximum depth must be at least 1" msgstr "La profondeur maximale doit tre au moins 1" msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 2 " "est utilise la place." msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 0 " "est utilise la place." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" "'Response' doit tre un objet 'survival' - utilisez la fonction 'Surv()'" msgid "Observation time must be > 0" msgstr "Le temps associ aux observations doit tre > 0" msgid "No deaths in data set" msgstr "Aucun mort dans le jeu de donnes" msgid "You must input a named list for parms" msgstr "Vous devez entrer une liste nomme pour 'parms'" msgid "Invalid error method for Poisson" msgstr "Mthode d'erreur incorrecte pour 'Poisson'" msgid "Invalid shrinkage value" msgstr "Valeur 'shrinkage' incorrecte" msgid "response must be a 2 column matrix or a vector" msgstr "'response' doit tre un vecteur ou une matrice 2 colonnes" msgid "Number of events must be >= 0" msgstr "Le nombre d'vnements doit tre >= 0" msgid "User written methods must have 3 functions" msgstr "Les mthodes personnalises doivent avoir 3 fonctions" msgid "User written method does not contain an 'init' function" msgstr "La mthode personnalise ne contient pas de fonction 'init'" msgid "User written method does not contain a 'split' function" msgstr "La mthode personnalise ne contient pas de fonction 'split'" msgid "User written method does not contain an 'eval' function" msgstr "La mthode personnalise ne contient pas de fonction 'eval'" msgid "User 'eval' function returned invalid label" msgstr "La fonction 'eval' personnalise a renvoy une tiquette incorrecte" msgid "User 'eval' function returned invalid deviance" msgstr "La fonction 'eval' personnalise a renvoy un cart incorrect" msgid "Invalid return from categorical 'split' function" msgstr "Retour incorrect de la fonction 'split'" msgid "User 'split' function returned invalid goodness" msgstr "" "La fonction 'split' personnalise a renvoy une qualit (goodness) incorrecte" msgid "User 'split' function returned invalid direction" msgstr "La fonction 'split' personnalise a renvoy une direction incorrecte" msgid "may not be applicable for this method" msgstr "n'est probablement pas d'application pour cette mthode" msgid "Not an \"rpart\" object" msgstr "Ceci n'est pas un objet \"rpart\"" msgid "Nodes %s are not in this tree" msgstr "Les noeuds %s ne sont pas dans l'arbre" msgid "argument 'label' is no longer used" msgstr "l'argument 'label' n'est plus utilis" msgid "Invalid fit object" msgstr "Objet 'fit' incorrect" msgid "supplied nodes %s are not in this tree" msgstr "les noeuds fournis %s ne sont pas dans l'arbre" msgid "supplied nodes %s are leaves" msgstr "les noeuds fournis %s sont des feuilles" #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "plus de 52 niveaux dans la variable facteur prdictive, sorties tronques" #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "'x' ne semble pas tre un objet \"rpart\"" #~ msgid "'x' not converted" #~ msgstr "'x' n'a pas converg" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' doit tre un objet \"rpart\"" #, fuzzy #~ msgid "'parms' component not matched:" #~ msgstr "Composants de 'parms' inconnus" #, fuzzy #~ msgid "Not a legitimate tree" #~ msgstr "Ceci n'est pas un arbre valide" #, fuzzy #~ msgid "Not a legitimate 'rpart' object" #~ msgstr "Ceci n'est pas un objet rpart valide" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr "La valeur de 'surrogatestyle' fournie est hors plage," #~ msgid "the default value of 0 is used instead." #~ msgstr "la valeur par dfaut de 0 est utilise la place." #~ msgid "Not legitimate rpart" #~ msgstr "Ceci n'est pas un objet 'rpart' correct" #~ msgid "Must be an rpart x" #~ msgstr "x doit tre un objet rpart" #~ msgid "the default value of 2 is used instead." #~ msgstr "la valeur par dfaut de 2 est utilise la place." #~ msgid "Argument" #~ msgstr "L'argument" #~ msgid "Nodes" #~ msgstr "Les noeuds" #~ msgid "are leaves" #~ msgstr "sont des feuilles" #~ msgid "Label must be a column label of the frame component of the tree" #~ msgstr "" #~ "'Label' doit tre une colonne d'tiquettes des composants de l'arbre" rpart/po/de.po0000644000176200001440000000376613306236017012765 0ustar liggesusers# Translation of rpart (de.po) to German # Copyright (C) 2005-2014 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009-2012. # Detlef Steuer , 2014 msgid "" msgstr "" "Project-Id-Version: R 3.1.0 / rpart 4.1-6\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2014-03-16 17:30+0100\n" "Last-Translator: Detlef Steuer \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: poisson.c:34 msgid "Invalid time point" msgstr "ungültiger Zeitpunkt" #: poisson.c:38 msgid "Invalid event count" msgstr "ungültige Ereignisanzahl" #: poisson.c:68 msgid "Invalid error rule" msgstr "Ungültige Fehlerregel" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "Ungültiger Wert für 'method'" #: rpart.c:193 msgid "unknown error" msgstr "unbekannter Fehler" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' nicht gefunden" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' nicht gefunden" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' nicht gefunden" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' nicht gefunden" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "Rückgabewert ist kein Vektor" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "Rückgabewert hat falsche Länge" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "Der Ausdruck expr1 gab keinen Vektor zurück!" #~ msgid "Out of memory" #~ msgstr "Platz im Hauptspeicher reicht nicht aus" #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr "" #~ "Der Ausdruck expr1 gab eine Liste von %d Elementen zurück, %d sind " #~ "erforderlich." rpart/po/pl.po0000644000176200001440000000477613306236017013012 0ustar liggesusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-7\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-03-18 13:59+0000\n" "PO-Revision-Date: \n" "Last-Translator: Łukasz Daniel \n" "Language-Team: Łukasz Daniel \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "na-Revision-Date: 2012-05-29 07:55+0100\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Generator: Poedit 1.5.4\n" # rpart/src/poisson.c: 35 # _("Invalid time point") #: poisson.c:34 msgid "Invalid time point" msgstr "Niepoprawny punkt czasowy" # rpart/src/poisson.c: 39 # _("Invalid event count") #: poisson.c:38 msgid "Invalid event count" msgstr "błędne zliczenia zdarzenia" # rpart/src/poisson.c: 69 # _("Invalid error rule") #: poisson.c:68 msgid "Invalid error rule" msgstr "Niepoprawna reguła błędu" # rpart/src/rpart.c: 92 # error(_("Invalid value for 'method'")) # rpart/src/xpred.c: 90 # error(_("Invalid value for 'method'")) #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "niepoprawna wartość dla 'method'" # rpart/src/rpart.c: 194 # _("unknown error") #: rpart.c:193 msgid "unknown error" msgstr "nieznany błąd" # rpart/src/rpart_callback.c: 39 # error(_("'yback' not found")) #: rpart_callback.c:46 msgid "'yback' not found" msgstr "nie znaleziono 'yback'" # rpart/src/rpart_callback.c: 43 # error(_("'wback' not found")) #: rpart_callback.c:50 msgid "'wback' not found" msgstr "nie znaleziono 'wback'" # rpart/src/rpart_callback.c: 47 # error(_("'xback' not found")) #: rpart_callback.c:54 msgid "'xback' not found" msgstr "nie znaleziono 'xback'" # rpart/src/rpart_callback.c: 51 # error(_("'nback' not found")) #: rpart_callback.c:58 msgid "'nback' not found" msgstr "nie znaleziono 'nback'" # rpart/src/rpart_callback.c: 97 # error(_("return value not a vector")) #: rpart_callback.c:104 msgid "return value not a vector" msgstr "zwrócona wartość nie jest wektorem" # rpart/src/rpart_callback.c: 99 # error(_("returned value is the wrong length")) #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "zwrócona wartość ma błędną długość" # rpart/src/rpart_callback.c: 131 # error(_("the expression expr1 did not return a vector!")) #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "wyrażenie 'expr1' nie zwróciło wektora!" rpart/po/ru.po0000644000176200001440000000373413306236017013016 0ustar liggesusers# Russian translations for R # R # # Copyright (C) 2008 The R Foundation # This file is distributed under the same license as the R package. # Alexey Shipunov 2008 # # msgid "" msgstr "" "Project-Id-Version: R 2.7.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2012-11-29 14:21+0000\n" "PO-Revision-Date: 2013-03-19 14:46-0600\n" "Last-Translator: Alexey Shipunov \n" "Language-Team: Russian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=KOI8-R\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Russian\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" #: poisson.c:34 msgid "Invalid time point" msgstr " " #: poisson.c:38 msgid "Invalid event count" msgstr " " #: poisson.c:68 msgid "Invalid error rule" msgstr " " #: rpart.c:91 #: xpred.c:89 msgid "Invalid value for 'method'" msgstr " 'method'" #: rpart.c:193 msgid "unknown error" msgstr " " #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' " #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' " #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' " #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' " #: rpart_callback.c:104 msgid "return value not a vector" msgstr " -- " #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr " -- " #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr " expr1 !" #~ msgid "Out of memory" #~ msgstr " " #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr " expr1 %d , %d" rpart/po/R-de.po0000644000176200001440000002021313306236017013146 0ustar liggesusers# Translation of R-rpart.pot to German # Copyright (C) 2007-2014 The R Foundation # This file is distributed under the same license as the rpart package. # Chris Leick , 2009. # Detlef Steuer , 2014 msgid "" msgstr "" "Project-Id-Version: R 3.1.0 / rpart 4.1-6\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2014-03-16 17:27+0100\n" "Last-Translator: Detlef Steuer \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "'x' must be a numeric vector" msgstr "'x' muss ein numerischer Vektor sein" msgid "Not a legitimate \"rpart\" object" msgstr "kein rechtmäßiges \"rpart\"-Objekt" # http://de.wikipedia.org/wiki/Poisson_Verteilung msgid "Plot not useful for classification or poisson trees" msgstr "Darstellung nicht nützlich für Klassifizierung oder Poisson-Bäume" msgid "fit is not a tree, just a root" msgstr "Anpassung ist kein Baum, nur eine Wurzel" msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' enthält keine Kreuzbestätigungsergebnisse" msgid "Tree has variables not found in new data" msgstr "Baum hat Variablen, die in neuen Daten nicht gefunden wurden" msgid "type 'class' is only appropriate for classification" msgstr "Typ 'class' ist für Klssifikation nicht angemessen" msgid "Invalid prediction for \"rpart\" object" msgstr "ungültige Vorhersage für \"rpart\"-Objekt" msgid "'x' must be an \"rpart\" object" msgstr "'x' muss ein \"rpart\"-Objekt sein." msgid "Invalid type of residual" msgstr "Es ist nichts über diesen Residuen-Typ bekannt." msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "Kein regulärer \"rpart\"-Baum und ein Endpunkt kein zeistufiger Faktor" msgid "a 'formula' argument is required" msgstr "ein 'formula' Argument ist nötig" msgid "Trees cannot handle interaction terms" msgstr "Bäume können keine Interaktions-Terme handhaben" msgid "negative weights not allowed" msgstr "negative Gewichte nicht zulässig" msgid "Invalid method" msgstr "ungültige Methode" msgid "Argument %s not matched" msgstr "Argument %s nicht passend" msgid "Wrong length for 'xval'" msgstr "falsche Länge für 'xval'" msgid "Cost vector is the wrong length" msgstr "Kostenvektor hat die falsche Länge" msgid "Cost vector must be positive" msgstr "Kostenvektor muss positiv sein" msgid "Initialization routine is missing the 'summary' function" msgstr "Der Initialisierungsroutine fehlt die Funktion 'summary'." msgid "no information available on parameters from previous call to plot()" msgstr "" "keine Information über die Parameter der vorherigen Aufrufs von plot()\n" "verfügbar" msgid "No offset allowed in classification models" msgstr "kein Versatz in Klassifizierungsmodellen erlaubt" msgid "The parms list must have names" msgstr "Die Parms-Liste muss Namen haben" msgid "'parms' component not matched: %s" msgstr "'parms'-Komponente passt nicht: %s" msgid "Priors must sum to 1" msgstr "Priors müssen sich zu 1 summieren" msgid "Priors must be >= 0" msgstr "Priors müssen >= 0 sein" msgid "Wrong length for priors" msgstr "falsche Länge für priors" msgid "Wrong length for loss matrix" msgstr "falsche Länge für Verlustmatrix" msgid "Loss matrix must have zero on diagonals" msgstr "Verlustmatrix muss auf den Diagonalen Null sein" msgid "Loss matrix cannot have negative elements" msgstr "Verlustmatrix kann keine negativen Elemente haben" msgid "Loss matrix has a row of zeros" msgstr "Verlustmatrix hat eine Zeile mit Nullen" msgid "Invalid splitting rule" msgstr "ungültige Aufteilungsregel" msgid "Parameter argument must be a list" msgstr "Parameterargument muss eine Liste sein." msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" "Der für 'maxcompete' angegebene Wert ist < 0. Stattdessen wird der Wert 0 " "benutzt." msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" "Der für 'xval' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt." msgid "Maximum depth is 30" msgstr "maximale Tiefe ist 30" msgid "Maximum depth must be at least 1" msgstr "maximale Tiefe muss mindestens 1 sein" msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "Der für 'usesurrogate' angegebene Wert liegt außerhalb des Bereichs, " "stattdessen wird der Standardwert 2 benutzt." msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "Der für 'surrogatetyle' angegebene Wert liegt außerhalb des Bereichs, " "stattdessen wird der Standardwert 0 benutzt." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" "Antwort muss ein 'survival'-Objekt sein - benutzen Sie die Funktion 'Surv()'" msgid "Observation time must be > 0" msgstr "Beobachtungszeit muss > 0 sein" msgid "No deaths in data set" msgstr "keine deaths im Datensatz" msgid "You must input a named list for parms" msgstr "Sie müssen eine benannte Liste für parms eingeben." msgid "Invalid error method for Poisson" msgstr "ungültige Fehlermethode für Poisson" msgid "Invalid shrinkage value" msgstr "ungültiger Schrumpfungswert" msgid "response must be a 2 column matrix or a vector" msgstr "Antwort muss eine 2-spaltige Matrix oder Vektor sein" msgid "Number of events must be >= 0" msgstr "Anzahl der Ereignisse muss >= 0 sein" msgid "User written methods must have 3 functions" msgstr "Vom Benutzer geschriebene Methoden müssen drei Funktionen haben." msgid "User written method does not contain an 'init' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'init'-Funktion." msgid "User written method does not contain a 'split' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'split'-Funktion." msgid "User written method does not contain an 'eval' function" msgstr "Vom Benutzer geschriebene Methoden enthalten keine 'eval'-Funktion." msgid "User 'eval' function returned invalid label" msgstr "Benutzerfunktion 'eval' gab ungültige Bezeichnung zurück." msgid "User 'eval' function returned invalid deviance" msgstr "Benutzerfunktion 'eval' gab ungültige Abweichung zurück." msgid "Invalid return from categorical 'split' function" msgstr "ungültige Rückgabe von grundsätzlichen 'split'-Funktion" msgid "User 'split' function returned invalid goodness" msgstr "Benutzerfunktion 'split' gab ungültige Integrität zurück." msgid "User 'split' function returned invalid direction" msgstr "Benutzerfunktion 'split' gab ungültige Richtung zurück." msgid "may not be applicable for this method" msgstr "evtl. nicht anwendbar für diese Methode" msgid "Not an \"rpart\" object" msgstr "kein \"rpart\"-Objekt" msgid "Nodes %s are not in this tree" msgstr "Knoten %s sind nicht in diesem Baum." msgid "argument 'label' is no longer used" msgstr "Argument 'label' wird derzeit nicht benutzt." msgid "Invalid fit object" msgstr "ungültiges angepasstes Objekt" msgid "supplied nodes %s are not in this tree" msgstr "mitgelieferte Knoten %s sind nicht in diesem Baum." msgid "supplied nodes %s are leaves" msgstr "mitgelieferte Knoten %s sind Blätter" #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "mehr als 52 Stufen in einem Vorhersagefaktor, für Ausdruck reduziert" #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "x scheint kein \"rpart\"-Objekt zu sein." #~ msgid "'x' not converted" #~ msgstr "'x' nicht konvertiert" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' muss ein \"rpart\"-Objekt sein." #~ msgid "Not legitimate tree" #~ msgstr "kein rechtmäßiger Baum" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr "" #~ "Der für surrogatestyle angegebene Wert liegt außerhalb des Bereichs," #~ msgid "the default value of 0 is used instead." #~ msgstr "der Standardwert von 0 wird an dessen Stelle benutzt." #~ msgid "Not legitimate rpart" #~ msgstr "kein rechtmäßiger rpart" rpart/po/rpart.pot0000644000176200001440000000247013306236017013700 0ustar liggesusers# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: rpart 4.1-8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-16 07:53+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: poisson.c:34 msgid "Invalid time point" msgstr "" #: poisson.c:38 msgid "Invalid event count" msgstr "" #: poisson.c:68 msgid "Invalid error rule" msgstr "" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "" #: rpart.c:193 msgid "unknown error" msgstr "" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "" rpart/po/fr.po0000644000176200001440000000372613306236017013000 0ustar liggesusers# Translation of rpart.pot to French # Copyright (C) 2005 The R Foundation # This file is distributed under the same license as the rpart R package. # Philippe Grosjean , 2005. # msgid "" msgstr "" "Project-Id-Version: rpart 3.1-24\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-03-20 07:25+0000\n" "PO-Revision-Date: 2014-03-18 11:12+0100\n" "Last-Translator: Philippe Grosjean \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 1.6.4\n" #: poisson.c:34 msgid "Invalid time point" msgstr "Point temporel incorrect" #: poisson.c:38 msgid "Invalid event count" msgstr "Dnombrement d'vnements incorrect" #: poisson.c:68 msgid "Invalid error rule" msgstr "Rgle d'erreur incorrecte" #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "valeur incorrecte pour 'method'" #: rpart.c:193 msgid "unknown error" msgstr "erreur indtermine" #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback' non trouv" #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback' non trouv" #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback' non trouv" #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback' non trouv" #: rpart_callback.c:104 msgid "return value not a vector" msgstr "la valeur renvoye n'est pas un vecteur" #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "la valeur renvoye n'a pas la bonne longueur" #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "l'expression 'expr1' n'a pas renvoy un vecteur!" #~ msgid "Out of memory" #~ msgstr "Mmoire sature" #~ msgid "the expression expr1 returned a list of %d elements, %d required" #~ msgstr "" #~ "l'expression 'expr1' a renvoy une liste de %d lments, %d sont requis" rpart/po/ko.po0000644000176200001440000000414213306236017012773 0ustar liggesusers# Korean translation for R rpart package # Recommended/rpart/po/ko.po # Maintainer: Brian Ripley # # This file is distributed under the same license as the R rpart package. # Chel Hee Lee , 2013-2015. # # Reviewing process is completed (14-JAN-2015) # The original source code review is completed (14-JAN-2015) # QC:PASS # Freezing on 06-FEB-2015 for R-3.1.3 # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-03-27 21:46+0000\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: poisson.c:34 msgid "Invalid time point" msgstr "시점(time point)이 올바르지 않습니다." #: poisson.c:38 msgid "Invalid event count" msgstr "이벤트의 개수(event count)가 올바르지 않습니다." #: poisson.c:68 msgid "Invalid error rule" msgstr "에러규칙(error rule)이 올바르지 않습니다." #: rpart.c:91 xpred.c:89 msgid "Invalid value for 'method'" msgstr "'method'에 올바르지 않은 값입니다." #: rpart.c:193 msgid "unknown error" msgstr "알 수 없는 에러입니다." #: rpart_callback.c:46 msgid "'yback' not found" msgstr "'yback'을 찾을 수 없습니다." #: rpart_callback.c:50 msgid "'wback' not found" msgstr "'wback'을 찾을 수 없습니다." #: rpart_callback.c:54 msgid "'xback' not found" msgstr "'xback'을 찾을 수 없습니다." #: rpart_callback.c:58 msgid "'nback' not found" msgstr "'nback'을 찾을 수 없습니다." #: rpart_callback.c:104 msgid "return value not a vector" msgstr "벡터가 아닌 value를 반환합니다." #: rpart_callback.c:106 msgid "returned value is the wrong length" msgstr "반환된 value의 길이가 올바르지 않습니다." #: rpart_callback.c:138 msgid "the expression expr1 did not return a vector!" msgstr "표현식 expr1은 벡터를 반환하지 않았습니다!" rpart/po/R-pl.po0000644000176200001440000004523613306236017013205 0ustar liggesusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-7\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2014-03-18 13:59\n" "PO-Revision-Date: \n" "Last-Translator: Łukasz Daniel \n" "Language-Team: Łukasz Daniel \n" "Language: pl_PL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "na-Revision-Date: 2012-05-29 07:55+0100\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Generator: Poedit 1.6.4\n" "X-Poedit-Bookmarks: -1,6,-1,-1,-1,-1,-1,-1,-1,-1\n" # rpart/R/formatg.R: 6 # stop("'x' must be a numeric vector") msgid "'x' must be a numeric vector" msgstr "'x' musi być wektorem liczbowym" # rpart/R/text.rpart.R: 11 # stop("Not a legitimate \"rpart\" object") # rpart/R/rsq.rpart.R: 7 # stop("Not a legitimate \"rpart\" object") msgid "Not a legitimate \"rpart\" object" msgstr "argument nie jest obiektem klasy \"rpart\"" # rpart/R/meanvar.rpart.R: 7 # stop("Plot is not useful for classification or poisson trees") msgid "Plot not useful for classification or poisson trees" msgstr "Wykres jest nieprzydatny dla drzew klasyfikacyjnych lub poissonowskich" # rpart/R/plot.rpart.R: 5 # stop("fit is not a tree, just a root") # rpart/R/text.rpart.R: 12 # stop("fit is not a tree, just a root") msgid "fit is not a tree, just a root" msgstr "dopasowanie nie jest drzewem tylko korzeniem" # rpart/R/plotcp.R: 11 # stop("'cptable' component does not contain cross-validation results") msgid "'cptable' does not contain cross-validation results" msgstr "komponent 'cptable' nie zawiera wyników krzyżowej walidacji" # rpart/R/pred.rpart.R: 15 # stop("Tree has variables not found in new data") msgid "Tree has variables not found in new data" msgstr "Drzewo posiada zmienne nie znalezione w nowych danych" # rpart/R/predict.rpart.R: 31 # stop("type 'class' is only appropriate for classification") msgid "type 'class' is only appropriate for classification" msgstr "typ 'class' jest odpowiedni jedynie dla klasyfikacji" # rpart/R/predict.rpart.R: 37 # stop("Invalid prediction for \"rpart\" object") msgid "Invalid prediction for \"rpart\" object" msgstr "Niepoprawna predykcja dla obiektu klasy \"rpart\"" msgid "'x' must be an \"rpart\" object" msgstr "argument 'x' musi być obiektem klasy \"rpart\"" # rpart/R/residuals.rpart.R: 12 # stop("Invalid type of residual") msgid "Invalid type of residual" msgstr "Niepoprawny typ reszty" # rpart/R/roc.rpart.R: 5 # stop("'object' argument is not an object of class \"rpart\" or endpoint is not a 2 level-factor") msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" "argument 'object' nie jest obiektem klasy \"rpart\" lub punkt końcowy nie " "jest czynnikiem dwupoziomowym" # rpart/R/rpart.R: 15 # stop("a 'formula' argument is required") msgid "a 'formula' argument is required" msgstr "argument 'formula' jest wymagany" # rpart/R/rpart.R: 24 # stop("Trees cannot handle interaction terms") msgid "Trees cannot handle interaction terms" msgstr "Drzewa nie mogą obsłużyć członów oddziaływania" # rpart/R/rpart.R: 28 # stop("negative weights not allowed") msgid "negative weights not allowed" msgstr "ujemne wagi nie są dozwolone" # rpart/R/rpart.R: 59 # stop("Invalid method") msgid "Invalid method" msgstr "Niepoprawna metoda" # rpart/R/rpart.R: 96 # stop(gettextf("Argument %s not matched", names(extraArgs)[indx == 0L]), domain = "R-rpart") msgid "Argument %s not matched" msgstr "Argument %s nie został dopasowany" # rpart/R/xpred.rpart.R: 81 # stop("Wrong length for 'xval'") # rpart/R/xpred.rpart.R: 82 # stop("Wrong length for 'xval'") # rpart/R/rpart.R: 121 # stop("Wrong length for 'xval'") # rpart/R/rpart.R: 122 # stop("Wrong length for 'xval'") msgid "Wrong length for 'xval'" msgstr "Niepoprawna długość dla 'xval'" # rpart/R/rpart.R: 131 # stop("Cost vector is the wrong length") msgid "Cost vector is the wrong length" msgstr "Wektor kosztów ma niepoprawną długość" # rpart/R/rpart.R: 132 # stop("Cost vector must be positive") msgid "Cost vector must be positive" msgstr "Wektor kosztów musi być dodatni" # rpart/R/rpart.R: 251 # stop("Initialization routine is missing the 'summary' function") msgid "Initialization routine is missing the 'summary' function" msgstr "Brak procedury inicjalizacji w funkcji 'summary'" # rpart/R/snip.rpart.mouse.R: 9 # stop("no information available on parameters from previous call to plot()") # rpart/R/rpartco.R: 7 # stop("no information available on parameters from previous call to plot()") msgid "no information available on parameters from previous call to plot()" msgstr "" "brak dostępnej informacji na temat parametrów z poprzedniego wywołania " "'plot()'" # rpart/R/rpart.class.R: 3 # stop("No offset allowed in classification models") msgid "No offset allowed in classification models" msgstr "Brak dozwolonego przesunięcia w modelach klasyfikacyjnych" # rpart/R/rpart.class.R: 14 # stop("The parms list must have names") msgid "The parms list must have names" msgstr "Lista parametrów musi mieć nazwy" # rpart/R/rpart.exp.R: 116 # stop(gettextf("'parms' component not matched: %s", names(parms)[indx == 0L]), domain = "R-rpart") # rpart/R/rpart.class.R: 17 # stop(gettextf("'parms' component not matched: %s", names(parms)[temp == 0L]), domain = "R-rpart") # rpart/R/rpart.poisson.R: 21 # stop(gettextf("'parms' component not matched: %s", names(parms)[indx == 0L]), domain = "R-rpart") msgid "'parms' component not matched: %s" msgstr "komponent 'parms' nie został dopasowany: %s" # rpart/R/rpart.class.R: 23 # stop("Priors must sum to 1") msgid "Priors must sum to 1" msgstr "Prawdopodobieństwa a priori muszą sumować się do 1" # rpart/R/rpart.class.R: 24 # stop("Priors must be >= 0") msgid "Priors must be >= 0" msgstr "Prawdopodobieństwa a priori muszą być >= 0" # rpart/R/rpart.class.R: 25 # stop("Wrong length for priors") msgid "Wrong length for priors" msgstr "Niepoprawna długość dla prawdopodobieństw a priori" # rpart/R/rpart.class.R: 32 # stop("Wrong length for loss matrix") msgid "Wrong length for loss matrix" msgstr "Niepoprawna długość macierzy strat" # rpart/R/rpart.class.R: 35 # stop("Loss matrix must have zero on diagonals") msgid "Loss matrix must have zero on diagonals" msgstr "Macierz strat musi mieć zera na diagonali" # rpart/R/rpart.class.R: 37 # stop("Loss matrix cannot have negative elements") msgid "Loss matrix cannot have negative elements" msgstr "Macierz strat nie może mieć ujemnych elementów" # rpart/R/rpart.class.R: 39 # stop("Loss matrix has a row of zeros") msgid "Loss matrix has a row of zeros" msgstr "Macierz strat ma wiersz zer" # rpart/R/rpart.class.R: 45 # stop("Invalid splitting rule") msgid "Invalid splitting rule" msgstr "Niepoprawna reguła rozdzielająca" # rpart/R/rpart.class.R: 49 # stop("Parameter argument must be a list") msgid "Parameter argument must be a list" msgstr "Argument parametru musi być listą" # rpart/R/rpart.control.R: 8 # warning("The value of 'maxcompete' supplied is < 0; the value 0 was used instead") msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "Wartość dostarczonego 'maxcompete' <0; zamiast niej użyto 0" # rpart/R/rpart.control.R: 12 # warning("The value of 'xval' supplied is < 0; the value 0 was used instead") msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "Dostarczona wartość 'xval' <0; zamiast niej użyto 0" # rpart/R/rpart.control.R: 15 # stop("Maximum depth is 30") msgid "Maximum depth is 30" msgstr "Maksymalna głębokość wynosi 30" # rpart/R/rpart.control.R: 16 # stop("Maximum depth must be at least 1") msgid "Maximum depth must be at least 1" msgstr "Maksymalna głębokość musi być równa przynajmniej 1" # rpart/R/rpart.control.R: 23 # warning("The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.") msgid "" "The value of 'usesurrogate' supplied was out of range, the default value of " "2 is used instead." msgstr "" "Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej " "domyślnej wartości 2." # rpart/R/rpart.control.R: 23 # warning("The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.") msgid "" "The value of 'surrogatestyle' supplied was out of range, the default value " "of 0 is used instead." msgstr "" "Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej " "domyślnej wartości 0." # rpart/R/rpart.exp.R: 15 # stop("'y' argument must be an object of class \"survival\" - use the 'Surv()' function") msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "argument 'y' musi być obiektem \"survival\"- użyj funkcji 'Surv()'" # rpart/R/rpart.exp.R: 21 # stop("Observation time must be > 0") # rpart/R/rpart.poisson.R: 11 # stop("Observation time must be > 0") msgid "Observation time must be > 0" msgstr "Czas obserwacji musi być > 0" # rpart/R/rpart.exp.R: 22 # stop("No deaths in data set") msgid "No deaths in data set" msgstr "Brak śmierci w zbiorze danych" # rpart/R/rpart.exp.R: 112 # stop("You must input a named list for parms") # rpart/R/rpart.poisson.R: 17 # stop("You must input a named list for parms") msgid "You must input a named list for parms" msgstr "Musisz wprowadzić nazwaną listę do parametrów" # rpart/R/rpart.exp.R: 121 # stop("Invalid error method for Poisson") # rpart/R/rpart.poisson.R: 26 # stop("Invalid error method for Poisson") msgid "Invalid error method for Poisson" msgstr "Niepoprawna metoda błędu dla Poissona" # rpart/R/rpart.exp.R: 126 # stop("Invalid shrinkage value") # rpart/R/rpart.poisson.R: 32 # stop("Invalid shrinkage value") msgid "Invalid shrinkage value" msgstr "Niepoprawna wartość zawężenia" # rpart/R/rpart.poisson.R: 5 # stop("response must be a 2 column matrix or a vector") msgid "response must be a 2 column matrix or a vector" msgstr "Zmienna zależna musi być 2-kolumnową macierzą lub wektorem" # rpart/R/rpart.poisson.R: 12 # stop("Number of events must be >= 0") msgid "Number of events must be >= 0" msgstr "Liczba zdarzeń musi być >= 0" # rpart/R/rpartcallback.R: 7 # stop("User written methods must have 3 functions") msgid "User written methods must have 3 functions" msgstr "Metody użytkownika muszą mieć 3 funkcje" # rpart/R/rpartcallback.R: 13 # stop("User written method does not contain an 'eval' function") msgid "User written method does not contain an 'init' function" msgstr "Metoda użytkownika nie zawiera funkcji 'init()'" # rpart/R/rpartcallback.R: 11 # stop("User written method does not contain a 'split' function") msgid "User written method does not contain a 'split' function" msgstr "Metoda użytkownika nie zawiera funkcji 'split()'" # rpart/R/rpartcallback.R: 13 # stop("User written method does not contain an 'eval' function") msgid "User written method does not contain an 'eval' function" msgstr "Metoda użytkownika nie zawiera funkcji 'eval()'" # rpart/R/rpartcallback.R: 36 # stop("User 'eval' function returned invalid label") # rpart/R/rpartcallback.R: 65 # stop("User 'eval' function returned invalid label") msgid "User 'eval' function returned invalid label" msgstr "Funkcja użytkownika 'eval' zwróciła niepoprawną etykietę" # rpart/R/rpartcallback.R: 38 # stop("User 'eval' function returned invalid deviance") # rpart/R/rpartcallback.R: 67 # stop("User 'eval' function returned invalid deviance") msgid "User 'eval' function returned invalid deviance" msgstr "Funkcja użytkownika 'eval' zwróciła niepoprawne odchylenie" # rpart/R/rpartcallback.R: 49 # stop("Invalid return from categorical 'split' function") # rpart/R/rpartcallback.R: 79 # stop("Invalid return from categorical 'split' function") msgid "Invalid return from categorical 'split' function" msgstr "Niepoprawny wynik z kategorycznej funkcji 'split'" # rpart/R/rpartcallback.R: 54 # stop("User 'split' function returned invalid goodness") # rpart/R/rpartcallback.R: 85 # stop("User 'split' function returned invalid goodness") msgid "User 'split' function returned invalid goodness" msgstr "Funkcja użytkownika 'split' zwróciła niepoprawną dobroć" # rpart/R/rpartcallback.R: 56 # stop("User 'split' function returned invalid direction") # rpart/R/rpartcallback.R: 87 # stop("User 'split' function returned invalid direction") msgid "User 'split' function returned invalid direction" msgstr "Funkcja użytkownika 'split' zwróciła niepoprawny kierunek" # rpart/R/rsq.rpart.R: 17 # warning("may not be applicable for this method") msgid "may not be applicable for this method" msgstr "może nie mieć zastosowania dla tego modelu" # rpart/R/snip.rpart.R: 6 # stop("Not an \"rpart\" object") msgid "Not an \"rpart\" object" msgstr "argument 'x' nie jest obiektem klasy \"rpart\"" # rpart/R/snip.rpart.R: 20 # warning(gettextf("Nodes %s are not in this tree", toss[toss.idx == 0L]), # domain = "R-rpart") msgid "Nodes %s are not in this tree" msgstr "Węzły %s nie są w tym drzewie" # rpart/R/text.rpart.R: 15 # warning("argument 'label' is no longer used") msgid "argument 'label' is no longer used" msgstr "argument 'label' jest aktualnie nieużyty" # rpart/R/xpred.rpart.R: 7 # stop("Invalid fit object") msgid "Invalid fit object" msgstr "niepoprawny obiekt dopasowania" # rpart/R/zzz.R: 25 # warning(sprintf(gettext("supplied nodes %s are not in this tree", domain = "R-rpart"), paste(bad, collapse = ", ")), domain = NA) msgid "supplied nodes %s are not in this tree" msgstr "dostarczone węzły %s nie są w tym drzewie" # rpart/R/zzz.R: 28 # warning(sprintf(gettext("supplied nodes %s are leaves", domain = "R-rpart"), paste(good[leaves], collapse = ", ")), domain = NA) msgid "supplied nodes %s are leaves" msgstr "dostarczone węzły %s są liśćmi" # rpart/R/labels.rpart.R: 66 # warning("more than 52 levels in a predicting factor, truncated for printout", domain = "R-rpart") #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr "" #~ "więcej niż 52 poziomów w czynniku przewidującym, przycięto na potrzeby " #~ "wyświetlenia" # rpart/man/meanvar.rpart.Rd: 15 # gettext("ave(y)") # rpart/R/meanvar.rpart.R: 1 # gettext("ave(y)") #~ msgid "ave(y)" #~ msgstr "średnie(y)" #~ msgid "ave(deviance)" #~ msgstr "średnie(odchylenie)" # rpart/R/plot.rpart.R: 4 # stop("'x' argument is not an object of class \"rpart\"") # rpart/R/plotcp.R: 7 # stop("'x' argument is not an object of class \"rpart\"") # rpart/R/print.rpart.R: 4 # stop("'x' argument is not an object of class \"rpart\"") #~ msgid "'%s' argument is not an object of class %s" #~ msgstr "argument '%s' nie jest obiektem klasy %s" # rpart/R/path.rpart.R: 18 # gettext("node number: ", domain = "R-rpart") # rpart/R/path.rpart.R: 28 # gettext("node number: ", domain = "R-rpart") #~ msgid "node number:" #~ msgstr "numer węzła:" # rpart/R/plotcp.R: 21 # gettext("X-val Relative Error", domain = "R-rpart") #~ msgid "X-val Relative Error" #~ msgstr "Błąd względny wartości X" # rpart/R/plotcp.R: 29 # gettext("size of tree", domain = "R-rpart") #~ msgid "size of tree" #~ msgstr "rozmiar drzewa" # rpart/R/plotcp.R: 33 # gettext("number of splits", domain = "R-rpart") #~ msgid "number of splits" #~ msgstr "liczba rozgałęzień" # rpart/R/post.rpart.R: 22 # gettextf("Endpoint = %s", paste(temp, collapse = " "), domain = "R-rpart") #~ msgid "Endpoint = %s" #~ msgstr "Koniec = %s" #~ msgid "Regression tree:" #~ msgstr "Drzewo regresyjne:" #~ msgid "Classification tree:" #~ msgstr "Drzewo klasyfikacyjne:" #~ msgid "Rates regression tree:" #~ msgstr "Drzewo regresyjne szybkości:" #~ msgid "Survival regression tree:" #~ msgstr "Drzewo regresyjne przeżycia:" # rpart/R/printcp.R: 21 # gettext("Variables actually used in tree construction:\n", domain = "R-rpart") #~ msgid "Variables actually used in tree construction:" #~ msgstr "Zmienne uzyte w konstrukcji drzewa:" # rpart/R/printcp.R: 27 # gettext("Root node error: ", domain = "R-rpart") #~ msgid "Root node error:" #~ msgstr "Błąd głównego węzła:" # rpart/R/roc.rpart.R: 62 # gettext("Sensitivity", domain = "R-rpart") # rpart/R/roc.rpart.R: 66 # gettext("Sensitivity", domain = "R-rpart") #~ msgid "Sensitivity" #~ msgstr "Czułość" #~ msgid "1-Specificity" #~ msgstr "1-Specyficzność" #~ msgid "Specificity" #~ msgstr "Specyficzność" # rpart/R/rpart.anova.R: 6 # gettextf(" mean=%s, MSE=%s", formatg(yval, digits), formatg(dev/wt, digits), domain = "R-rpart") #~ msgid "mean=%s, MSE=%s" #~ msgstr "średnia=%s, błąd standardowy średniej=%s" # rpart/R/rpart.branch.R: 10 # stop("no information available on parameters from previous call to 'plot()'") #~ msgid "" #~ "no information available on parameters from previous call to 'plot()'" #~ msgstr "" #~ "brak dostępnej informacji na temat parametrów z poprzedniego wywołania " #~ "'plot()'" # rpart/R/rpart.control.R: 19 # warning("The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.") #~ msgid "" #~ "The value of '%s' supplied was out of range, the default value of %d is " #~ "used instead" #~ msgstr "" #~ "Dostarczona wartość '%s' była poza zakesem, użyto zamiast niej domyślnej " #~ "wartości %d" # rpart/R/rpartcallback.R: 9 # stop("User written method does not contain an 'init' function") #~ msgid "User written method does not contain an %s function" #~ msgstr "Metoda użytkownika nie zawiera funkcji '%s'" #~ msgid "Variable importance" #~ msgstr "Istotność zmiennej" # rpart/R/meanvar.rpart.R: 5 # stop("'tree' argument is not an object of class \"rpart\"") # rpart/R/path.rpart.R: 6 # stop("'tree' argument is not an object of class \"rpart\"") #~ msgid "'tree' argument is not an object of class \"rpart\"" #~ msgstr "argument 'tree' nie jest obiektem klasy \"rpart\"" # rpart/R/summary.rpart.R: 4 # stop("'object' argument is not an object of class \"rpart\"") # rpart/R/predict.rpart.R: 5 # stop("'object' argument is not an object of class \"rpart\"") #~ msgid "'object' argument is not an object of class \"rpart\"" #~ msgstr "argument 'object' nie jest obiektem klasy \"rpart\"" # rpart/R/printcp.R: 4 # stop ("'x' argument must be an object of class \"rpart\"") #~ msgid "'x' argument must be an object of class \"rpart\"" #~ msgstr "argument 'x' nie jest obiektem klasy \"rpart\"" # rpart/R/residuals.rpart.R: 5 # stop("'object' argument is not an object of classe \"rpart\"") #~ msgid "'object' argument is not an object of classe \"rpart\"" #~ msgstr "argument 'object' nie jest obiektem klasy \"rpart\"" #, fuzzy #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr "'x' nie wygląda na obiekt 'rpart'" #~ msgid "'x' not converted" #~ msgstr "'x' nie został przekształcony" #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr "'x' musi być obiektem \"rpart\"" rpart/po/R-ko.po0000644000176200001440000002204113306236017013170 0ustar liggesusers# Korean translation for R rpart package # Recommended/rpart/po/R-ko.po # Maintainer: Brian Ripley # # This file is distributed under the same license as the R rpart package. # Chel Hee Lee , 2013-2015. # # Reviewing process is completed (14-JAN-2015) # The original source code review is completed (14-JAN-2015) # QC:PASS # Freezing on 06-FEB-2015 for R-3.1.3 # msgid "" msgstr "" "Project-Id-Version: rpart 4.1-0\n" "POT-Creation-Date: 2014-03-27 21:46\n" "PO-Revision-Date: 2015-02-06 21:56-0600\n" "Last-Translator:Chel Hee Lee \n" "Language-Team: Chel Hee Lee \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" msgid "'x' must be a numeric vector" msgstr "'x'는 반드시 수치형 벡터이어야 합니다." msgid "Not a legitimate \"rpart\" object" msgstr "올바른 \"rpart\" 객체가 아닙니다." msgid "Plot not useful for classification or poisson trees" msgstr "분류(classification) 또는 포이송 트리(poisson trees)에 유용하지 않은 플롯입니다." msgid "fit is not a tree, just a root" msgstr "적합(fit)은 트리(tree)가 아니라 뿌리(root)일 뿐입니다." msgid "'cptable' does not contain cross-validation results" msgstr "'cptable'은 교차검증(cross-validation)한 결과를 포함하고 있지 않습니다." msgid "Tree has variables not found in new data" msgstr "트리(tree)는 새데이터에서 찾을 수 없는 변수들을 가지고 있습니다." msgid "type 'class' is only appropriate for classification" msgstr "타입 'class'는 오로지 클래시피케이션에서만 적절합니다" msgid "Invalid prediction for \"rpart\" object" msgstr "\"rpart\" 객체에 대한 올바른 예측이 아닙니다." msgid "'x' must be an \"rpart\" object" msgstr "'x'는 반드시 \"rpart\"이라는 객체이어야 합니다." msgid "Invalid type of residual" msgstr "올바른 잔차(residual)의 유형이 아닙니다." msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "타당한 \"rpart\" 트리(tree)가 아니며 엔드포인트(endpoint)가 두 개의 수준(levels)을 가진 요인(factor)가 아닙니다." msgid "a 'formula' argument is required" msgstr "'formula'라는 이름의 인자가 필요합니다." msgid "Trees cannot handle interaction terms" msgstr "트리(trees)는 교호작용항(interaction terms)을 다룰 수 없습니다." msgid "negative weights not allowed" msgstr "가중치(weights)는 음의 값을 가질 수 없습니다." msgid "Invalid method" msgstr "입력된 메소드가 올바르지 않습니다." msgid "Argument %s not matched" msgstr "%s와 일치하는 인자가 없습니다." msgid "Wrong length for 'xval'" msgstr "'xval'의 길이가 올바르지 않습니다." msgid "Cost vector is the wrong length" msgstr "cost 벡터의 길이가 올바르지 않습니다." msgid "Cost vector must be positive" msgstr "cost 벡터는 반드시 양의 값만을 가져야 합니다." msgid "Initialization routine is missing the 'summary' function" msgstr "'summary' 함수가 초기화 루틴(initialization routine)에서 누락되어 있습니다." msgid "no information available on parameters from previous call to plot()" msgstr "이전 호출로부터 plot()에 전달될 인자들에 사용가능한 정보가 없습니다." msgid "No offset allowed in classification models" msgstr "분류모델(classification models)에서는 offset을 사용할 수 없습니다." msgid "The parms list must have names" msgstr "parms의 구성요소들은 반드시 이름을 가지고 있어야 합니다." msgid "'parms' component not matched: %s" msgstr "다음은 'parms'을 구성하는 요소가 아닙니다: %s" msgid "Priors must sum to 1" msgstr "사전확률(priors)의 합은 반드시 1이어야 합니다." msgid "Priors must be >= 0" msgstr "사전확률(priors)은 반드시 0보다 크거나 같아야 합니다." msgid "Wrong length for priors" msgstr "사전확률(priors)의 길이가 잘못되었습니다." msgid "Wrong length for loss matrix" msgstr "손실행렬(loss matrix)의 길이가 잘못되었습니다." msgid "Loss matrix must have zero on diagonals" msgstr "손실행렬(loss matrix)의 대각요소는 반드시 0을 포함하고 있어야 합니다." msgid "Loss matrix cannot have negative elements" msgstr "손실행렬(Loss matrix)은 음의 값을 구성요소로 가질 수 없습니다." msgid "Loss matrix has a row of zeros" msgstr "손실행렬(loss matrix)는 영으로 이루어진 행을 가지고 있습니다." msgid "Invalid splitting rule" msgstr "올바르지 않은 분리기준(splitting rule)입니다." msgid "Parameter argument must be a list" msgstr "파라미터 인자(parms)는 반드시 리스트(list)이어야 합니다." msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "입력된 'maxcompete'의 값이 0 보다 작기 때문에 0으로 대체되었습니다." msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "입력된 'xval'의 값이 0보다 작기때문에 0으로 대체되었습니다." msgid "Maximum depth is 30" msgstr "최대 깊이(depth)는 30입니다." msgid "Maximum depth must be at least 1" msgstr "최대 깊이(depth)는 반드시 적어도 1 이상이어야 합니다." msgid "The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead." msgstr "입력된 'usesurrogate'의 값은 허용범위 밖에 있으므로 기본값 2를 대신 사용합니다." msgid "The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead." msgstr "입력된 'surrogatestyle'의 값은 허용범위 밖에 있기 때문에 기본값 0을 대신 사용합니다." msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "y는 반드시 'survival'이라는 객체가 와야 하므로 'Surv()'함수를 사용하길 바랍니다." msgid "Observation time must be > 0" msgstr "관찰시간(observation time)은 반드시 0 보다 커야 합니다." msgid "No deaths in data set" msgstr "데이터셋으로부터 이벤트(사망, death)를 찾을 수 없습니다." msgid "You must input a named list for parms" msgstr "parm에는 반드시 구성요소에 이름이 부여된 리스트(list)가 입력되어야 합니다." msgid "Invalid error method for Poisson" msgstr "포아송에 사용되는 올바른 에러메소드(error method)가 아닙니다." msgid "Invalid shrinkage value" msgstr "올바른 수축값(shrinkage value)가 아닙니다." msgid "response must be a 2 column matrix or a vector" msgstr "y는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다." msgid "Number of events must be >= 0" msgstr "이벤트(event)의 수는 반드시 0보다 크거나 같아야 합니다." msgid "User written methods must have 3 functions" msgstr "사용자에 의하여 작성된 메소드는 반드시 3개의 함수를 가지고 있어야 합니다." msgid "User written method does not contain an 'init' function" msgstr "사용자에 의하여 작성된 메소드에서 'init' 함수를 찾을 수 없습니다." msgid "User written method does not contain a 'split' function" msgstr "사용자에 의하여 작성된 메소드에서 'split' 함수를 찾을 수 없습니다." msgid "User written method does not contain an 'eval' function" msgstr "사용자에 의하여 작성된 메소드에서 'eval' 함수를 찾을 수 없습니다." msgid "User 'eval' function returned invalid label" msgstr "사용자의 'eval' 함수로부터 반환된 라벨(label)의 길이가 올바르지 않습니다." msgid "User 'eval' function returned invalid deviance" msgstr "사용자의 'eval' 함수로부터 반환된 편차(deviance)의 길이가 올바르지 않습니다." msgid "Invalid return from categorical 'split' function" msgstr "'split' 함수로부터 반환된 범주의 개수가 올바르지 않습니다." msgid "User 'split' function returned invalid goodness" msgstr "사용자의 'split' 함수로부터 반환된 goodness의 길이가 올바르지 않습니다." msgid "User 'split' function returned invalid direction" msgstr "사용자의 'split' 함수로부터 반환된 direction의 길이가 올바르지 않습니다." msgid "may not be applicable for this method" msgstr "이 메소드에 적용할 수 없을지도 모릅니다." msgid "Not an \"rpart\" object" msgstr "\"rpart\" 객체가 아닙니다." msgid "Nodes %s are not in this tree" msgstr "노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다." msgid "argument 'label' is no longer used" msgstr "인자 'label'은 더 이상 사용되지 않습니다." msgid "Invalid fit object" msgstr "올바르게 적합된 객체(fit object)가 아닙니다." msgid "supplied nodes %s are not in this tree" msgstr "제공된 노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다." msgid "supplied nodes %s are leaves" msgstr "제공된 노드(nodes) %s는 끝마디(leaves)입니다." rpart/po/R-ru.po0000644000176200001440000002045213306236017013211 0ustar liggesusers# Russian translations for R # R # # Copyright (C) 2008 The R Foundation # This file is distributed under the same license as the R package. # Alexey Shipunov 2008 # msgid "" msgstr "" "Project-Id-Version: R 2.7.0\n" "Report-Msgid-Bugs-To: bugs@r-project.org\n" "POT-Creation-Date: 2012-11-22 09:24\n" "PO-Revision-Date: 2013-03-19 14:46-0600\n" "Last-Translator: Alexey Shipunov \n" "Language-Team: Russian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=KOI8-R\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Russian\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "'x' must be a numeric vector" msgstr "'x' " msgid "Not a legitimate \"rpart\" object" msgstr " \"rpart\" " msgid "Plot not useful for classification or poisson trees" msgstr " " msgid "fit is not a tree, just a root" msgstr " -- , " msgid "'cptable' does not contain cross-validation results" msgstr "'cptable' " msgid "Tree has variables not found in new data" msgstr " , " msgid "type 'class' is only appropriate for classification" msgstr " 'class' " msgid "Invalid prediction for \"rpart\" object" msgstr " \"rpart\" " msgid "'x' must be an \"rpart\" object" msgstr "'x' \"rpart\"" msgid "Invalid type of residual" msgstr " " msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr " \"rpart\" " msgid "a 'formula' argument is required" msgstr " " msgid "Trees cannot handle interaction terms" msgstr " " msgid "negative weights not allowed" msgstr " " msgid "Invalid method" msgstr " " msgid "Argument %s not matched" msgstr " %s " msgid "Wrong length for 'xval'" msgstr " 'xval'" msgid "Cost vector is the wrong length" msgstr "Cost- " msgid "Cost vector must be positive" msgstr "Cost- " msgid "Initialization routine is missing the 'summary' function" msgstr " 'summary' " msgid "no information available on parameters from previous call to plot()" msgstr " plot()" msgid "No offset allowed in classification models" msgstr " " msgid "The parms list must have names" msgstr " " msgid "'parms' component not matched: %s" msgstr "'parms'- : %s" msgid "Priors must sum to 1" msgstr " 1" msgid "Priors must be >= 0" msgstr " >= 0" msgid "Wrong length for priors" msgstr " " msgid "Wrong length for loss matrix" msgstr " " msgid "Loss matrix must have zero on diagonals" msgstr " " msgid "Loss matrix cannot have negative elements" msgstr " " msgid "Loss matrix has a row of zeros" msgstr " " msgid "Invalid splitting rule" msgstr " " msgid "Parameter argument must be a list" msgstr " " msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr " 'maxcompete' < 0; 0" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr " 'xval' < 0; 0" msgid "Maximum depth is 30" msgstr " -- 30" msgid "Maximum depth must be at least 1" msgstr " 1" msgid "The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead." msgstr " usesurrogate , 2 " msgid "The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead." msgstr " usesurrogate , 0 " msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr " survival- -- 'Surv()'" msgid "Observation time must be > 0" msgstr " > 0" msgid "No deaths in data set" msgstr " " msgid "You must input a named list for parms" msgstr " parms" msgid "Invalid error method for Poisson" msgstr " Poisson" msgid "Invalid shrinkage value" msgstr " " msgid "response must be a 2 column matrix or a vector" msgstr " 2- " msgid "Number of events must be >= 0" msgstr " >= 0" msgid "User written methods must have 3 functions" msgstr " 3 " msgid "User written method does not contain an 'init' function" msgstr " 'init'" msgid "User written method does not contain a 'split' function" msgstr " 'split'" msgid "User written method does not contain an 'eval' function" msgstr " 'eval'" msgid "User 'eval' function returned invalid label" msgstr " 'eval' " msgid "User 'eval' function returned invalid deviance" msgstr " 'eval' " msgid "Invalid return from categorical 'split' function" msgstr " categorical 'split" msgid "User 'split' function returned invalid goodness" msgstr " 'split' " msgid "User 'split' function returned invalid direction" msgstr " 'split' " msgid "may not be applicable for this method" msgstr " " msgid "Not an \"rpart\" object" msgstr " \"rpart\"" msgid "Nodes %s are not in this tree" msgstr " %s " msgid "argument 'label' is no longer used" msgstr " 'label' " msgid "Invalid fit object" msgstr " " msgid "supplied nodes %s are not in this tree" msgstr " %s " msgid "supplied nodes %s are leaves" msgstr " %s " #~ msgid "more than 52 levels in a predicting factor, truncated for printout" #~ msgstr " 52 , " #~ msgid "x does not appear to be an \"rpart\" object" #~ msgstr ", x -- \"rpart\"-" #~ msgid "'x' not converted" #~ msgstr "'x' " #, fuzzy #~ msgid "'fit' must be an \"rpart\" object" #~ msgstr " rpart" #, fuzzy #~ msgid "'parms' component not matched:" #~ msgstr "'parms'- :" #, fuzzy #~ msgid "Not a legitimate tree" #~ msgstr " " #, fuzzy #~ msgid "Not a legitimate 'rpart' object" #~ msgstr " rpart-" #~ msgid "The value of surrogatestyle supplied was out of range," #~ msgstr " surrogatestyle ," #~ msgid "the default value of 0 is used instead." #~ msgstr " 0 " #~ msgid "Not legitimate rpart" #~ msgstr " rpart" #~ msgid "Must be an rpart x" #~ msgstr " rpart x" #~ msgid "the default value of 2 is used instead." #~ msgstr " 2 " #~ msgid "Argument" #~ msgstr "" #~ msgid "Nodes" #~ msgstr "" #~ msgid "," #~ msgstr "," #~ msgid "are leaves" #~ msgstr "" #~ msgid "Observation time must be >0" #~ msgstr " > 0" rpart/po/R-rpart.pot0000644000176200001440000000770213306236017014102 0ustar liggesusersmsgid "" msgstr "" "Project-Id-Version: rpart 4.1-8\n" "POT-Creation-Date: 2015-01-16 07:53\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" msgid "'x' must be a numeric vector" msgstr "" msgid "Not a legitimate \"rpart\" object" msgstr "" msgid "Plot not useful for classification or poisson trees" msgstr "" msgid "fit is not a tree, just a root" msgstr "" msgid "'cptable' does not contain cross-validation results" msgstr "" msgid "Tree has variables not found in new data" msgstr "" msgid "type 'class' is only appropriate for classification" msgstr "" msgid "Invalid prediction for \"rpart\" object" msgstr "" msgid "'x' must be an \"rpart\" object" msgstr "" msgid "Invalid type of residual" msgstr "" msgid "Not legitimate \"rpart\" tree and endpoint not a 2 level-factor" msgstr "" msgid "a 'formula' argument is required" msgstr "" msgid "Trees cannot handle interaction terms" msgstr "" msgid "negative weights not allowed" msgstr "" msgid "Invalid method" msgstr "" msgid "Argument %s not matched" msgstr "" msgid "Wrong length for 'xval'" msgstr "" msgid "Cost vector is the wrong length" msgstr "" msgid "Cost vector must be positive" msgstr "" msgid "Initialization routine is missing the 'summary' function" msgstr "" msgid "no information available on parameters from previous call to plot()" msgstr "" msgid "No offset allowed in classification models" msgstr "" msgid "The parms list must have names" msgstr "" msgid "'parms' component not matched: %s" msgstr "" msgid "Priors must sum to 1" msgstr "" msgid "Priors must be >= 0" msgstr "" msgid "Wrong length for priors" msgstr "" msgid "Wrong length for loss matrix" msgstr "" msgid "Loss matrix must have zero on diagonals" msgstr "" msgid "Loss matrix cannot have negative elements" msgstr "" msgid "Loss matrix has a row of zeros" msgstr "" msgid "Invalid splitting rule" msgstr "" msgid "Parameter argument must be a list" msgstr "" msgid "The value of 'maxcompete' supplied is < 0; the value 0 was used instead" msgstr "" msgid "The value of 'xval' supplied is < 0; the value 0 was used instead" msgstr "" msgid "Maximum depth is 30" msgstr "" msgid "Maximum depth must be at least 1" msgstr "" msgid "The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead." msgstr "" msgid "The value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead." msgstr "" msgid "Response must be a 'survival' object - use the 'Surv()' function" msgstr "" msgid "Observation time must be > 0" msgstr "" msgid "No deaths in data set" msgstr "" msgid "You must input a named list for parms" msgstr "" msgid "Invalid error method for Poisson" msgstr "" msgid "Invalid shrinkage value" msgstr "" msgid "response must be a 2 column matrix or a vector" msgstr "" msgid "Number of events must be >= 0" msgstr "" msgid "User written methods must have 3 functions" msgstr "" msgid "User written method does not contain an 'init' function" msgstr "" msgid "User written method does not contain a 'split' function" msgstr "" msgid "User written method does not contain an 'eval' function" msgstr "" msgid "User 'eval' function returned invalid label" msgstr "" msgid "User 'eval' function returned invalid deviance" msgstr "" msgid "Invalid return from categorical 'split' function" msgstr "" msgid "User 'split' function returned invalid goodness" msgstr "" msgid "User 'split' function returned invalid direction" msgstr "" msgid "may not be applicable for this method" msgstr "" msgid "Not an \"rpart\" object" msgstr "" msgid "Nodes %s are not in this tree" msgstr "" msgid "argument 'label' is no longer used" msgstr "" msgid "Invalid fit object" msgstr "" msgid "supplied nodes %s are not in this tree" msgstr "" msgid "supplied nodes %s are leaves" msgstr "" rpart/inst/0000755000176200001440000000000013453662152012366 5ustar liggesusersrpart/inst/po/0000755000176200001440000000000013306236017012776 5ustar liggesusersrpart/inst/po/pl/0000755000176200001440000000000013306236017013411 5ustar liggesusersrpart/inst/po/pl/LC_MESSAGES/0000755000176200001440000000000013306236017015176 5ustar liggesusersrpart/inst/po/pl/LC_MESSAGES/rpart.mo0000644000176200001440000000270013306236017016662 0ustar liggesusers 01CUgy"-  9Gax"%3+Y*    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 4.1-7 Report-Msgid-Bugs-To: POT-Creation-Date: 2014-03-18 13:59+0000 PO-Revision-Date: Last-Translator: Łukasz Daniel Language-Team: Łukasz Daniel Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit na-Revision-Date: 2012-05-29 07:55+0100 Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-SourceCharset: iso-8859-1 X-Generator: Poedit 1.5.4 nie znaleziono 'nback'nie znaleziono 'wback'nie znaleziono 'xback'nie znaleziono 'yback'Niepoprawna reguła błędubłędne zliczenia zdarzeniaNiepoprawny punkt czasowyniepoprawna wartość dla 'method'zwrócona wartość nie jest wektoremzwrócona wartość ma błędną długośćwyrażenie 'expr1' nie zwróciło wektora!nieznany błądrpart/inst/po/pl/LC_MESSAGES/R-rpart.mo0000644000176200001440000001657113306236017017074 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 WA=, -%"S*v!0';/N1~!"1 >*Z"8: ;(\,f8#VFz-6B&"i>dd0655=8=v<<1.0`0*!%651l ),,CRa>#,4D><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 4.1-7 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2014-03-18 13:59 PO-Revision-Date: Last-Translator: Łukasz Daniel Language-Team: Łukasz Daniel Language: pl_PL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit na-Revision-Date: 2012-05-29 07:55+0100 Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Poedit-SourceCharset: iso-8859-1 X-Generator: Poedit 1.6.4 X-Poedit-Bookmarks: -1,6,-1,-1,-1,-1,-1,-1,-1,-1 komponent 'cptable' nie zawiera wyników krzyżowej walidacjikomponent 'parms' nie został dopasowany: %s'x' musi być wektorem liczbowymargument 'x' musi być obiektem klasy "rpart"Argument %s nie został dopasowanyWektor kosztów ma niepoprawną długośćWektor kosztów musi być dodatniBrak procedury inicjalizacji w funkcji 'summary'Niepoprawna metoda błędu dla Poissonaniepoprawny obiekt dopasowaniaNiepoprawna metodaNiepoprawna predykcja dla obiektu klasy "rpart"Niepoprawny wynik z kategorycznej funkcji 'split'Niepoprawna wartość zawężeniaNiepoprawna reguła rozdzielającaNiepoprawny typ resztyMacierz strat nie może mieć ujemnych elementówMacierz strat ma wiersz zerMacierz strat musi mieć zera na diagonaliMaksymalna głębokość wynosi 30Maksymalna głębokość musi być równa przynajmniej 1Brak śmierci w zbiorze danychBrak dozwolonego przesunięcia w modelach klasyfikacyjnychWęzły %s nie są w tym drzewieargument nie jest obiektem klasy "rpart"argument 'x' nie jest obiektem klasy "rpart"argument 'object' nie jest obiektem klasy "rpart" lub punkt końcowy nie jest czynnikiem dwupoziomowymLiczba zdarzeń musi być >= 0Czas obserwacji musi być > 0Argument parametru musi być listąWykres jest nieprzydatny dla drzew klasyfikacyjnych lub poissonowskichPrawdopodobieństwa a priori muszą być >= 0Prawdopodobieństwa a priori muszą sumować się do 1argument 'y' musi być obiektem "survival"- użyj funkcji 'Surv()'Lista parametrów musi mieć nazwyWartość dostarczonego 'maxcompete' <0; zamiast niej użyto 0Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej domyślnej wartości 0.Dostarczona wartość 'usesurrogate' była poza zakesem, użyto zamiast niej domyślnej wartości 2.Dostarczona wartość 'xval' <0; zamiast niej użyto 0Drzewo posiada zmienne nie znalezione w nowych danychDrzewa nie mogą obsłużyć członów oddziaływaniaFunkcja użytkownika 'eval' zwróciła niepoprawne odchylenieFunkcja użytkownika 'eval' zwróciła niepoprawną etykietęFunkcja użytkownika 'split' zwróciła niepoprawny kierunekFunkcja użytkownika 'split' zwróciła niepoprawną dobroćMetoda użytkownika nie zawiera funkcji 'split()'Metoda użytkownika nie zawiera funkcji 'eval()'Metoda użytkownika nie zawiera funkcji 'init()'Metody użytkownika muszą mieć 3 funkcjeNiepoprawna długość dla 'xval'Niepoprawna długość macierzy stratNiepoprawna długość dla prawdopodobieństw a prioriMusisz wprowadzić nazwaną listę do parametrówargument 'formula' jest wymaganyargument 'label' jest aktualnie nieużytydopasowanie nie jest drzewem tylko korzeniemmoże nie mieć zastosowania dla tego modeluujemne wagi nie są dozwolonebrak dostępnej informacji na temat parametrów z poprzedniego wywołania 'plot()'Zmienna zależna musi być 2-kolumnową macierzą lub wektoremdostarczone węzły %s są liśćmidostarczone węzły %s nie są w tym drzewietyp 'class' jest odpowiedni jedynie dla klasyfikacjirpart/inst/po/en@quot/0000755000176200001440000000000013306236017014411 5ustar liggesusersrpart/inst/po/en@quot/LC_MESSAGES/0000755000176200001440000000000013306236017016176 5ustar liggesusersrpart/inst/po/en@quot/LC_MESSAGES/rpart.mo0000644000176200001440000000231113306236017017660 0ustar liggesusers 01CUgy"-  9WG 1P"j-     'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 4.1-8 Report-Msgid-Bugs-To: POT-Creation-Date: 2015-01-16 07:53+0000 PO-Revision-Date: 2015-01-16 07:53+0000 Last-Translator: Automatically generated Language-Team: none Language: en MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); ‘nback’ not found‘wback’ not found‘xback’ not found‘yback’ not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for ‘method’return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorrpart/inst/po/en@quot/LC_MESSAGES/R-rpart.mo0000644000176200001440000001522413306236017020066 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 6A7x% !1Q<n %4Iax)' 7*Mx= (!E3gH K,dxbE@(%2/483m;;;*U%$&C%bC.&57\><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 4.1-8 POT-Creation-Date: 2015-01-16 07:53 PO-Revision-Date: 2015-01-16 07:53 Last-Translator: Automatically generated Language-Team: none MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Language: en Plural-Forms: nplurals=2; plural=(n != 1); ‘cptable’ does not contain cross-validation results‘parms’ component not matched: %s‘x’ must be a numeric vector‘x’ must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the ‘summary’ functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical ‘split’ functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a ‘survival’ object - use the ‘Surv()’ functionThe parms list must have namesThe value of ‘maxcompete’ supplied is < 0; the value 0 was used insteadThe value of ‘surrogatestyle’ supplied was out of range, the default value of 0 is used instead.The value of ‘usesurrogate’ supplied was out of range, the default value of 2 is used instead.The value of ‘xval’ supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser ‘eval’ function returned invalid devianceUser ‘eval’ function returned invalid labelUser ‘split’ function returned invalid directionUser ‘split’ function returned invalid goodnessUser written method does not contain a ‘split’ functionUser written method does not contain an ‘eval’ functionUser written method does not contain an ‘init’ functionUser written methods must have 3 functionsWrong length for ‘xval’Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa ‘formula’ argument is requiredargument ‘label’ is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype ‘class’ is only appropriate for classificationrpart/inst/po/ko/0000755000176200001440000000000013306236017013407 5ustar liggesusersrpart/inst/po/ko/LC_MESSAGES/0000755000176200001440000000000013306236017015174 5ustar liggesusersrpart/inst/po/ko/LC_MESSAGES/rpart.mo0000644000176200001440000000274713306236017016673 0ustar liggesusers 01CUgy"-  9|G### #06T>0-*)7T:    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 4.1-0 Report-Msgid-Bugs-To: POT-Creation-Date: 2014-03-27 21:46+0000 PO-Revision-Date: 2015-02-06 21:56-0600 Last-Translator:Chel Hee Lee Language-Team: Chel Hee Lee Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; 'nback'을 찾을 수 없습니다.'wback'을 찾을 수 없습니다.'xback'을 찾을 수 없습니다.'yback'을 찾을 수 없습니다.에러규칙(error rule)이 올바르지 않습니다.이벤트의 개수(event count)가 올바르지 않습니다.시점(time point)이 올바르지 않습니다.'method'에 올바르지 않은 값입니다.벡터가 아닌 value를 반환합니다.반환된 value의 길이가 올바르지 않습니다.표현식 expr1은 벡터를 반환하지 않았습니다!알 수 없는 에러입니다.rpart/inst/po/ko/LC_MESSAGES/R-rpart.mo0000644000176200001440000002151213306236017017061 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 `AZ<5:<p*3> ]KR:17:iP5:+5fSR]C$HMR]F)!AKFKaeH>\jNYUpj QYO7fc`R_[ZoZh%.=8f4 4 7 F!9O!<!_!M&"9t"P"J"><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 4.1-0 POT-Creation-Date: 2014-03-27 21:46 PO-Revision-Date: 2015-02-06 21:56-0600 Last-Translator:Chel Hee Lee Language-Team: Chel Hee Lee Language: ko MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; 'cptable'은 교차검증(cross-validation)한 결과를 포함하고 있지 않습니다.다음은 'parms'을 구성하는 요소가 아닙니다: %s'x'는 반드시 수치형 벡터이어야 합니다.'x'는 반드시 "rpart"이라는 객체이어야 합니다.%s와 일치하는 인자가 없습니다.cost 벡터의 길이가 올바르지 않습니다.cost 벡터는 반드시 양의 값만을 가져야 합니다.'summary' 함수가 초기화 루틴(initialization routine)에서 누락되어 있습니다.포아송에 사용되는 올바른 에러메소드(error method)가 아닙니다.올바르게 적합된 객체(fit object)가 아닙니다.입력된 메소드가 올바르지 않습니다."rpart" 객체에 대한 올바른 예측이 아닙니다.'split' 함수로부터 반환된 범주의 개수가 올바르지 않습니다.올바른 수축값(shrinkage value)가 아닙니다.올바르지 않은 분리기준(splitting rule)입니다.올바른 잔차(residual)의 유형이 아닙니다.손실행렬(Loss matrix)은 음의 값을 구성요소로 가질 수 없습니다.손실행렬(loss matrix)는 영으로 이루어진 행을 가지고 있습니다.손실행렬(loss matrix)의 대각요소는 반드시 0을 포함하고 있어야 합니다.최대 깊이(depth)는 30입니다.최대 깊이(depth)는 반드시 적어도 1 이상이어야 합니다.데이터셋으로부터 이벤트(사망, death)를 찾을 수 없습니다.분류모델(classification models)에서는 offset을 사용할 수 없습니다.노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다.올바른 "rpart" 객체가 아닙니다."rpart" 객체가 아닙니다.타당한 "rpart" 트리(tree)가 아니며 엔드포인트(endpoint)가 두 개의 수준(levels)을 가진 요인(factor)가 아닙니다.이벤트(event)의 수는 반드시 0보다 크거나 같아야 합니다.관찰시간(observation time)은 반드시 0 보다 커야 합니다.파라미터 인자(parms)는 반드시 리스트(list)이어야 합니다.분류(classification) 또는 포이송 트리(poisson trees)에 유용하지 않은 플롯입니다.사전확률(priors)은 반드시 0보다 크거나 같아야 합니다.사전확률(priors)의 합은 반드시 1이어야 합니다.y는 반드시 'survival'이라는 객체가 와야 하므로 'Surv()'함수를 사용하길 바랍니다.parms의 구성요소들은 반드시 이름을 가지고 있어야 합니다.입력된 'maxcompete'의 값이 0 보다 작기 때문에 0으로 대체되었습니다.입력된 'surrogatestyle'의 값은 허용범위 밖에 있기 때문에 기본값 0을 대신 사용합니다.입력된 'usesurrogate'의 값은 허용범위 밖에 있으므로 기본값 2를 대신 사용합니다.입력된 'xval'의 값이 0보다 작기때문에 0으로 대체되었습니다.트리(tree)는 새데이터에서 찾을 수 없는 변수들을 가지고 있습니다.트리(trees)는 교호작용항(interaction terms)을 다룰 수 없습니다.사용자의 'eval' 함수로부터 반환된 편차(deviance)의 길이가 올바르지 않습니다.사용자의 'eval' 함수로부터 반환된 라벨(label)의 길이가 올바르지 않습니다.사용자의 'split' 함수로부터 반환된 direction의 길이가 올바르지 않습니다.사용자의 'split' 함수로부터 반환된 goodness의 길이가 올바르지 않습니다.사용자에 의하여 작성된 메소드에서 'split' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드에서 'eval' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드에서 'init' 함수를 찾을 수 없습니다.사용자에 의하여 작성된 메소드는 반드시 3개의 함수를 가지고 있어야 합니다.'xval'의 길이가 올바르지 않습니다.손실행렬(loss matrix)의 길이가 잘못되었습니다.사전확률(priors)의 길이가 잘못되었습니다.parm에는 반드시 구성요소에 이름이 부여된 리스트(list)가 입력되어야 합니다.'formula'라는 이름의 인자가 필요합니다.인자 'label'은 더 이상 사용되지 않습니다.적합(fit)은 트리(tree)가 아니라 뿌리(root)일 뿐입니다.이 메소드에 적용할 수 없을지도 모릅니다.가중치(weights)는 음의 값을 가질 수 없습니다.이전 호출로부터 plot()에 전달될 인자들에 사용가능한 정보가 없습니다.y는 반드시 2개의 열을 가진 행렬 또는 벡터이어야 합니다.제공된 노드(nodes) %s는 끝마디(leaves)입니다.제공된 노드(nodes) %s를 이 트리(tree)안에서 찾을 수 없습니다.타입 'class'는 오로지 클래시피케이션에서만 적절합니다rpart/inst/po/fr/0000755000176200001440000000000013306236017013405 5ustar liggesusersrpart/inst/po/fr/LC_MESSAGES/0000755000176200001440000000000013306236017015172 5ustar liggesusersrpart/inst/po/fr/LC_MESSAGES/rpart.mo0000644000176200001440000000251013306236017016655 0ustar liggesusers 01CUgy"-  9G$7#Qu',04    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: rpart 3.1-24 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2014-03-18 11:12+0100 Last-Translator: Philippe Grosjean Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 1.6.4 'nback' non trouv'wback' non trouv'xback' non trouv'yback' non trouvRgle d'erreur incorrecteDnombrement d'vnements incorrectPoint temporel incorrectvaleur incorrecte pour 'method'la valeur renvoye n'est pas un vecteurla valeur renvoye n'a pas la bonne longueurl'expression 'expr1' n'a pas renvoy un vecteur!erreur indterminerpart/inst/po/fr/LC_MESSAGES/R-rpart.mo0000644000176200001440000001654313306236017017067 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A="0"Sv/$?*Do+'* 54N-7 + !6@X&&S%[/*I&!EHg%Pe'eJC>@=CDEM<;;Q5'! /+$[%171TB;'.8*><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: rpart 3.1-24 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2014-03-18 11:16+0100 Last-Translator: Philippe Grosjean Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Poedit 1.6.4 'cptable' ne contients aucuns rsultats de validation croiseComposants de 'parms' inconnus: %s'x' doit tre un vecteur numrique'x' doit tre un objet "rpart"L'argument %s est inconnule vecteur de cot n'est pas de la bonne tailleLe vecteur de cot doit tre positifLa routine d'initialisation ne trouve pas la fonction 'summary'Mthode d'erreur incorrecte pour 'Poisson'Objet 'fit' incorrectMethode incorrectePrdiction incorrecte pour un objet "rpart"Retour incorrect de la fonction 'split'Valeur 'shrinkage' incorrecteRgle de sparation des groupes incorrecteType de rsidus inconnusLa 'loss matrix' ne peut avoir des lments ngatifsLa 'loss matrix' a une ligne remplie de zrosLa 'loss matrix' doit avoir des zros dans sa diagonaleLa profondeur maximale est de 30La profondeur maximale doit tre au moins 1Aucun mort dans le jeu de donnesAucun dcalage n'est autoris pour les modles de classificationLes noeuds %s ne sont pas dans l'arbreCeci n'est pas un objet "rpart" valideCeci n'est pas un objet "rpart"Arbre "rpart" inappropri et feuille de l'arbre diffrente d'un facteur 2 niveauxLe nombre d'vnements doit tre >= 0Le temps associ aux observations doit tre > 0L'argument 'parameter' doit tre une listeLe graphe n'est pas utile pour des arbres de classification ou de poissonles 'priors' doivent tre >= 0la somme des 'priors' doit tre 1'Response' doit tre un objet 'survival' - utilisez la fonction 'Surv()'La liste des 'parms' doit tre nommeLa valeur de 'maxcompete' fournie est < 0 ; La valeur 0 sera utilise la placeLa valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 0 est utilise la place.La valeur de 'usesurrogate' fournie est hors plage,la valeur par dfaut de 2 est utilise la place.La valeur de 'xval' fournie est < 0 ; La valeur 0 sera utilise la placeL'arbre a des variables introuvables dans le nouveau jeu de donnesLes arbres ne peuvent prendre en compte les termes d'interactionLa fonction 'eval' personnalise a renvoy un cart incorrectLa fonction 'eval' personnalise a renvoy une tiquette incorrecteLa fonction 'split' personnalise a renvoy une direction incorrecteLa fonction 'split' personnalise a renvoy une qualit (goodness) incorrecteLa mthode personnalise ne contient pas de fonction 'split'La mthode personnalise ne contient pas de fonction 'eval'La mthode personnalise ne contient pas de fonction 'init'Les mthodes personnalises doivent avoir 3 fonctionsLongueur incorrecte de 'xval'Longueur inconnue pour la 'loss matrix'Longueur incorrecte pour 'priors'Vous devez entrer une liste nomme pour 'parms'un argument 'formula' est ncessairel'argument 'label' n'est plus utilisl'ajustement n'est pas un arbre, juste une racinen'est probablement pas d'application pour cette mthodeles pondrations ngatives ne sont pas autorisesaucune information disponible pour les paramtres depuis un appel antrieur plot()'response' doit tre un vecteur ou une matrice 2 colonnesles noeuds fournis %s sont des feuillesles noeuds fournis %s ne sont pas dans l'arbretype 'class' n'est appropri que pour une classificationrpart/inst/po/de/0000755000176200001440000000000013306236017013366 5ustar liggesusersrpart/inst/po/de/LC_MESSAGES/0000755000176200001440000000000013306236017015153 5ustar liggesusersrpart/inst/po/de/LC_MESSAGES/rpart.mo0000644000176200001440000000243413306236017016643 0ustar liggesusers 01CUgy"-  9G6Mg} -     'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: R 3.1.0 / rpart 4.1-6 Report-Msgid-Bugs-To: POT-Creation-Date: 2013-03-20 07:25+0000 PO-Revision-Date: 2014-03-16 17:30+0100 Last-Translator: Detlef Steuer Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 'nback' nicht gefunden'wback' nicht gefunden'xback' nicht gefunden'yback' nicht gefundenUngültige Fehlerregelungültige Ereignisanzahlungültiger ZeitpunktUngültiger Wert für 'method'Rückgabewert ist kein VektorRückgabewert hat falsche LängeDer Ausdruck expr1 gab keinen Vektor zurück!unbekannter Fehlerrpart/inst/po/de/LC_MESSAGES/R-rpart.mo0000644000176200001440000001625113306236017017044 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A5"$:!_#9%>])p:01?'q/%0$P"uE$'6D^"L ,SMtsM<1:G;9<D5CzCAD!_4!,( (I!rR4%2B3u><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: R 3.1.0 / rpart 4.1-6 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2014-03-16 17:27+0100 Last-Translator: Detlef Steuer Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); 'cptable' enthält keine Kreuzbestätigungsergebnisse'parms'-Komponente passt nicht: %s'x' muss ein numerischer Vektor sein'x' muss ein "rpart"-Objekt sein.Argument %s nicht passendKostenvektor hat die falsche LängeKostenvektor muss positiv seinDer Initialisierungsroutine fehlt die Funktion 'summary'.ungültige Fehlermethode für Poissonungültiges angepasstes Objektungültige Methodeungültige Vorhersage für "rpart"-Objektungültige Rückgabe von grundsätzlichen 'split'-Funktionungültiger Schrumpfungswertungültige AufteilungsregelEs ist nichts über diesen Residuen-Typ bekannt.Verlustmatrix kann keine negativen Elemente habenVerlustmatrix hat eine Zeile mit NullenVerlustmatrix muss auf den Diagonalen Null seinmaximale Tiefe ist 30maximale Tiefe muss mindestens 1 seinkeine deaths im Datensatzkein Versatz in Klassifizierungsmodellen erlaubtKnoten %s sind nicht in diesem Baum.kein rechtmäßiges "rpart"-Objektkein "rpart"-ObjektKein regulärer "rpart"-Baum und ein Endpunkt kein zeistufiger FaktorAnzahl der Ereignisse muss >= 0 seinBeobachtungszeit muss > 0 seinParameterargument muss eine Liste sein.Darstellung nicht nützlich für Klassifizierung oder Poisson-BäumePriors müssen >= 0 seinPriors müssen sich zu 1 summierenAntwort muss ein 'survival'-Objekt sein - benutzen Sie die Funktion 'Surv()'Die Parms-Liste muss Namen habenDer für 'maxcompete' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt.Der für 'surrogatetyle' angegebene Wert liegt außerhalb des Bereichs, stattdessen wird der Standardwert 0 benutzt.Der für 'usesurrogate' angegebene Wert liegt außerhalb des Bereichs, stattdessen wird der Standardwert 2 benutzt.Der für 'xval' angegebene Wert ist < 0. Stattdessen wird der Wert 0 benutzt.Baum hat Variablen, die in neuen Daten nicht gefunden wurdenBäume können keine Interaktions-Terme handhabenBenutzerfunktion 'eval' gab ungültige Abweichung zurück.Benutzerfunktion 'eval' gab ungültige Bezeichnung zurück.Benutzerfunktion 'split' gab ungültige Richtung zurück.Benutzerfunktion 'split' gab ungültige Integrität zurück.Vom Benutzer geschriebene Methoden enthalten keine 'split'-Funktion.Vom Benutzer geschriebene Methoden enthalten keine 'eval'-Funktion.Vom Benutzer geschriebene Methoden enthalten keine 'init'-Funktion.Vom Benutzer geschriebene Methoden müssen drei Funktionen haben.falsche Länge für 'xval'falsche Länge für Verlustmatrixfalsche Länge für priorsSie müssen eine benannte Liste für parms eingeben.ein 'formula' Argument ist nötigArgument 'label' wird derzeit nicht benutzt.Anpassung ist kein Baum, nur eine Wurzelevtl. nicht anwendbar für diese Methodenegative Gewichte nicht zulässigkeine Information über die Parameter der vorherigen Aufrufs von plot() verfügbarAntwort muss eine 2-spaltige Matrix oder Vektor seinmitgelieferte Knoten %s sind Blättermitgelieferte Knoten %s sind nicht in diesem Baum.Typ 'class' ist für Klssifikation nicht angemessenrpart/inst/po/ru/0000755000176200001440000000000013306236017013424 5ustar liggesusersrpart/inst/po/ru/LC_MESSAGES/0000755000176200001440000000000013306236017015211 5ustar liggesusersrpart/inst/po/ru/LC_MESSAGES/rpart.mo0000644000176200001440000000252513306236017016702 0ustar liggesusers 01CUgy"-  9G%7I[w"+"B    'nback' not found'wback' not found'xback' not found'yback' not foundInvalid error ruleInvalid event countInvalid time pointInvalid value for 'method'return value not a vectorreturned value is the wrong lengththe expression expr1 did not return a vector!unknown errorProject-Id-Version: R 2.7.0 Report-Msgid-Bugs-To: POT-Creation-Date: 2012-11-29 14:21+0000 PO-Revision-Date: 2013-03-19 14:46-0600 Last-Translator: Alexey Shipunov Language-Team: Russian Language: MIME-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Poedit-Language: Russian Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 'nback' 'wback' 'xback' 'yback' 'method' -- -- expr1 ! rpart/inst/po/ru/LC_MESSAGES/R-rpart.mo0000644000176200001440000001566513306236017017112 0ustar liggesusers@Y3!*J8g %0 :Ri)' (*>i= !6 3X   @  G `] ^ A (_ % . + 0 /: 7j 7 7 * = U r % "  %9CV.&3 A7&R!y %:%Y-1,L5j%-2B-WD# 5&V>}C9>Vbb8[/,?:1AlI+*$*O-z!-.'H&p%84K"d-><'4.?3&7 "5%10#*+=(/ ) ,: 9;86 $!2@-'cptable' does not contain cross-validation results'parms' component not matched: %s'x' must be a numeric vector'x' must be an "rpart" objectArgument %s not matchedCost vector is the wrong lengthCost vector must be positiveInitialization routine is missing the 'summary' functionInvalid error method for PoissonInvalid fit objectInvalid methodInvalid prediction for "rpart" objectInvalid return from categorical 'split' functionInvalid shrinkage valueInvalid splitting ruleInvalid type of residualLoss matrix cannot have negative elementsLoss matrix has a row of zerosLoss matrix must have zero on diagonalsMaximum depth is 30Maximum depth must be at least 1No deaths in data setNo offset allowed in classification modelsNodes %s are not in this treeNot a legitimate "rpart" objectNot an "rpart" objectNot legitimate "rpart" tree and endpoint not a 2 level-factorNumber of events must be >= 0Observation time must be > 0Parameter argument must be a listPlot not useful for classification or poisson treesPriors must be >= 0Priors must sum to 1Response must be a 'survival' object - use the 'Surv()' functionThe parms list must have namesThe value of 'maxcompete' supplied is < 0; the value 0 was used insteadThe value of 'surrogatestyle' supplied was out of range, the default value of 0 is used instead.The value of 'usesurrogate' supplied was out of range, the default value of 2 is used instead.The value of 'xval' supplied is < 0; the value 0 was used insteadTree has variables not found in new dataTrees cannot handle interaction termsUser 'eval' function returned invalid devianceUser 'eval' function returned invalid labelUser 'split' function returned invalid directionUser 'split' function returned invalid goodnessUser written method does not contain a 'split' functionUser written method does not contain an 'eval' functionUser written method does not contain an 'init' functionUser written methods must have 3 functionsWrong length for 'xval'Wrong length for loss matrixWrong length for priorsYou must input a named list for parmsa 'formula' argument is requiredargument 'label' is no longer usedfit is not a tree, just a rootmay not be applicable for this methodnegative weights not allowedno information available on parameters from previous call to plot()response must be a 2 column matrix or a vectorsupplied nodes %s are leavessupplied nodes %s are not in this treetype 'class' is only appropriate for classificationProject-Id-Version: R 2.7.0 Report-Msgid-Bugs-To: bugs@r-project.org POT-Creation-Date: 2012-11-22 09:24 PO-Revision-Date: 2013-03-19 14:46-0600 Last-Translator: Alexey Shipunov Language-Team: Russian Language: MIME-Version: 1.0 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit X-Poedit-Language: Russian Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); 'cptable' 'parms'- : %s'x' 'x' "rpart" %s Cost- Cost- 'summary' Poisson "rpart" categorical 'split -- 30 1 %s "rpart" "rpart" "rpart" >= 0 > 0 >= 0 1 survival- -- 'Surv()' 'maxcompete' < 0; 0 usesurrogate , 0 usesurrogate , 2 'xval' < 0; 0 , 'eval' 'eval' 'split' 'split' 'split' 'eval' 'init' 3 'xval' parms 'label' -- , plot() 2- %s %s 'class' rpart/inst/NEWS.Rd0000644000176200001440000001202313312771070013421 0ustar liggesusers\name{NEWS} \title{NEWS file for the rpart package} \section{Changes in version 4.1-14}{ \itemize{ \item Changed example data solder to solder.balance. The full version of the data is available in the survival package. }} \section{Changes in version 4.1-10}{ \itemize{ \item Rpart would fail with a formula having ~. - x on the right hand side. A simple bookkeeping error in creating an index. \item Added a section to the vignette on user written functions, which explains why and when one can avoid checking all 2^k splits for a categorical predictor with k levels. }} \section{Changes in version 4.1-0}{ \itemize{ \item The C and R code has been reformatted for legibility. \item The old compatibility function \code{rpconvert()} has been removed. \item The cross-validation functions allow for user interrupt at the end of evaluating each split. \item Variable \code{Reliability} in data set \code{car90} is corrected to be an ordered factor, as documented. \item Surrogate splits are now considered only if they send two or more cases \emph{with non-zero weight} each way. For numeric/ordinal variables the restriction to non-zero weights is new: for categorical variables this is a new restriction. \item Surrogate splits which improve only by rounding error over the default split are no longer returned. Where weights and missing values are present, the \code{splits} component for some of these was not returned correctly. } } \section{Changes in version 4.0-3}{ \itemize{ \item A fit of class \samp{"rpart"} now contains a component for variable \sQuote{importance}, which is reported by the \code{summary()} method. \item The \code{text()} method gains a \code{minlength} argument, like the \code{labels()} method. This adds finer control: the default remains \code{pretty = NULL}, \code{minlength = 1L}. \item The handling of fits with zero and fractional weights has been corrected: the results may be slightly different (or even substantially different when the proportion of zero weights is large). \item Some memory leaks have been plugged. \item There is a second vignette, \file{longintro.Rnw}, a version of the original Mayo Tecnical Report on \pkg{rpart}. } } \section{Changes in version 4.0-2}{ \itemize{ \item Added dataset \code{car90}, a corrected version of the S-PLUS dataset \code{car.all} (used with permission). \item This version does not use \code{paste0{}} and so works with \R 2.14.x. } } \section{Changes in version 4.0-1}{ \itemize{ \item Merged in a set of Splus code changes that had accumulated at Mayo over the course of a decade. The primary one is a change in how indexing is done in the underlying C code, which leads to a major speed increase for large data sets. Essentially, for the lower leaves all our time used to be eaten up by bookkeeping, and this was replaced by a different approach. The primary routine also uses \code{.Call{}} so as to be more memory efficient. \item The other major change was an error for asymmetric loss matrices, prompted by a user query. With L=loss asymmetric, the altered priors were computed incorrectly -- they were using L' instead of L. Upshot -- the tree would not not necessarily choose optimal splits for the given loss matrix. Once chosen, splits were evaluated correctly. The printed \dQuote{improvement} values are of course the wrong ones as well. It is interesting that for my little test case, with L quite asymmetric, the early splits in the tree are unchanged -- a good split still looks good. \item Add the \code{return.all} argument to \code{xpred.rpart()}. \item Added a set of formal tests, i.e., cases with known answers to which we can compare. \item Add a \file{usercode} vignette, explaining how to add user defined splitting functions. \item The class method now also returns the node probability. \item Add the \code{stagec} data set, used in some tests. \item The \code{plot.rpart} routine needs to store a value that will be visible to the \code{rpartco} routine at a later time. This is now done in an environment in the namespace. } } \section{Changes in version 3.1-55}{ \itemize{ \item Force use of registered symbols in R >= 2.16.0 \item Update Polish translations. \item Work on message formats. } } \section{Changes in version 3.1-54}{ \itemize{ \item Add Polish translations } } \section{Changes in version 3.1-53}{ \itemize{ \item \code{rpart}, \code{rpart.matrix}: allow backticks in formulae. \item \file{tests/backtick.R}: regession test } } \section{Changes in version 3.1-52}{ \itemize{ \item \file{src/xval.c}: ensure unused code is not compiled in. } } \section{Changes in version 3.1-51}{ \itemize{ \item Change description of \samp{margin} in \code{?plot.rpart} as suggested by Bill Venables. } } rpart/inst/doc/0000755000176200001440000000000013453662152013133 5ustar liggesusersrpart/inst/doc/longintro.R0000644000176200001440000002403613453662151015275 0ustar liggesusers### R code from vignette source 'longintro.Rnw' ################################################### ### code chunk number 1: longintro.Rnw:38-43 ################################################### options(continue = " ", width = 60) options(SweaveHooks=list(fig=function() par(mar = c(4.1, 4.1, 0.1, 1.1)))) pdf.options(pointsize = 10) par(xpd = NA) #stop clipping library(rpart) ################################################### ### code chunk number 2: impurity ################################################### getOption("SweaveHooks")[["fig"]]() ptemp <- seq(0, 1, length = 101)[2:100] gini <- 2* ptemp *(1-ptemp) inform <- -(ptemp*log(ptemp) + (1-ptemp)*log(1-ptemp)) sgini <- gini *max(inform)/max(gini) matplot(ptemp, cbind(gini, inform, sgini), type = 'l', lty = 1:3, xlab = "P", ylab = "Impurity", col = 1) legend(.3, .2, c("Gini", "Information", "rescaled Gini"), lty = 1:3, col = 1, bty = 'n') ################################################### ### code chunk number 3: gini1 ################################################### getOption("SweaveHooks")[["fig"]]() progstat <- factor(stagec$pgstat, levels = 0:1, labels = c("No", "Prog")) cfit <- rpart(progstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = 'class') print(cfit) par(mar = rep(0.1, 4)) plot(cfit) text(cfit) ################################################### ### code chunk number 4: summary(cfit3 ################################################### ################################################### ### code chunk number 5: longintro.Rnw:468-472 ################################################### temp <- with(stagec, table(cut(grade, c(0, 2.5, 4)), cut(gleason, c(2, 5.5, 10)), exclude = NULL)) temp ################################################### ### code chunk number 6: dig1 ################################################### getOption("SweaveHooks")[["fig"]]() set.seed(1953) # An auspicious year n <- 200 y <- rep(0:9, length = 200) temp <- c(1,1,1,0,1,1,1, 0,0,1,0,0,1,0, 1,0,1,1,1,0,1, 1,0,1,1,0,1,1, 0,1,1,1,0,1,0, 1,1,0,1,0,1,1, 0,1,0,1,1,1,1, 1,0,1,0,0,1,0, 1,1,1,1,1,1,1, 1,1,1,1,0,1,0) lights <- matrix(temp, 10, 7, byrow = TRUE) # The true light pattern 0-9 temp1 <- matrix(rbinom(n*7, 1, 0.9), n, 7) # Noisy lights temp1 <- ifelse(lights[y+1, ] == 1, temp1, 1-temp1) temp2 <- matrix(rbinom(n*17, 1, 0.5), n, 17) # Random lights x <- cbind(temp1, temp2) dfit <- rpart(y ~ x, method='class', control = rpart.control(xval = 10, minbucket = 2, cp = 0)) printcp(dfit) fit9 <- prune(dfit, cp = 0.02) par(mar = rep(0.1, 4)) plot(fit9, branch = 0.3, compress = TRUE) text(fit9) ################################################### ### code chunk number 7: longintro.Rnw:810-813 ################################################### printcp(cfit) summary(cfit, cp = 0.06) ################################################### ### code chunk number 8: cars ################################################### getOption("SweaveHooks")[["fig"]]() fit1 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'gini')) fit2 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'information')) par(mfrow = c(1,2), mar = rep(0.1, 4)) plot(fit1, margin = 0.05); text(fit1, use.n = TRUE, cex = 0.8) plot(fit2, margin = 0.05); text(fit2, use.n = TRUE, cex = 0.8) ################################################### ### code chunk number 9: longintro.Rnw:998-999 ################################################### summary(fit1, cp = 0.06) ################################################### ### code chunk number 10: longintro.Rnw:1003-1007 ################################################### fit3 <- rpart(Reliability ~ Price + Country + Mileage + Type, data=cu.summary, parms=list(split='information'), maxdepth=2) summary(fit3) ################################################### ### code chunk number 11: kyphos ################################################### getOption("SweaveHooks")[["fig"]]() lmat <- matrix(c(0,3, 4,0), nrow = 2, ncol = 2, byrow = FALSE) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(prior = c(0.65, 0.35))) fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(loss = lmat)) par(mfrow = c(1, 3), mar = rep(0.1, 4)) plot(fit1); text(fit1, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit2); text(fit2, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit3); text(fit3, use.n = TRUE, all = TRUE, cex = 0.8) ################################################### ### code chunk number 12: longintro.Rnw:1210-1214 ################################################### cars <- car90[, -match(c("Rim", "Tires", "Model2"), names(car90))] carfit <- rpart(Price/1000 ~ ., data=cars) carfit printcp(carfit) ################################################### ### code chunk number 13: longintro.Rnw:1217-1218 ################################################### temp <- carfit$cptable ################################################### ### code chunk number 14: longintro.Rnw:1242-1243 ################################################### summary(carfit, cp = 0.1) ################################################### ### code chunk number 15: anova2 ################################################### getOption("SweaveHooks")[["fig"]]() par(mfrow=c(1,2)) rsq.rpart(carfit) par(mfrow=c(1,1)) ################################################### ### code chunk number 16: anova3 ################################################### getOption("SweaveHooks")[["fig"]]() plot(predict(carfit), jitter(resid(carfit))) temp <- carfit$frame[carfit$frame$var == '',] axis(3, at = temp$yval, as.character(row.names(temp))) mtext('leaf number', side = 3, line = 3) abline(h = 0, lty = 2) ################################################### ### code chunk number 17: longintro.Rnw:1315-1321 ################################################### cfit2 <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) printcp(cfit2) print(cfit2, cp = 0.03) ################################################### ### code chunk number 18: longintro.Rnw:1491-1495 ################################################### sfit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, data = solder.balance, method = 'poisson', control = rpart.control(cp = 0.05, maxcompete = 2)) sfit ################################################### ### code chunk number 19: longintro.Rnw:1506-1507 ################################################### summary(sfit, cp = 0.1) ################################################### ### code chunk number 20: poisson1 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.1, 4)) plot(sfit) text(sfit, use.n = TRUE, min = 3) fit.prune <- prune(sfit, cp = 0.10) plot(fit.prune) text(fit.prune, use.n = TRUE, min = 2) ################################################### ### code chunk number 21: longintro.Rnw:1554-1557 ################################################### require(survival) temp <- coxph(Surv(pgtime, pgstat) ~ 1, stagec) newtime <- predict(temp, type = 'expected') ################################################### ### code chunk number 22: exp3 ################################################### getOption("SweaveHooks")[["fig"]]() require(survival) pfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) print(pfit) pfit2 <- prune(pfit, cp = 0.016) par(mar = rep(0.2, 4)) plot(pfit2, uniform = TRUE, branch = 0.4, compress = TRUE) text(pfit2, use.n = TRUE) ################################################### ### code chunk number 23: exp4 ################################################### getOption("SweaveHooks")[["fig"]]() temp <- snip.rpart(pfit2, 6) km <- survfit(Surv(pgtime, pgstat) ~ temp$where, stagec) plot(km, lty = 1:4, mark.time = FALSE, xlab = "Years", ylab = "Progression") legend(10, 0.3, paste('node', c(4,5,6,7)), lty = 1:4) ################################################### ### code chunk number 24: plots1 ################################################### getOption("SweaveHooks")[["fig"]]() fit <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, stagec, control = rpart.control(cp = 0.025)) par(mar = rep(0.2, 4)) plot(fit) text(fit) ################################################### ### code chunk number 25: plots2 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE) text(fit, use.n = TRUE, all = TRUE) ################################################### ### code chunk number 26: plots3 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, branch = 0) text(fit, use.n = TRUE) ################################################### ### code chunk number 27: plots4 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, branch = 0.4,uniform = TRUE, compress = TRUE) text(fit, all = TRUE, use.n = TRUE) ################################################### ### code chunk number 28: plots5 ################################################### getOption("SweaveHooks")[["fig"]]() par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE, branch = 0.2, compress = TRUE, margin = 0.1) text(fit, all = TRUE, use.n = TRUE, fancy = TRUE, cex= 0.9) ################################################### ### code chunk number 29: longintro.Rnw:1779-1787 ################################################### carfit <- rpart(Price/1000 ~ ., cars) carfit$cptable price2 <- cars$Price[!is.na(cars$Price)]/1000 temp <- xpred.rpart(carfit) errmat <- price2 - temp abserr <- colMeans(abs(errmat)) rbind(abserr, relative=abserr/mean(abs(price2-mean(price2)))) rpart/inst/doc/usercode.pdf0000644000176200001440000033054613454120607015445 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 4332 /Filter /FlateDecode /N 82 /First 654 >> stream x[[sI~?v&A]ˉ0`fԶ{%Zba~$Z-y:T]YeVVVwF$/P1 'A8D>:DTR$PAMjJ&' ]A'49&o9oД"<$e PB@ڹB{ৡ+(1 Af1  q0) g2ʠI DZ~AY%Fl`:ABMZ'lr셓9TMو9j^P &@_"HD"xxp`7@$P DF̼_(JQXވ%Z,~R)"2T}** S L쬩 gCÁ1XLp6+MR8[P D_(ǣ | U0UD4T?Df:f>=Ym&>C?hV<7ф' 7(mՌ~ g']U OʦG_}꿏N߂c]Sijz2ONb4(/f0f̮'ܑOInݐma]%mɯ yGppC^-ֆzCO.׿쳳u*£s胑/A3e y5iF|Qu]Yp_+ݡ+Q]KqE Gy6 &Oue>ad5s${Nٴ-s"_˛QjM'fP.mw>ڸ h<TDajfXaj<]IIٯyB8 MG^Sxf#xrKܶ()Q|.?sL`|\wmS*er}:i^Yd\2Գ1>"c! -aA.=۠G,C@K%۝J+L'@MC>|8/e%kop} _X ENÞeڇm|+ xD anAm!NXC}C4=|K$=OD!Hw bGl}@"춐Y+ב̄m 5zB D 肥60EA֕nBR"ԃaG"\ ?}H`'Ǹ4r2CJT.18=Q+DnRn{4 Y4&`Jm^;A*o[`MKn`ʈ =X.H: (DMWv&+9{Ŗ#ZyZmT4{.~_{lXrX%agz]VCi 3DOaLq WD A>#:eMGUl"K "jykC.WXN4FE1JYC$6Lmَk&B/%$lGS$;\e˔A9EރP+#bB\i$%Uf=gi>PLG M%8E*$hD%sl nt2l,M-g Sàw|әHxhĀ‘ƕS5%ʔ(Zآm\ۨum^`+[-= ji=f1{e-tSޑXy.9̣'d"QD|f]r!kI RiZlVe=j]^ȦpLa(lV/+u.W>A :QN-O.-xqFю%q,C³v$H;̚1G+i Y RZMgPI:DM! V.b&>ۮeqn˹ţ#cBjMXrK[ru8k]QQ#\fyLk9c@\VS%{Y)XZ=ӾF0D@i)s~#3o:W8Tn+k'dc墦v4ڜ%H>Cg"rK:$JހxTY/$^с\$g?)^w(IoeYKtl{ |L&wx۬[>ZYuCz&v Kc<8KI'EvEI'1JQ9yQW3|eMOEYAQUQ7ŨbZ4Ŭ.bfr;Wkg#_TGs\+8a:wNf?]1~ɛU7L_qȼHRqqT<+NŻl~qY| 8\ÌxTjZٿqL߀сڅsr;<2+66ӲWYi6Ya`otXi8g쪶vpjPnn͞$2 Mwuu6rΕ]vauTQM9P JM34r+뾁m0'ݗmq{˞hxp\8ll+j#ܠ߁w[xbZ,s@-)GluWøNWàu%' 2țY`<SLN(MPHm[\d~8\rBg[2hRiuK7lx BFGuȱ;_:EȷN9R^(G%Le q5HImγoΞE9γo2&bǐa}1O&j?:x$LOY~zxUWO }$B?_&캩Ju9:nNɤ尡;d\x$endstream endobj 84 0 obj << /Filter /FlateDecode /Length 2424 >> stream xڵˎF>_A`M6 rdc,dkOap$HDEZȿMfwuuUui$ed< n$ϣ2"ɣ62xfIf4N#wkpx <~"9c>uM2֧i([5%"(:PqI^N>60&IkG$"z=!l@<?`'(=:u)LS ?bv;֌o<&'xn'<x^1x&8 ƞSM_m},&q'C?\#Ke sK΍K#|uu֔/‰[;6ilL_sցѷ+,QK9[gT+B+\1XYd&A#){#x*O (R䵈θ4D7Z2X wO'SE&NO+ڟi(ˁUɹ[2ZId^ցd7ÉIZ#U4 Sc*΋elƐʘHQꉾ;8R~G=3j~p L=/QYb{m,a> stream xڭYK6W92VDQϢ)iѢC-%C)ʢ$r87Cg/MJBdv(0ϊEaf{/WJiRM*x\f:+'FOzmbQeg1ZbQ̾ꗫDu>wAl/-;/ܰcg@@Z7<\5qvvvHz/D9ȹ:wJyc3êUVf탌hDRaW +KY{N1e˳gs:xV2.VɂoY,e{5HF$|M:`{VX?Y`mȑNM8@RQ'펼T!#;|3џG۔N(xUY![}\!0x !~ n(8_/q8=Lx*yO*q<5v "a'Ba\ 7 oҎ| _Ѳyv lВa-+d21R8YpfVȕOʹ!?c9kԽc[|ؑGEa!c5/*ٰvMC֌VɴqFwqZ#VUkY C^8.͵e#Uv/:)dǀ$mӏspȸ>xzI@pj4;OR\A=7Ss[!)vkXub`8)h:نYZ=13¬>%Wt~xvLCiQIF3?'+~l#464Q:LL<yc;'o#:JHz4w%ԼXűun{3`Snݟ(5:S#($O8%Wp6ɹf`De܂#ތx}\<dYnU?2 F+HS-禕$Hyڣs "jw#{nwCM!֏*N*Nv" EX*Hqx;Xxjď!}mύK @)ױA^M'{OtG G%`Ŗޤ0}=ԋ4w!jesMi`Q'y,H=8ƾBl≐ZڙU mzC#) O^` HɆ:LX]sϑDŏ==U(2K9 IBMkRt'R.vjxt Ì`3:菊ke\Z|ڨё*rZ]7^A.KVQd,xfwNJY8RA,ԝ.Oxrc ..~<,"6( s=R:F}>_ N7\Ds 4JG6z|+])S߸Q6onZy2 cK\ i^";:MC]^& !^ɫ\IL47= +,Cr%Ԙ cr|7))|g$wKG8Lg%@r:loo'h$/c=ym |Y&ԳWzlendstream endobj 86 0 obj << /Filter /FlateDecode /Length 2731 >> stream xڽYo}' ]qHb>9S6hIYw a7A\}v݇fn2=ı Xdi$WqPIl>ʦ6i`ugQ-`R9N3њ aB#dܝĸ>xX{'a3ּ)!@ Wkd/wY:hmqI/O4 3lOA@ϒ"_": uWeQHdY9)J#T&:̰J2'y!i:/k|H] 9^h%^*4~cVW8?T;\G̵J__q{V=`0)㿢|lHڣ7>93Ƣ%M{A)9Y2Xw)g rQ4Q" #ʘ?OaY^H?C@xhmI|1`dٽ@Ubn9elS +aj? B@{w L8_?I&~ٻ'/؍ b7J*\Ґ˜Ri'6?a`[~ɹH(儜`* zl^$tOOCD3R᝾ZuڟBn\Rc3yM{]\--T /3=^G_c^bΤ(XǺS(4 !O0B'$uѽq8RjOQňN,& iS]SY/`ClftTT݉bj9Ya|DH3Ti>Y(M)LyNRRAe}r:So)@7_Lo98LIUnA={8y)ƒp ͇c=ꘑLrFy6M6mA7)1ٻ<Џi% oϫq"fS^2(ПhSKo2Q?K1TnAQRanĻAb{#cO_}a}L))?LPߣ -I0Sl=%0`E0F:;X=р_=eVrr8rpң 2b,Svw+ƼKՆY P:ל~f{?1$4lgV|42Y1 Y[JhYÔ`!5jd,6C3ƭ>0CY/6gWlJgzw>W'>̥ :e`O=-鳒}.5f-=?9'=u:qm+:ɗgBraE ](n7_έA;> stream xڥَ}b){e7`v1qPu`%r R;3 禎Mޅ 꺫O1qiPqYTE^6vl2]Y˪HF7OwuZڷn;__.l$kSieuD_Vy5g!u8t\9 N;黭;yE^y[F;W"+G1Dg'^!VqW_y^NEԽ;wX";>t;}4zA /+[E-^tcpfd8[s18}Yza7K}#>ghMhkqo:)1z\1/+ 暛{"&/I ~EVI7:5qjmHYAPh|?Ł2{9w:X\tm÷ YTx B/ T8 j"6hq`~pcRf6.aI\U3N޶MgQO~@!/AUTkCbw~/Z!ohJV s8utE ϲ$d$[IP*QuVM`{Mc|x Hɵ#:MY+{?-ɲ@á]BY+lY]%gԤ(}i*Dw\=biFZ&8Mr& 7Zt=IEψ3E~G~T/&AN&QPKnF رU-|4 ; ZÚ<00gAγ +ߖHECi]'ulA({ļ$۾Oe/Q.I>^YQb3#+^N`Wr k*UG2i4u)= >*"(S[2*3. u\H#Gd$MA|o &mt"+xRO# ~2$W~Xv" ʐγD$9'uu%觸Q9f Fl;Ax92ud(+I3 cq,2Ldn<ʣ۞x7> stream xXKoFWEJ5P[8. KlĒъݙ%wɥ9P\vvfċ*H")9gEB>}5 "fy.5yvғy7_[wظsrP[{=5Ê\\X/t\><#"ZҞivu'1n^:N'U6uI6.~cۑK}[6_j[ Ԛ.eH~Ab;Ly[}i#N2vvptKS_z@Cr/[JӮ-K]U#vULp[.KnTǭ6hGż7MãRVt{Y:{;2dݱ b֑?Vqr󠡕 . N>w]J4ea,ql ͤܰ)NyV3 /]YjIi:ߑM;۝#@SJ6'W!~-K&N|IA{krw?!B+ gdn.3!A`*Db \@r#Hf̵ܥSEb`r`H9B8NU7 f|\Q$s +\FbHUT,u~ iL!+@Ħ8Bn~: qړ^KE&bL~D઺.sj8"my CC ;{ &_h, 29B=*, P(c<(mP\b]K uz0leKBj々w ]lh%ŋ *4rbXbi +endstream endobj 89 0 obj << /Filter /FlateDecode /Length 2470 >> stream xˎ_A u9^k0e1K ,WUaKTUZ1ЎssUzlvMt>sS$qp;_INw?,O3 _s89r>s?g# v|$߼Z|tg63JjFUf߼yְ,Ux~$=87?|2K$(确2!HXYdT^G0 ,0;LŒyX8*W`ZUY,+A07%pv2D^>' ޔ[YqƤbJxL1X~(L523ݪAQh}O p?\trϒ<زoLsb41n@u)`͓;BJA* tdCȧ'#r9I|Kg^S$ ֽ`h7^Ih&fiKBZy V`'_){ k{>a@l. :JZ2v!hj/x``.v*ݟ7Mt4Ŕ&߾7+ Eyǡʮf"gʘn c&W:56mt5_JI#_bJqbʳU+7r;F_~Mw0umˈ? 0vmMaj 5U|mM:0ֵmWI1GXv=K+k?F`FfQ2}T ԪD4O?)H&u f]ʢn8dP&*nTvߟSu-ߟ@ Ԋ6g@pʺo  :R K~7b lJ#x*S8Lzg WlͩZ+>YF˖yEsB܅'LOM\z}%j25hn2sҨS&|mx9uײpWg* Ɍ$-LnPjMv^ IHMiXL7ѽ/.c<^a#w7rsw;.#W1Qyy[:$`fCᏯ&͔3ly*WU,ΪHendstream endobj 90 0 obj << /Filter /FlateDecode /Length 2668 >> stream xZY~_! Dδ9"uov A!dvȲmy$=ul{gEUUT{}Lܮ2WyVY+2nf:g %if8#4W=  fif{5y ;lY Y1َtHL>lnxV[(IY˪^'v+ܳBퟂ(kT jzf H;b͓~Dg& v͑0Aa( 4 :J𝖁8A`O ?6HfuÙ5r:c/#HՌ(,R|| Tr;YMNJ3~7c[vPF\ONmkIo8 ,I"&4'UƔrK1 9gi2#Y^n<79L$^=9QH_usj=Grȱ &;ʳvT/8(BQbߧW>Cxm&%s9L`+<|\Iv $$BE6]w6x*"s WzW%}cY1Dt\K oY!g6Tӹ:K@S'<, G8M9Vn::#7򮾩\MBht"k5<*/h7, %Wl؜UB޵0 s@ upkqͲD(V4jb /oqVptU.|%uW" *yDJL[r-]U2D{`g T> )buYPD$w3O V8D NZ,oN4/6|Bu3tH-H왦=RˆݷUNT$c~J 7eI0jg(ޡwU(G/fPfwr?JibSoov6H?jL`z+zS.uzŕhg'?mV!}KTzC8sOTdF2بBLPžR=r6 "Sac8|9& 5Jkw'L0JSٽѪ ^LrQ<;/k7r4vt5Dݴnȼ-wyq]N#%\ݗnl ?ĥdd4OgK,Wq*)sF99]!;]Zsp$ fXcAĚ"EWqAD*KX5.?42, 3`'D d/y3 ,}b^}B@. <Ӡ]}K8t$B) \} ͱce"mc 9uyUռGu "ebNu'zQ5;)S,T +JFX=YLٽlA\B%Í QH\Qu6tѵ>_s(.(md62xB:S?kGHjU54~7Y dnڠ —G@CFJc}gS֐#B!j?#ƙ\tG/_FO*Ovx+t'w':Hzm6{XnrWKV⾷gq=\5c̗V+RxOJw04rἆ> /ExtGState << >> /Font << /F1 37 0 R /F2 38 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1118 >> stream xXMoI crآlHlFB& dZyvLEQθݯnrgܕ6s\lˤWgWԺt7/ݫ![__ݒ.O3] kpzsٳ0Gv%ڝO y}Sq5t\0M,ܼn06[/ls7$}',1}- nR}تM`)l̠sGc:8#*>f Qv4'Iѵ!F0%RpLm*0I֨#gx;P7™=!Pq>H\7KtٷPTRIX ^:)ySZq&.Rp, jܥʄ`}{Vs/)ժ.Fٓ<N`^N';#JXI4֠킃rd*c1X1A#k}Bơߦ. hh4{)F/eqO8o2~G͕=evGg8<z<m~Bo[мel=6P>ZJ|FT\QqAGh*gd?G.'s[S ɹ4Ez1柄k:bj^|wrsΞI~&wa{s{pp+F LA*Q+>DE=VszO`UyɌZ:=&>3E٥vM??*bdg6mf'hl$m33?.E0yth88qFoOj7-^9#XmdrQ q|F>vE ႍMܰU> stream xMn0 y iIkBq:mIܦR)~6 8?P,Xhz+dy,",CX<$$zA|,k-4Mߍ{4> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 94 0 obj << /Filter /FlateDecode /Length 1719 >> stream xn6_E+cZdh Ŧh9݃"Ԓˉ7-^΃H҃C{3ϷLptp(É҃4:Nf8v8 ʬiD_P+[`~EC'fUa`_]+]*Xj 1<e<~TYLA3f<%|}0Rp6Qo#=wC=a4(SWIz2 v+s>bXqk`ٙ n<x(ZS RDId' &8; 5lۆ얱zJ=C M ) 7n(NuT 3f!j}YdR|萱z D[f7VA#;I%a@Iذ4 P*YǍ͝)ߚ1q4CL66pha3>áTs׾˙Cky;XPlErIFӴK6z Uhb}ÄQY Ȅ )t ͅލ+'ld {X0yڲ9jqWͼy7zDؽ~-8u1pW{ 6gqR!%_BBN(Tg[κd#ZmE=GjABD1_50 ޵4=z؈{aw~މqE]k#9@{C 쒭<<@xQDmĹRp5\>K/9K oM)vmd+Lu3&Bscu?ݶשuʚ)o=㶹bؿ>Rj]&u'.63"/ZW*/ YJ}.  8 Wo64Z?}M`Q5f^AEj.CTliZ {j#7g-!N:fۋװ ymlV-m9} Fo TNDsvڑ_pgCgE4m\D1ilUuUDJk&+:ڲnK+Fʐ׶y<)O2?C]mHLؽ#~+5[oY9-Զ4+kZegX[ 5~h=\mM6/O5@)Dݼ`ED:Qc- }vMӬ,rFNreҲW25=6+5Dzñ{r5(U>PT R^dBzJ9΢G&Wm#+bʵCGZ;:qcuJ >֮"m>"1ru9r/\ezS)kj_xCTZ=z|ܞTf~7aM|)v9xi7Hm9(UFzf3{տ>endstream endobj 95 0 obj << /Filter /FlateDecode /Length 3348 >> stream xZY~_!EV M6`dXuFYIή䷧>(4Z1͐:*w/~uV.t1Nyhֳ7^.rm_Tz ;?G-<#͢'|_:߆iv|y8 ߮9^Ls'cO3+~{,-JKҬ8qO?ZLtA&(D'gٲB"Hz}LS(p˭HK}R+ӧdT<סJ76 i2Nx [oV' xgfյ;NTl+Tc/Ei\x&PNַfzy癸0|3o)⡭,Ɗr'/1(n-qYwPU(`M{Hm9j(Qu6ν}cO <#FN<>+qkhCzi޾DzV\z2tDrG.y^QExb` Llj*Ēޟ] ~ k9wݞexqf8 m&ڻ||,ݽK͎8K(fӾMzywg괦I߷F4KMD{w4UM=y"eEL4*?ߌIw^ 9o'jVF$;ZbF1 wHa蠞漺=7 XBmg*KLVh,&MLQef9F|G!ֶ0eN;eh*@Z%UZ1/_.z8t-ޖI9N$yrOЄ+<GہQp 4sH!YM! U'H#r_A҉ؗP%4 $SO_o2U̟p#YrWL]C$%:>$eQ^^n޿ d T%Lf g_Ί.MgoU^LR(8ZH&F\5$w_Kqb0ݳU'Zc5݀ h ohWlH 8X'l;y/_I?o9m|6 O^#q&p'B+x؎dʋjqCx)h3,NAgc§Es`ZWx q1Wּ$0䍏YJ& DA$qjy*c+#)5}Vjk,`!&TxV%yeNZ%0" 1𼱭NHMENoۘ*Ckz+RSNmhݙߑԭz!\PRY+B~ 5f5YR 0&vo&uUE<,QT+' EbH3د6`t\ ƠrHIZbbϊcL̬&& uȱpv2tR|PP>gX j*vv*3;c _du>xLƨrLA Wu 6Zk(l&jaoXPdo&R~(>Z?> Xpł|J}44$EO6lb1 =S\F_ ]^mMAJ@={¸8ZJ88U" nOaϽg2~@i==\q |@]+k{-f׌n<^XdY U=eqeQ\~uį Rq~fsO +;!9dpO f:Wz wĭB]x>P9),k( ngxj*`O-@ :O4ߟ$Kb ,áH1G~#{iAUp>8yyÑGc'U\io)xNYmkLd:nPNwl'h4uGmkќ_(Fī%C)A28Vmnmi&- ct8nUu}vdhK,3gW燍wٝ俘0\nAZpC=C97.nϯ08_B Gy >P%rD^`ǥ}et,rQ0r1z!dYP*7=B"L5BwLyfD~avI矉Q'wi z,LS95zsoiHӷ4NOn@ic qX96 v2s@2-#vM:j&b-. q C0Ž/Iț,QaQ>_ݽ:]:S `Z +śl Ͼ<8g/ mR6KFVW2@pU$qz*sûX/P`4ʻ{SMp a]4n?E>йq!Y'(#^τ ƚ~px ;*]#W>ia="Q-]֍kRj''Q1]WM5fG_[|~$B On σ%U I"EUWU,n~/z ܊<|Ls=>hD dsM ʠ|l`6L@™|ZjS?7B揓ײ,#xH(SljC=!]~Tj9]1k/GN{htŸA[B}atZcW @xGendstream endobj 96 0 obj << /Filter /FlateDecode /Length 2214 >> stream xڥY~UvzQZA@P֖Zkw3OJ:+N|3Eyf8W_ T/VUU"/OvSr^_ߧK'&뼀/X4n/:7arbe)ƺTs+LS\w*;3 :ooxκ >Ù/wlk}Lt>$~DM0s>l<_|JsOM98SbȗI}iM&ý1˜ v <O= ~75vl~Yñ}fmc@w) t3qGE7q֚,/z/֭=CC?c 6iwMф!ȣ+Vtaȗ)'WfH?S6GZgXUvǕL=(Sx Ϸ3={/ BJ^mt7.2yGzQi :xGKUyu5m\ GWPXϧ6vcX_/Y0yްUB(oae0 8 p !*%;_2y(Ǣ,q`/x9KܴY(Q-`&ක7LyJGtT̫GR'F.LiXГ9b@{fM|27cJi{_{u5x0C2D'% n6&L_&W/qgY*JHzQD}а= \fz/gb*GP[pem_q54Cis-tXU%~e!n{L2HS}JOW$N[WJ!tj{(xUgުױH=ءg.>@i8u* ^Iw=> stream x3135R0P0Bc3csCB.c46K$r9yr+p{E=}JJS ]  b<]00 @0?`d=0s@f d'n.WO@.sudendstream endobj 98 0 obj << /Filter /FlateDecode /Length 104 >> stream x313T0P04W0#S#CB.)T&9ɓK?\K(̥PRTʥ`ȥm``P73`v(PՓ+ L5*endstream endobj 99 0 obj << /Filter /FlateDecode /Length1 996 /Length2 4851 /Length3 0 /Length 5491 >> stream xڭyc+y)=HHplC ѬxwZO[d Qp]rɣ&J 9}Xzw׃ey![9ō {EYޒb5{6N OPHf8Ӫ$\/=oUEwDɯ6ko/iYѬ!߉HeDك% g"I(m2+Fpiણ:5 1̶m⊍AW {Ovha *y`̯2;:&ƣ:l>#thܙ5B \Egfa?קI\ !فa㤣w\W<b#>yAƄ<-13Pf;Y=TfY9аn aEo9xcjo$K2j`VqKy3jjzן* RndMMGA}cȐ(PKp{n`C qpˌyڙ^9Z4-+ 1;0+dr|,4%7~c廼JUO39N]!thgHFYH_K/si\2#"#m̞-W KJ-[)~ﮱ1'><3'/OJ-rRcCA^l gn#y=bJ>yd Qa#!ŢqM8XK7b Ӓ%| s){pڡن0>_u>/&w*_r!{ VH:nb-3\ɘ wk鰩9+B\]hˡ7_~g:rqVqLzUƐZ%dl=jX$WW`Djm4}``3a/wDV5dT+}n}˸z )%}wV(CW#U w-8n+گH|fOp[b n_N'1q}v]!v#h#Cw^AxFcvPn'|sI[3T)J5f)Ŕ#rAm\c >c 4q-Cv+S~=);ڢx\b'n^ A&y!˫@U<]um}C5f3Ӂi"O'04r]jb Ρp|1J|`W3m87&#R]7K2״Q7F$<''Nwyoo="G1vGVN$ >H\5ӽ,H$o/P}@;\+m] KվYsWk̊(FWk _)P޷,&Xf/VB].[xEoTS69>=Wܷ'x -LZuYS`Jޯ?d~ؕvRqɭedˋ+3'{/;+  † mݿC9osEWJȷE0o*E=8SaGk7%Zc^Ewh$˶o7N8P:MPuW~95-^3N姜\UsÓDS%L:BاqWhzA>0DyB&ax0=RA~Ưxbo1w2v]Ts ecj!_LtS\#xl O:ɥ" 1;w[u"JS1ݥ( Vd/i!YVڜٚH|Hϛ:N.SG8Dd\?XG4!bNVYg?oNj`~zOnIVSѴH ڽ ?ńq$F0X%^״U%lyvia{ifƞܬndQ͜w AɍLIt j;*ն =nNϩQz8*QDŽ i d a)&[4U%~W7΃oA,N~ Ӌ1xzeSkUt*惄 ֒_|͑_/߆OF[("-3&WLJ2'Z$,cJ3C>pLay^@uT> ~-kq{oͥ9xjrhx#W9dSp*DZJ:*\,_⊩}i[:vwKlzfN7mN NϵFnS {@[B%~XU4R#'pcђ?JvX$D~Skt0!-<>D}iܫ[q uHj[-(:JJCmGh[ɨbMuDTAfT';d#ncue.,-A8 - f{ {ݮJ4~xfsCoc]ֆ4x#bE*͘􊡐&>CW&0HÌm2~2"~QE49ujb'Į=5}ߴ} W5kC[gce'8Ǵwm˹Q{893#Vq#&3t2[ ՠc-{dgF97rֹnKvK>ԡ*7_dӶB'TɂSَ샞O; c?&:x֊_+ʖ1*Yt㩴J9)ɉU)@n~-gV5(v~~7k 80ݷj.|D4GM&NE8j#5B?\.9Vh`Ns⽯gc<&31[ tcEXb)ֆMJ { KU$%̛G^$O Px¦:l/Rn׃4^ |«?Ɔ̮xa~?%f#ٹzٝӸxZx-`{YF&IH UgKsG | hǁ{ƌ[cn'Y#O̾]ڡ᧥dڏuF-aG##P>r>Mb$CeORv¿A4-Q!ƕ(i3F4rKAsN2]󋫡qgyI6{G * \Vh{Ͼ~תbSXsvaOD=v ޖh7z5ad+.shMp a+1 '6xfzENQ>lبGu[No.k:=o \_36Q!7Y10zE"HzrBK_CZ "++ 2Hk+2ÿFiK^_uJ6=!i1FO>ѕ<!\B>7; Gu5]ՊBB34hנbH3h>8v@@;q^%iTr5rɥv(0Ԝov4/v170JJy#c#2`ڌxD9^MmbģN5dd '_| AKK^}<;bǭ(9OV߉qK׍1܂d^sq߰--,xfWV+`1a{F,^j,qF%ƒ}o@ELI1V%JO7׌_1 0&Lxa9ELCaOb*1Z K~,I7Ʋs}+ 8dh>59c1 Yendstream endobj 100 0 obj << /Filter /FlateDecode /Length1 1207 /Length2 5600 /Length3 0 /Length 6334 >> stream xڭeXDB:bF A@BBB:_={=|Y[Yu9X4ePE$?ȫ`3C"`qq0@ E A C8HGOg- -(@ 4GQPtKs8@i <p8@ V0KjCRFDulo- @KB"+5PE+]pus=;tptEAjH+3?]'W9f)C\aP+M`mw}EX|&TEo9 t'_37 @ 0?(DZ;;{7Mo0zh@G F:u"_G"QP7  Z mMPB:7sZC` DEan]l@?+ Zo!@2?A"(E.YMEG`?Gh5(w詺^~ Zߛ)'G_]  |3ѣl C(jIu i)lZP0RË)g}+LxqbEE= f+zgCNi7nf^Mj뎬/wH?4L cj-%vgir?ټ;ςaVב,"j b"Ks* -%%`/ {7JqQ:!=SսOUSUj醱WY`catmo'r 5h!JODaͭ,5UÍ -fF'LS J^?Ib?҈4;$Uܙ$; nʘүeu|\)Gz/gtY"ˆTWv/'eJ YN ɇ͠{!LlB>jy\C'/]'^/mӋ=- șsHqJ֗lVo^3P_2'L&o?hݶɅʤ.agW,({'ݭ;LoEiygXei72pGߟWyrXCQ0vQ@I|ywFS/C09W(D4hdXxl'ՏїQ5SH ~\?Bˑst14ߧT{sJ(k{F|Heuk! I}v*):OW_j,ziy<6P()=[x& 8Xy|aƪA9Y:fݰˇ鍖[?ʖV.>e7Em&sO+f5R[bU0Ƽ:Q^i)&o/F9j2z)e^8-J ͎On;P?|cS߀sE-NxٍKTORQNJS9io v.it>ܿx]1u,*O6ï5ۭr ZS&t;|PޫS"t$۵ΩM@>82{)wmVeuVâKb,85U+.G=]ôcvz iq6D  d}U_*L%5,uI}\ury;ӣī\n/g%0RD!ٓҺGƨF ZZkӺ}7Ohg|K]t?p+ˋ襘.jd{UbWM,y-^f*&-}ϻv?^PSNdz \nwl|o`҃Q,RŊC?sBFe1@tE痬[ѿqJ5482yKlё$(qytVW)|qEл< 9O 5g7UQ^¬-78l=|V*J E:ֺY❼ǰTLQO:<]t/E6 EK?Һ F[*6ޜޯmovyCJk5[ v6{O,.fwרZI%~1%c>{8I%U PtVIUᓜ:M!1q3M r&C>۝Ibxy2[|; \,#+MBkOdp.cEn}}wg<Ş-hOU-?}؋v# ݌=M{9 Kjհpr |WF XĎ3~KGMSLPYl;/#rv;ŕd2GBHWIk sBS2=s1y&iN5rʷQ jHkӳػuWWa X6}7'DdeM%GYnUsd:M# _l2WC[>B>q&tf&jYtoktĒƛDHDb4y]34U $d" ?P g ʮME,KX3:M{~p43-|mԾ_amR…VIL[˞~ *z3|uivФu C *֯*~XmFM~)* RZ9ϼr6!S_\p#19=LVi7;\Aw1lCE7LɽE UrƐr 0r^R䣉ȓYl9m evןJ$CQMKaܪԀfb FJhRYWQ25}1}Qjdl-:=›{FFP6c@ #?#_Rf#S%J׷G,oW.%F*`- 3+ܯIG<$Jy: _慖:pJy4 ob1fwR֛9QfU/49!KujN kΓ($Zsx;4J{\wȥomH}ie81{S*//0Iܿ/t(XU4E@.\W׿ VH%F-p0Ś<lŖ6Oi32gI܎2I|'HzUJ3TN #~&~N ceecv.ɛɭ )zu3{]zMChnEL(&ef?o~v]0Z fXf0͔ 9WqInݬ[iC i)"\Bvcp ]œ>ɠ:qLT՛?T+,St 7&2g{HgUiKyy?Z-db}jnj# ,’ÚANi }s^~IV}*\UK$LU[z@?Az|26g*(E) ~O\d n]W/uIt1?9l:ξJVّD֑r9cI}:Э|jN{<57K)G$:2svy:Kt.2ַUY:=.r,z_7t8.O)*oYrtozw2JK$'ғH"!sRpr2mcO̝֪ڸyy>oNAO~Or?̋K/VEÎG/s1H+'>[*gNus\4lڮcbJNJ >ɢC7ys2[%S6_KlFA,(-q;RRu )CAfr tF.:BcaQyJu!Nh?G.R^g\9p?> stream xڭy<ǹZJcf02"K$C3lc썘$)d IlK\{0v,m^?99^*t``!؉Ơ!0fّaXX! 0XY#4l a@g a\Bfx2L2˦@ 3l }"pAn(H5D`0?%KN,0p>P,6,lPAE`Vo`̥s'3!o A.gSA.{B!Lf@VПRPR BhdF0YM'lbNb4HK )'lʶ7J틺.ԓ I%T7=%d\lw ]-ˑ_;rts؜RpRCԬ9n*yOy#u7}@[i:ym tfZ,-wdjQ%n/*]On8aU#?SmSCQ3w<˒2G<m徬C t|#ꞜgFeޕsdI|iia'd!Zh2:&NC?6YN߽ٝN w}| 1g|ccI $t\֬y>N,pI%e{jpȒG"$VSY*a+;v@Ke ʧpJ E:&Towl\߇GYKNJq&&Ϝ޷w[cZr;~+m\\%1['ϴJ!ew?o *KHSae՝6s SgFvR'zjLIYe1&f"*7zAAtkrE?%!b3bUw}\_83a-r*&>'Q79*uHCQbqf0 /z^L½4[&>dB4uPښ۷["4/;?J~ oU۔ [VD qE+T {ˬ?}V Rł aQTkАv)zeDzL ~ɩDp=W/6&?ҬK'tE>|^P W]c~d.?pk ynƉ?PJ|d3IEX%t95ŭaGg;cu1!'~г1Ta/o!0endstream endobj 102 0 obj << /Filter /FlateDecode /Length1 1027 /Length2 4950 /Length3 0 /Length 5621 >> stream xڭe\TݷǑKbC``a@JA@%EKDAAJ:%$;}{?kZ8\lFJ`#DG 2==-!RABPP\%>0@DR$&$ ?B`;y >4<[Bsw|kliwǵ>N429c,͡p*ak߁TuY{(;#׫>pOz6&q_:asux~C~ȆAL@*]їW`=DT?o(%EE1}+A?ғ!TSQ2),j_YaH[VrwzcEmU?O wRGb7q6#f֔i(dɔ׍/g;\[(@e2ײM$l13զSn?&U^?HÓ6|^VS$MT*]uj뜅Tq  r텐ڻH@_@.7 EqGeVf֤=܆h5}+M[\JpțWp+WvPP8Pf!}g ܜQNZPvpᝥףAoPGqK6~>sN 3Wnĭ\yL~ ͘Д~ V1<˹_|B9=2"wkedOf|ڭwX>  MīOYlYtA07ܣZ9OS1R_WJDbfVF 4oͲh}HC-1KtQMnq i\D~ӥm3Pf^7Ǫ~l9gLr,zPӹu[Ő<S c̀u^E!1m`{XqXBm]Y96ag<`17Yc{-gVF:JLJM]9N?Yz.XDdDLr:!/QH/UG/ $ h*fsT0[Yvs,1֕o1Iv=;$jϐZԾ>^ϧ"^RZ(0YV=/dE)P%>ŝu`S~x>dv$BNc!qv U/t+Fp K]g A&Êo;t<|6̯>oOۋcLS j%+%qSP7X\~T]\ ǡ#wn\Ϟq`/!qw ?u *x}HőIMS.ޛ<Y>5ss2lKyǥ j9M-E7-g݆2C$PT$]=dR [W{>1SVg7ՕNUv 9e'@y k͓g\ !.ta@t6(ݩ!|DI=I3F[MHPzWrˋO*' Ҹ5 Osߍ-n%b 2ޢ kuD"x9bb 0@k9GM!un>ͻ}C3NDaL[ ޗ6xO=8.=p$=B(ʆYxuTIHE5xĥrUR;rc8wj(챣G9ISk!}I~Y[!O#QP`ƅPܯ6Qe͏'"Wk%:ǰ;ͭ?A}U+35kJ(7^!x-v;yw۸!̐F( 0"iI-UNgm!5x 㼬.Glx]QNhLQOrL5O$;jՍNJ H<9҂=Q薪bkzQ) uk;T$Cor^O,Ie37–#RV?t"iwvp5>ZKIy.J7k3 /qx ;=<Agn$CvQL10SBHYIRCrt] 0 ɎJbv1fNzQqmH2ސ mz6jgM `9wn.壩[F29`K[ucc5r -D/ӾɇHr 7 mQcsHFX:s8};NYw$L;vc/K51w(5h]Q].[] )GV'{?j 1W q貘o U\-EXmRq4P3t8]ӓ:Vm^0(,4G=2)2Y~pr}lѪJ"clpX"P X&0Q4MVXv@sg*;WX}wJ#u\,M cI3_i% ;ǢTBdET1ۛ@|E;_Ɩ2qVE|ϐA%{iX1R3RL6WXN)p=Jk>GJQ?2~:DM%f 2 3UU4y|hS`7q/$wVâ],i9* .L"⩲^jQuV16/8pS9Xzes)UEnJO픷X^7b2?oCG/S!f -F v8u}ZǣLf؍&? c vmS^ PBWcbg*>ϓ>$FjnER%nFV#2t|U00CVM[B4nbXu;%.َz&JE+r;;Yb->VVHX-[2ّ^EN58Qs6]+T{Tuڤ60(&sLPZ0OAs My,~!Uko8*_rAWLtԾԿitlfHoJ:ۂgG>l~SFt YgRC6y{owlQګM:zu rIC2Dw5* 2 U8G4 A}&q7gbu|8oq3~l.1-I#4*NJw7]}"ZmQ,- 뷯mxsXL?>myQupR-݅ŭMfSmfeY [1]wet׍]Үe"D& =bC!8tV͌I^tŝ}_7$T:L/D?2e Wp O @?P0d%=Jj5F3fWPVܳ@)ƚnwۍ mBSC+m;bp|FGׁZ G/mG ׻bw**26i HТb^8:)lV$r#=,I` V:qKLfZ]imCC BT?AΙ^ y&lV3kQ:qHS)6WKyJqn%59>#Av;Bȴ*6/U}Si.]WW;y`21!2JOPŤCo1J#$-V2EY>5:>-V ys b7]04%g,\p;&YO2zeA%Qέl 3IFi21r!y{ Te בЖ1{ߴPnxj2Rt8ѹ1>S!f?ˤieqpSZ #"jquHMĖv}?etendstream endobj 103 0 obj << /Filter /FlateDecode /Length1 867 /Length2 2688 /Length3 0 /Length 3281 >> stream xڭy<Ǒi!*KI0CC=[2ƃa8c0e'NQ촐PK e_Z,e-پSw~_~_s]uKY4]I.H!*2\"dK:X  1%ȏ((e"I>d֖.R4A2%&XͬKRM}A?*ϋDxpD^wKD7w矔?Heؔ&]IDB MI@[#LoxBH>~ \A2Woo&+׬!K4!Qq )8 KANyNTWșaDU `lO)d>.r.Gr%f)4Fx+H@*0\H0\HdSURZC?87#HeR~b"w 2^?iN 'Dpiif~ R ( G&Dʏ9 ϜRA ^E+ {Q!+Y4a Uru4'spW7pfH[%< ~A[7,qMsfO]O?(7G*^g/|=9+gj/:Ezqh37>)4~a~ɾI;Cr|+%DgK%=πEב UM j?߹x},}xS^LnǛE6us#Q%:zQ TsP}/FqE~X;}Տ"b0ݷ߶ZW+a)7*?KRy[4z&uo{~N5S,ˋO_<POLaXWט{da1\>c Ay,9޾7{[]+5Ԛת"%n1uwv?/}MҞ,nK=ӻ-uc̑T2@'kW˄Cf!O3% wF7׵kr'6* ff0#|/#;Ҭ+ #eY`I 11)^-qJaL 1ǝkaױAa*Ґ.mzتmJ$>\H^΍SJG A}.H8MML IޙL>ehxzG"F'C2fT5&Ʀ4;_E1`B0~Y ]\-K?)7Y+hmkc&Rb Vas)t% CۢK »Z^DY^VQؗN']Ѹ`$ٲ3 ,B,1Mu.;P㬚ؾ5/-WV:?vS暜54'2m{VW6 $ZAyыrz9<'N{ %,UpLj!c߮1.d2ay^^׌GH⛿3jցVl/8U_4.rwrcM֪sSebJWBDϷDFC+y4۶a9]8wZ&J$ {ڢ*qR]dQvYoփRTXNxVT(i%oU9qSo&g6/'Uهl_LzuYG!K ?$x@%DP=z3EhrT^h:'cerNo5֬ԡ5m.yq}FnԸVYHl0ג(L8QnB%*Ԕ5/!U/0ՒY|Huq2˱hd;Vr>:n r|fMRk{Y-兊fUJ"r`e]*;gVP%_Y'RhKE[!ȃ^F4+Q9r7cCR:"_LQNԌy^etwTŰB [1GL9;kmR{iX9) m]ٿ}Ga] Edkd{G퇕\5R O-Y=P n2o^L;Gl.(-~DSco\rԛo=# iT &.fnԳA{`#u`#giM  e0lpI42UrGbu`J(Gcu74Μ#=\#`F:jy.!c> /o."нP͕ yGGG_qoRNO'87ew ųUW@,"޽u'7y+-!-gYK+QA,8Ln.*fa5o-m:^i Z+@o*|V[GAP58n`vSJ_ӦHuJqd$δ-D4^r,`?x$sm"h|I8b#rOVjKU+5ƎV!GHBMS^,:YY#w*ӊx#ftˆaNnZ%7TZ {t0b5]1O[ >//#7Mp>_uilMU2M)8AƳm.]i'-XIHQE$[j%3[kQ {gLʋx-v*q}k.+Wk::[#bd,MK1:셋CVM֚{(F_c)6S߈ЖJH?Ss',4٘~7ٞ\>{2cu~ <1\-uO]kPrhlƃ#ūJ.½Zȉe_v;0Cҧjnhm;FLݝJ`endstream endobj 104 0 obj << /Filter /FlateDecode /Length1 2002 /Length2 14230 /Length3 0 /Length 15311 >> stream xڭeTݲwwww;!4Hpwnߵ^3諪f=|TY P# # /@LA, OI) 4vr7vXxxX@Ћ lea ' bt25(Z@9LmjV@W/F-@.U h02u-$co]@g(Ϳd@"mf@sx&EP5 HorI7[[EcӨmlge?vn@gjMhff2ƶV"@MV.V@3e+WSK _vܿ$0ɋHJi{)[ٻ{9'?b? ꎳ'@^P ZfVVN<7z L%PO $`C&?`q1$ IId5(!?ҢiQCT]!POTO*h@'!MMm@s?v} 6q:؂.Z) ڡ_* 6U`aڙXeտmqr?A3+' ?nX䰃ah +d 3h!h.6!hjV:Z_nfA5svAA>?3d5 ӟCn@N?FWeclwLJ^9%d|w7n'кRs$9Al}4Ó9 g[>YҾ+ +5 83 _my1n(Ũ)*CR9@ V| J aN %TOc)܉Y` YQ}.KnǛLgN]k(; 27%,Ņf%X*om(H03g8gmd?ب)"xSA|VXr3PT"  %+m/ SFeC +kawA:]e?9t>~nST㜫vщ4h|GyJ&&4 ndChf1n̤i .IRju TLővC0 썒TOS$ey α쩸p]X+ Gip7=aLg˞qLz8k۝ EjStKxV qh`=[hM5vJǭWWeTҎh#3v9*F{><!z.Rٮи8m߆!x5])Oag$\ɫu3o i x;63ɟK2?T%ɖdt _`(C%|d,z=κIdA"|)UH:#pY0=Tab^R7دu^.̒;D RQTB59TJSޏS0omJ? #TY@Ӡ(},6Q+u0HͿƚ!|1+j.۴B,Q`դ{q 3Ͻ,9_:Z<҃ڹoY>"C[3qq"uԑ~}oњQԖ77X4TsƶZ= -9YK x2C;Xd jfL[/z6[6ű =zlͫqfHtXݻ"ݍ1Z ~p)#oOš%kgDkUV RsUz2jwY(!¢4O|={R^=1p<}y=$|'2=`?m!22#E0Ϟ鷢L7!⮳}ipReiQ qYb3:9 +Ac$-^L`Q&{4VՂmZN%4l8e|B\|\a;G qB8PD`v+-ZDCZ> 3zLS[g5vDWy^MRQ*rhȨB}טv9˂uqY ,Fw,XѸ||uL|CnuETu#$~}jO&%xL͈/QF\9=~"8p+29n'57GZ*F5ȝ?<7!r/`ϒ1Tp|1j.,5>`bpPvؐSxPD:"Ve.;ŇP*x*xjd/>  ׌={2̂0)61j !E66#|[JhWꓣ-0TY39>nH_$jJلڹT5E̸F˚g.wO{ddy>GX9Sx4.YpwCԔ$ OWs(搐v&MR}<"Q[*+Y`KX+HT Z}bq?GK[Y51!$BN3rQQ7=ÚU)>쌰F &,&QxM Bd kd':{@=PT~Ƶ73qWeBu-!$ 5a+#Xg̪,TP/] lcX u!2Knwkk&`,cƤq]rʟ9QdzumaKB/'v#/ztәm 'dCBA9?"i~JB؇Fɓk4 !, \>ҾC;xԮLfX7`d%[G[ska戝<.eJ;.m#9[u5Z%!Ioӝy91@ӚKR?p!oo6k.xO2vay>mx:xv?拕1ӤZYSuj=HM[|D_lR HvO5ʧ9ܺvWmEljT9-?5NJ};3W6(j/}/ғsK_v AqI =V>`@v8yd-S6q/܄?WT#F6Juݲ~q}44u6æ~ [~|"AxI軫wiAD<4d;f/ m=R+&`5#-HY4zvkN!g&kb1pz8I$pҠ'Ar|WF,l ӉauuBlwrg"q[1^"&V0D,^TaI­2U֕$:9 \!Y"wyH_}u/sI=eaZG}|/h#V$30k65ZP -SzeuVZՏhV2I~oax&Z " s\&>J&xaq6Q1;&cͬ9<kVDTRDay9h[:؛ *MS+j_̩uiafQltFkeU#h^2)MyiEsz 5VC:vtpy<I[M h5.H̘^<(NaR8jJzc>yOyN<Ovԑ߬l$%:aTrQddMN_S0)a]MMCDt#9p>ȋ9 D:YF] VI瑮} D['QcA[GEMv\3c -IfTSck']QƓ/җV-SJdtfGϯ:cZTp]>F%"ߧ%t&bU!+:2LFp6' W `T!k@͜ z]Ul5Ux*B>a؟ޣvSUχ/܅y^:aI^ֶe ƣގ%sIÀTYAďFYjM@x*0$:̯يYnOsl #2oPə_qhXcڜANwVU޲wzM %o-AEr{+k0URhH+#Qko-蚶֘V4LlX'=+#}" ژG|[,b_ Ia5l?:1x~JAAvӬUBlxIb 8GZBFޑ$Y&1 l4c,nQ w螝K+%wO5,\ o^w ,*ǪP cKMј RT> ΏDm3FZ'6i!Fh2Y!)nn؝ɗo 6]ؾq.{brŖ/PV>?U#x7>(,YǽB #xևWYS̹ ƳRh_ڮV}FCKl{ey=h!o"ua!/ܫ7c3O3b>)OLz|N^eZdALA,sKtn %<<{6'iS`ǩXf"79K gN˲. זr6.$P̕JVY11&ZawmlPff1b1Bp1uE''wn[Xa'jݟ"lc2.'Yn^gPʴDk>c-6+r1n2 <*#!21ءyxx쬇 rŎB<31_mMoΗ! QwʏoɽW|E s }9Ћx jg7GhRoa6< !3BXv6_h:(wQkiVvVz'E,IX0' Ɉz/.br&T|,r)< Ro)x"XX&g/.n̩.4/;>e`13o0 ;"*ۿ -I*OK׈L?A^mޑ) F|Ƃg|O(R^0XhI!`XFW[*h:g$geIqR_뚚w~4,_TE68f&#=(񪩢ȑQl8vV<)VC H"'#KF_|0?(6ٶ7e䋝wjƟp($n\ r_ AܱxzV(̠?'#_|ǂṆdLC> x7q'SYU}Շi}P_]ߊOZYF';$1G?htpv%Xzb21 sa`&z9HOeJF*ؘ~n*cY\sr2nt|)I>=FA U ?NH%E9iт.ϧ|i[n!fDzs^ό=ά q.v00k{G[Lplw,{O7SfpzsKDݺ|MXc#uRs+JN"ĂCøuÕ7+e= ɬkr;ddbCd]9Y1mOP*Tqrf\n܅i9%ex@.ͿuR/*&tGD\.,ݭLQ@D]e*V 0bσ*w "+ef4KoH?˩!_fLCꖺ>HBTEHks4*H*a95n5ى ymAS"a:rϵ0ĵޗ~n8{c/e`G)ةo1; + yPe9ڻn*;Q[72&~|bK#!*_)oNygWX?B *->G\}+d(V(VpJS3FaL^au|XEJ<5{ĩӴl~Q IԢN,ᚮLOAZBq.2ѮD:$dyc|yLz k9-] EB#;.9}+ǁFk&ߖ5 NBSͲ8j$P{0'L~:@WHn|]XaӪc}7;| s?M_k`& +b̅),3kaNRK9r!RL|m8v^Nr)!%z;"=zSjiβX\b5]ӡ5+g+FW3H,oɎnp3IemD^ 2]ۺ˝L0l _K1+-vMtaK,I=}T68ZwQN1\X~-9, 4ecXyn?ƃ, (VD))7@ };cPjᚒpQImNK.ׁK!4~Zi axMWHbw{5m\\ᖷEqH{/>P's֣PV pf1o}U=9,(aV %˞RdĸQZKK-+_Ȝ;?M@ԗL.B,b862ܲ5a6ɋجԨ2:fl)gGa)BT@\ |Lfw=&4m|Ke {-++,\R7Te:=AW~rw/<@K}\L%alE%/mbꧡN_f-[ǥ;4 bs5K ca(`WDҸI$Vq Gt\ɒ672NtC +!2WdJ:FT8NۙK`yldR\֓oSEKיAsbJ-i#^_XsTOtc|VF[tC)|O:1W E{, {nZ OBw&a8wB~S˵DFC%O.vg<~ ]¶F Si5v5'ƹeKY,}=y^ow6Z&?$E/@RײH'nFIuٷh!u 3PW3/ _J_PN>X F~o i2o}V.TR7>:B5idgZ~[۾klr= XY _p;.W$P>r% 7̨~7nx#w@X+_t}7TӏĿ\NU|6>/s#8@ d0c2rӗcY-X~ZOYIa%0\Q$z\w $~{K0?_GĜX#"^{ha<:<~ ar”q O* ^+hļ$)燺~A*{4&Ueؚ:mI-rgׂb*qCGQ~f>Ue)BgK_Xz8Ӊ'# _ CqH_plEپvF#5ClhVU nQSx "ɮ^Ա`6ՁT#E^{nD/Szn@o=~lOLhؘNWڻ 6bMmB%Coxfy*""-yγ RQ"p?T ْ@F7O8!0 Ux"ǥV2ٵLƒv+xjpf!2Y HR^2aBW7//BJq?A]u G'b͑wIU, i36'Y z͇=;9ԳEj[$jfR)Ȟ^D:/BB!kOcHGO- GD>71_̾ʼ?mB4") s Ss ? a\-bs &,udF=yp TqZ t =OpV/e3B6%!9[A붅}h f[Ⱦ$Œ3?TB fs|=Eg,!dsm'Cj2&-EnӆQ'ƍ -Ӗ ûQ?VABVVd51}MxX ӳ:d8qPz!hIHs09'C[8>#ni-v[(MjbhSrmM˺YK؆,j&&ѳ\ wFQBvXgvem(gݖ^wum|yA-ˋUzecTaxDf}T$7T_S2..Ċaʢ#Rۆ^\z2un^xY,C#K01jLv#bɃQ]+<{yU[|3 JQ՟,ff-//^~UN<}O R}c$}C!;TpAE'4A 9dKHzeč;WgK\?Kc ֱp ɗ$dIikXgf뒜hb%Jk ܐglnCASe&S '=J{XV!3">\(_BV=hb CV{[O;FN=_32*Tw/ N·ighrb%= s-ut,5K v$ ?'mV1Zpz5J)Mߊ m-|th_l`׳QώLJkMenϻ4h ִÏea nH.V0^qx7\ #"qF_ٝޙχi&Vn)n*i8{u+nTèy23E ѯӂom^zkAѝ1!kyTidvdִLM;{7Cyxݐb*~d1c}S(bHDnR# %~B3L_PhT`yVG3Jt-)7uÍϼǨssWXϢrMFbU+Y}߆./z}>M:{l9@[<lhZve\&2tCG{܂D6?-?e^GgZ'5yNqh磊PG3swУd*}5%F/Ps2hiZNLf&\-c5=#k?m>N\ۅ5lHIgNZ_qSmb1䞃eȀOP[i92]xlGZ>{aqBG\*݆~:D)i$ME϶[~lgU|z]cݬ/ZSg c2-?`pr6|O.>xC;F(I캽KYr8Z@LwIk vL&DR8"rI _Xzpk?/"%DkM%lX5F߯ .Ǩ9cPԏ!$R< 9|$ҏAÚ3. ~6S{KILBEq~}YϜŠ>HCULGwb6btO뎬T]~uu PIOf"BYMI,gvr"z ]8ǁ_4c*{&؀Qr:&h&/;_:3k)w SmeL%k'<=], L$扁)}"bNz2^DC/ عhr GǛ7ZJ3>4?pSiN$j!%If;~1OKx|zˍ9gX}N cSN2W(T`6ƏtO|8)$Tc^xP̦!mm+;4Ur`7ùJK b&Fr 8~ske^16^2*\v Tc[~g%]zy(|H'WM>ǀO8Խ~4u8iA=tGc'fYIjC˱#tzzu{엡m(^F- }XN՝PRW#oX-#s߮b[VGE<)Dd8Ytm G@c-ad Lw|G _#{O&j3XᩆQWM. ^ʖP:z" G/5qZD>|M& ά].3g_`˜OyNi,۰gV HkzA/ρMP4,vOM^OT<):2G`(a%!(dzP+r^9{K^ CÏl4DMۜt3%AF[^'撽Kpz5x<`b:!RmCߟR5+Hթ1avd|r﹫bŞCxĂzF$CDK36}^:!JOԠ g|?s[XTH\qPEh_FqP-HH ={[_t 'M!T9 w>Y=_4ggU-N0!#٧'d(ކZK=opN9bPX{ i% uI|9'HlچoߝP`9+Tsꁶ1RT}N<%|j0&}yݹOHyI0}mR>ٝu3o$Жvo8Hܩ0stəf]*Ry e}@4P&t:N=aq=,\}Rr Za~`drAitOb^'Xendstream endobj 105 0 obj << /Filter /FlateDecode /Length1 1039 /Length2 4057 /Length3 0 /Length 4727 >> stream xڭy8I5˓"Kf l!{303e%R=K#ٲ/-K%K;;=ϼ>ys]3Iu$ $! "ih  )zaaM N@c1ZpJ((@u@Z )+JAM vq%b?E0@C#NpEy=p @$|(/ @$AP.h =g }3yɡQrH1x$ʙl%B!O C@C,[j3! wU@#1.(@#4^MD!M+ 8GaAfZ58C0'ySC~1y:84IIABׯ[ꥍA`h y!rɛA&($`K g8cq?S I07d7`|`/RID`==!`?pCB0ocИ՜_ei$r#{(}~4ٛ˛SW%HP /RACp( yobg4yP(" A?1E\"$X;o)8K]&㉔׽gK3ٙ_ NH=Yu\?oiHZڻbdgJi<4Sl۵\Q-eک 5Y`V:7#ªEd.{DFL&?8=7-W+yt9I'v;l9GnaF߻yzcb$dc˳2/D1#Ip9v< NIx['@W,1F V!2+y97x^rnOMՄ9'b/NګΠaˮ~3g{tyZͻ3Oictsel? QFboZ\˃W\B* ~ L)[ "c+tjs[ܩYݍa"L=3t["ǘyS8{dp2E5&(6 k$V^k?qMgC ]c6E]@~gsBU; T{wMXV6;OLĻ7jU3*-22:m BO!ѣCQ>zGzxNw tA# 7A .;]:aX(joQr?g"C&1=e6QAr8'2ŠH,m7DMr _LaQ 15R!ԟIf2=R[45AjH=fuRȘD}ZW~g6$Sju^S_ C"02S#X1׏TXGwm|yrjz:- bLqÉ "WCwI yiek@#hȜQm& oՎޗ&eٲ'n%x<0NSQXқ-{;󝡀 _F 8k-,yO,is,T)pg +G>q^X-W45:tFbQl&Ӟk;N^zx](*:';Zv޶\7eSoΈhP>%L}/u<}Pŏw">kN+d[Gz`ګ9(ҬuBMv!<ٞ)IW@yR&Iq lp*i#LVE,|.nd넂xN+Ӿ]aĵS382BoiL 0IveNbU̽O-[Dk1 [Z6J8/M_j2 Od+ *>p཮<2 9 sU[n ~HeV=o@nڷbJKW`TB0q"`xݽ/`u]⫱oWL9dc*?0wn8*nkG\2*{c%q7d^Чd |m0fXgu&Mw)Q*_f㽲9f"s!vX9%=+}q 3O̬ͳ(1W0o"/\4R\i7de3oLB^+D >cQV ؏rTrP 7\Hs=J8[`)o-!vhBĜd&ž2p= WhO%R_u{(^Et9cHSxݫ%"fppgيnLÚ3qv<XHO]}U2wv tB4G?_3EQ-C{H35Ɠ Js1(]gZ;ϒkCK3B5m4 &L3VftB~dp1s']^Vw+% ^z'Xp>_ ӧ4*;^" G_Yc<7޵SK>Iqjݽ~ʗ1G:DR\Va8=G07w-qcGo9 MF:3Z}k[߱xx{1ygܡznywZO%J~460^x GUeYlw_ۍL34ߑi" ³B)2uy!*kܑۆ o>Q4zjiB!8BT*nbUmwipqwT3.'RRctrve%?h SunUR`{)ia4pT3쬥ķEQ[0-ǘ_Sk[-:4n7!2+sF.)u=lxCZ3^|_u0CV$ jI@ĵ5 nn9F1Mhz)Cy+MVőϏ zǕQf? 땏}F\OVvqW%k>mM/F!=_G;ɩ񌪹3{/wM߅]+~=-'V*0LYh_! )X7ӛ; ]*#)Azcr^A{yڐZFsqf8&k^%endstream endobj 106 0 obj << /Filter /FlateDecode /Length1 1000 /Length2 3934 /Length3 0 /Length 4573 >> stream xڭy<ٷ)]lcklcDhƌ%K5-![+"$$dg~s}^?|?9!pHc ,!򪀼 #pXCȫzD/@AWPTPPb px70U ax,ao$;$zh4u $BY^@22zտߩ$ޟb (8,:@ =V8]HS7&V0/_M4 BoK$ %c]˛%"b5#(  QAH HBzIaq>>03ϯ*A)~63;nv$:'EzzA+cuxۭRf5 ڛ$AlN 1(T ]PdBt Q={a!镵u}[kằmV >4 { Uy䋎ߤN7sRi1d|8}&I M*}9|"*{muk[e aj^fz3"-QYhZFTpl +ٜkEb&e>.VL֜bFWf?^9ÏUEuO]tO:Z7Kl zЭ((*DKkOzaدj|xnYϰn( =}u.C-P'rdO4!f|#8{M&-PWj!w*@v+aM;(_UrJ$w_ ԴSxq1,E1OZ{NBSņa pd 6@*3\4j /=olo~f=0AT#КJzP{htr1w?O=\o=+1pڜUE/;錃m%gȔ}waX2Z;Wsk jYTͤ+BEW/#>MQה!l[OgT:7y O)(r+ |%}Oa[wN01F=6|̦4'oA7\͌MAL;ذONdJMӲچvWM]H!|ZqLz/\ֿEuEO V*%@2#D\5г8֖lE)2c%V-t $y]eLI R'8m4 6y86ŁzVnj'f<BB¦YP!gO\3 :+:;LK BH\0LOFfe%Q@3q*9ZOj2Ju&+X$cG4FWkcZ~DjX-r9yt)fT&7ӵԺ 4(#𔊒ĨEΑhߵndz@ȥ5j~lXKNy/v#{FgS¸L[ >=B{ÁDׅs#{putL}e"؉G/VCBY.]wĈBoJ~bijlqk rN}.I\]qߧ ӲO_h`N\DMl͛% 44y:L]BzYkAZS//9gׇ4ڟKzU8!af|$b$הZaDuT^7_3p10 ;?4N]EVN,%o:T뻯pKVr*9.ťܱҰ۹ UumԒ "xMoΩ|?ı:w 7gwo5; G lTޤ)cwc+؍Ww1هyn>2}P:ynLY<qpZ:OKmڙYvvO?b<쵊fNšvF^ W\nN InUMؐKbz(.BH@)D(T]h:4OXD=ci?!CU7HpT|fSaF:v{umy sI--k:'Ag.̫Jk}u3odh0R~_ɭF~oL[?X= FfjvB (ցܖ XT+ѸUޭbOe bEBY zN!Av8Asղ K{T$ɾJ9ý)o=J_ Rw0&\]Cz lIbԔh*3\iXTmA@-$'m}8^Ț.ht>Jr T~mY#iH{vhSw7.Gwga1fQ -oST6csuj%glC&%ҷ;4zR"B$h1UL̢V%C1?WWS#3cp>/(.pyNt 2pEқmY1{iq m;\jb{N&(uWx7V.Ézl.%o\p^nlî,!=}N&5 "Zw9p(`!z@9Yx=}f*eo.É}p;OȚ,*'rOT$}r ]><#Z\$2zyo}|=5w{!JB# $ʳE-QtW2N뚒ճ(=N@+^bccos45`sN /:vء*0 +2/5>͚4%YO~UPyh]239ڗ7f>r{ E2Bv%pMeܲ(xZdP${oEydKSs^}Sb E edޠ*T+[Iq}(aa'gMa|ٚ d‰ r/ąmlI((ܓvޡu)hϤ]A?&*AvLS?_e-΅zE\}G^.ݙgF21vy-jlL)H׶UEeΫK"E:>mr>"ef5ܺ2]Ty Aptk0ays<)/w^R4*U{Ш2h7ZzqciZ5'm>Ov:&WDWNJqO!j|'YҧWjJ7jTV:QI8r$aL On1_wLZ U'NXq[uiHZ7'-oU`zo<}/Mvt|)HY**9P-RozlF5ԓ?wJI%1;MaF0WW>Pendstream endobj 107 0 obj << /Filter /FlateDecode /Length1 756 /Length2 1214 /Length3 0 /Length 1749 >> stream xڭRyXSW"*HR $`i B a %<= aP)-|~*&tYtuM u2Hy`;{;{޹%E@ Y' V$b` uf {@ѬkOړ %H0=b!t$9lxEq`H$t1@XkE @ćQq#À1W1x(` !H^~gj#[a-<& !ĸ* G󄸰XuCGHGp `'H 9Pxq,?ݤaT'vnp<!q!|Xr 0T[  RA"(P[j+;]\biתf}g˿TQ++S Owܤ7t\񌝳hl2xgl{BV|kqÔki gcϻ啇՚(wwmL=ѺPu}f:eScBX #7ݤ&F#l#-Vu +;{R3{̪ں/bfu>{][#lciԥ'هf[G~{[GMrF7g^{cg$mup3J ԅ1)tĤ|n_}$㷖wV_kXq-."Œ?vLe>OZf<^o(b!d+G;RQ+x)Z==PyoRg!)S?ؚl`g)u[>>yo.wҪZP (^Jx~8͒ma8aU5s8K%'0n︻*8M>k&ը,N7֨/G,eٹĺo3M`mۅv>Z=4X؈S3rpkUvVçJ:q.xS*D:Q͗F@U G+ѦϺ3.|q'~?VN=ݾ{:R)w#W'y6}~Z`0ásv0njėӆҤ(Mյ2]>)_H K E/5+~;;3iO[zE. }C%@0c\c0gR}U)#̻P&YGમdPS⥜9ϑM?^[{2) 5qI@WŒe' 5 |i/}Vxr{w ^e2nS@A}4^?ߢpʌ4׀bWuhm˧,cZ qMendstream endobj 108 0 obj << /Filter /FlateDecode /Length1 785 /Length2 1447 /Length3 0 /Length 1997 >> stream xڭR{<DcBIW;KR(f1cBdL!̇oooQ-TR~2 %v(;.].%޿?ygYz i\4v@9d{'@Dfc*`Y[C& $"l,mHأ" ƀ鴈 hXpBƂaPc2 @kD(`X s-pp"0(~*MISE|8NTyt0cs -noU[G" ʅ7kN0~206ЄA|QHs l~(m2?gMKHTA_licqxcQ6hx{DAK;]JG.ޟ.f7:z&V,̿y^?ld2\~l^"g\p 82,^ǿ^ej1Gv8nU]\1T@GP߸AS9 qsZo~&0o?kțԙVM)Ԍߺ}*xαuolvԵ ">ꃆB'b"w:}xu\})>Dc|^s^cFRMMa8m _nmݝKq,t͘z=A}9 ֥"PEckc*߫YV9-&|OBMn=6o!Yνi3/J/]ܑͫX4"3.ԐD=%Mpw=.NK4N?٢glrzG{˨"Wqڧ9j&N> -o|zx2"ol~6!h5[9eq_~WVxlOWci+Ǯ0m7>D 4_TSQN*{W:cnцQ.BT;ݹ,5.8wNmendstream endobj 109 0 obj << /Filter /FlateDecode /Length1 748 /Length2 579 /Length3 0 /Length 1091 >> stream xSU uLOJu+53Rp 44P03RUu.JM,sI,IR04Tp,MW04U002225RUp/,L(Qp)2WpM-LNSM,HZRQZZTeh\ǥrg^Z9D8&UZT tБ @'T*qJB7ܭ4'/1d<80s3s**s JKR|SRЕB盚Y.Y옗khg`l ,vˬHM ,IPHK)N楠;|`EDyhC,WRY`P "P*ʬP6300*B+2׼̼t#S3ĢJ.` L 2RR+R+./jQMBZ~(Z s3JA\prʯ5Tе4khh`nnZ0(5Re05"5d떬Vֹ.U牵/oQ7;36t^bzɒW m;,}Q+zp^/lZ,bB~]xi<\6cN#iEgu*\g^ ߻-4IKI bw_~qwgoxu_LN WlZŋځ^y\"叀7J/U']}T׽ sru:zȜxl[ꄶ4t{L<$tz/إX=gY7Uw~6#݇5rӹ|N3l]F[MۑZ_[3./yܐ#9&0v;W?ރOu-0,ǑcWl e Yt3=2\9UwW2fqSk=դY2Qپar k_Ǭӷ"p^EGU~|qpLNlٞm93Ïڗvر 1ۃgI]֪H߸_u5mt3ZCm^߸i{'3o3'o-> stream xڭR}TUH<.V>%cُY]!ZXXf.30k PRdI#`(QT%G31O*p:+DD (+"<< ԲMjY(H@&=@P I*y%m0>^J1P C`Z DiTh<0- 4F@" c+2@,̀jxpcA O<(oMjdppq"-:8\#DpIFk cc%Bk iO@&2 !CMlQ'Ll% LAI"d!:N*RNKf@)|b=[0ru`VmJKPl6#/f#0$H"A8!=[5a0 q)hFkI8+)+ f\`Yn Yt4TTĐHc A2l' V! ()*~u/ 1p|\!JcMʮ +k=PO"VϚ&n>tSSbzNV:n.ץNsD3= aH"Ϡ`vuNgJҹjT{" =Է1pudIo%d_I)}Pt?&JP 0yfǰ~q. 7kydE":ȫ_cS(DƪkDz-Dus ɵM5%5-rי|'Fҥkpq3-O!mppղK.(gCj;K]vΠQC#,z\y_8gY.M->R%ej-M >0ҸSݚs"WofײO\ʉ9ydgZր ]c?Pm+7gmO܉ey%7҇LVnN1ڪy_$񋁐bb$aMbgI&yfne@܆_[rendstream endobj 111 0 obj << /Filter /FlateDecode /Length1 1157 /Length2 6833 /Length3 0 /Length 7550 >> stream xڭeT۶ nA @#[pM<[w!瞳U?3cYF0hHC-` 70,UU@^^,Y `QQ>qx XN.pk7,_Ei Al`{XB:p7 mo W6`nYX<)! Cݝ򀹸>mhꈰ@aVX uG5أ{sw{{u_ݩ8 Ps\]j95Y%7=Ram]^0&`w!Sߣ; #t`f?$+GX:BkzGpy=:n;rt\ B0z<6,!Q?$tG@?Q|LZ(x;{@!|tg>ZwC[|4>Zqu]G]? Q|u_wdd|xB>A޿L DDJKwqDVǩ`X3⡶K8\iҊCā+DS.c0s0B[x9AʑJ%j%F  #%MA?<01Cۅ3Oucգ Zu,GyZ:;so06 eeY57t{1q$|;SY c+⏵CsLmDnMU/+Z4^y5ܙ"C?=R._V<9Q/3簺8C Y/uiڟ)b2'Y+C>M<1i3"C 1OHj`z]ZGa޺)Ӭi ^a}h0ޑ EOϘѨp2 ך&ͅjMݸ9tou_.fy䊉]ij}/P ͸@itmAJX_D|Jx#PnT:CӏowOg0$X$x~~SƚєqWXџn`y?dC=)zEu0 s^$FzontYhj%5ǘ=y/4)v'q|y'EVJƦ1A[ϛiNvmAÇ0W魤4A30݃\~ WRi 17aoIW2Tř̍VvG%9,do&J?zj5%XteUD+0=S`^Z[qؐ0lCxF^a/.Qo)LYomJK"&ÓWY.9I*:XCuC$wˁ9v })>f u 61hD0, .4SMߋ2(eN$6ܘZgG(ec|t9U$rX<<_HrJhvч. aKD ېP7$e}U@>ۃĻ\> [OQ1`Id}kJ_>HX+7o"sf_0=9-KNBA8r}l3^a,87 O!xgqL?dRJ6RR%u0. T=V薓T_>).~A/F3t3&WVwB|c-^n3Et?7儭cy<(1fg}DgęA`$ZL'<Gew5f2D<(y= l_lD|[d !$v${~\6>OSS=hv+WD"%Pgg|~zx3 qŊńK,j`um/G$N~ocUyqXCwzզOo9lK,|}Q&;<&-:nMu P pub8?n^8܀֎t)w/ZE=`oů=E:Aa#hAHElf92ٱj߽7eÎ{1b!d8RЊ;Bf bϑi 'gSi`87Ҟ]2*vH S3Ľ0rr B4{47 FhDrn7? N#3'Wqa9ڔ1?x7g6GcVs_G/I9nOĬKLW"s=QAk{;p9FMg (Qqh*z:Vz:&5 +'Vӹ5Z9N%ivYJsIW'@j^i8d`cal;=o*}Z#5J%h&ا;C <[ݼzGr i(bɝlSXڭS5=uxR#^ړϤo]<~ͬ[Eo-k|qF'lWja2ڧ64ibxJߩ&V~ی+rdG)^W{dDzyћ[aM'.`x0m埜d>_mB, }?7˄Nx/DD#(p}csf0}Ҡb兜96@,#ڀ(ÅVn<-꣰۷ӌnf C78 T=oݔuަ1-b 8zi ?2sW5Mx [-oO2˄޷GA+590E—EO2էʨ7_S̒v7)ѮV CҭY&O xϴ<4J0K`ՖSe"žPgl|.qZXJoD.ᳱf.2ȧN6W//զr 9tf#d2쑋ԕㅶ?u37O} U__uñ׬߸V~uE7]kSiJWL}ZL{ҖLs=q N09WЩ8B%$d~H2^8-'d/ HtZs)i sľ>a._s.M*I9ՀM#~{lTӋŻ5'AƔTs@ʉZ9R(6w:GO! E/o vΛyI2E9Œf5I/ ]0͇WZorx%ZLq #}/~5yƿQI3Kp8&^+WKŜ߾I䶰ٻvl:]es(³--fCA؝qOWDʂX=1'7qkqJ`\6aґNe&↛va 8%81jssY]K?9;B {{b\߀Otы|ӎ㑀%Z6_vַc$" ĥ)dG+VTGNF8>kM,(<FP諶1Lȯ`Plt[cŔob%0@!>:W #4d.MMX[r_pGNI2ncΠ M*] :څS~YT3J!W^YscK4gKvMղG"#dI|~Х5m<םFgni*e07Դբ)o>ǨOEH0Q?GFfbS) j O,^Vf@^kDhZ6v{ڰ=v;*|:؃Q܂d;=syz9sEZݵJw 62\jr_¶ǒP7IHpBEResWblMծ{DM $/WJǻцa3*(yį'f16٨57'|X$:u<6*.^iUߔWppU$]Qwf ƍdf>^7Zx8Ss~52Y}_s6O0-f8 wB SMOy+Z_d;g1:5JNYaSBse,RZDx0woTPDJNDuvy4"q!j>_$}>i8-jy, 'nB+~PӰ5 D<ɋK{GOҏKtZ!hU_I:A^'=|Fm5uֱ46R]=LjXz'NH}P;4ObneɹDif+*&ݏT޿rUPZ#bc׵ofR' x~DI* qo;"d: fAf\k%W i)4D nɼd*l+W磴:ESfR뾲E3 h9_6ϗX 4$E5_"мki"vXt(Gx#ƪosQN ^+>Q'nQ; M͸Y퇍GZM?Y 6b : p'*粬gEKH٭@K`|[6x v:#ƴ}*Kglc4d:8Oo W:}3')z3­Ϫ/_sYJ*hWnp#-ZIn ڄ&=""Go~m,"I>~9{E/f%2I|jz\vKU~ylȄ`g:A"+,MF< o+{VCH@rB훧mPn5[DkeL=L-;FF0D4I*doP+BU[=M3>7>W&a;wO@D:fw|[nCU@X!iײ/(&?Dᮩճu\AB0wqwVEm) $M~aTH;o_WomeVL8/<,[ F*ܣ~I'δ7K}:4MU!Ekb'"4__TɪM=7d,l=Y\dp *=hO,~E-PAjGq&oa,efյm<'!p8#x17Yk^lAfQ^e 8gxvhma 27Ofs\@ft3Lq¾J?Ydm SE>s=Xj^!I)K«d̪$T#Xߜt,'BWfMX.DތBCCB;Ț3d *W{gW~?ǩ;-?:0r0IPX0ʸendstream endobj 112 0 obj << /Filter /FlateDecode /Length1 1995 /Length2 12409 /Length3 0 /Length 13523 >> stream xڭc|>Fضm;14m۶Xm4I4Nws}3Zkk] {gE:!;#3=7@DNUD( GF&4t5trBfv#7+3 Gp03wPP:Z ́6 cCkك dm P@tt11L,F@3 [84Iٚ8m6q_+ $ @/TH;[k A &w7_6agc tٙm;Toqr@ J9Z[ ٚY6Y8[M-Ύ.&Թ)`PT˩hhaa`P{-ڌ2A_lL,llCGGC8 `aktAmAGL(;AӿA0A\ F`  Ab0A|r(ʧ T@*+AU85@+`؃4Ā -,-]lcg];-M2c_GAz @Slc5a'?:j(5~G"??31fPi&vֆET9RZ,kÿZ!S ?$l\N 17oP=́ElAАvQԼJS?l .[ ?%rٺx2Q 2?nP{CG/+XpYAݟqfoWL 99MY+? l N@8l]j6+!NֆNA:ugyA9\@ϔ-/AY=v{ b:[T ۹{ѱA`ap220cGX7zZ@w1꒝1OejKHXla8ƾ+Ke4+3Б^"/ߎ\ 2<4ey?!w,ܞ}Pߚ(O*ξ9WU=_۵?3CSؓ1tdpJ%_h禎f..(?&rvawvWleֈz ,Y.'ʐgbUr(VNՁ̥bI @/EeM2Ӂ(-)= ޝڪM_H_H?t kղyGIŐ[:/??#;`#MK9ɖ}O$l#!hӘB%fw3wEGiy}>Rl"jż4-f1#o|̉~]{=* HǠ j.vO92+ f e'M)%ď+e\}~P >jC>lŎ1kOWVDUQZJuU^Xd_7EL`9Iyb.H/jk6K~0Ǽ,~G|`T(-!tnL*[.3Q]T$L/LL\V`cr򅌞n^Usk;p/nʡH-y9 YI\{RUZNq3+#Ҿ< CU a NU-MfATzS.t5%9*,\(һ! 1M=ŋqiKg8!E,4dT-.TσBƍ| [GiJ)m߮{K5 L烱_[dֳtEML" `k^:;B"'b<X & }Tu"/eyv9q5QjDeJqw|wZ| nmĐt@+ﲆ`:6b~N'> HgQsή]sIǬ:P4 탎d) <"-QOcD:)j3qlpx=)TY2勎C,Ye+s2e y^Fx HF]iNR.y cP|d1>M3Qn2nsh;c7b|D(OS1jj0''Bcұkӭ7Fi'%1.\ޤTbp_*ah|`9XR&0WJ\tJb61qŊ:}r =!6_HO|doIM;ǛFBx=4:u$-xb@[3S+tճonݏH4IX~RAd71CˋӾ\<"OXƼy[) Gmj xPGWo*(j~E͜EAKM)nV@GbYj3gO/^,V1yٲ3ş<utTD3A_<.r$-Lq%kI)J9^/\{/ƄRM:mɨtXCG(#q Hsݩ_:5,fײt9~&ڃɃK-(&c# !HZHI(|^&'ruܼ5йouTzvk-Ktr+T\%cg\uƒ$/1NLJ5!Pͳc ԉ7|&%v$ IVX*{w*  ~󬔂{e9&]8Ca˽g971 %9N :ol<5gw,f)y9+Q &Knl䚖6t9p4V T\ВL`kǰrwN,h´LwV.T`LސrhV.\Q0=ֺd3!F1On$KF;>fMFsZޤ|TӶy 3  6 sWyAЮ,%3iX>U-30;6XB] t%0C72߆dZ{\S"@09 =M5p=uDnȘ:bI()a{%#Z^!ȼSgc*-lv zKW4:16ÏfPnq; "ZOjjiCM6Tĩ/eTkS/򺽑Guc}5~J RC@ q_ϔwwj5DdD&9\q2*7Y}?F>ou,(;0U||n~TK^l3h1A/J~^vV8;Iu` |)[ =H6cFvqT"^7]-r\'[b$-nltF.(qc n o{)r2Z O}=hy` -[V|2nMHAAC 2urڦB ȅR1(([UKA݀m4> ġkjeV2HI*G&倚1L4VcUB9p]K UD:3 brB]r h"S}1 δĬc`^C&bsЏ![>6N2#pB܌}OtyDy,҂!BZ@1XߛyP3bLA|+PʉjXD[Gl QbEʏԞox®!$]Jy8}0 7dF"N8HFUnP/ S9Ґ{ f/H'irV1.]^s>d"PjVB:>p7-g/qGKm"61] ~ĩSb Z)BA"MϏ̄NS3fƤ,ɚcTnTYk^lg0mAլF }YJv6K,!K{࡛B*5Dp;#mEU0D \;[ mq$=wDD-1wTG A,N3feԎ6R^pPj?ӯ^H$P: d CzȮR N0c_0u Z[wQeǞ7RޮGU݊Fޓ"k镲Z/Χ+GyWLw% G_~qׅJAX^l*Uwl>څed9B6W W{VuҺ$kWii,'Jڑ]NJy< Fc)=@{:zH߰=΃DwH(_ Q}_.;4;Ź1m-Wce\G(_nv;^n 1 Q3Y$qCoT2'pr!/\Z13  bn6/[`1wib._3Ǫ~fS CRL݀dUҦ 1rULgҞ^% `Uw^ {oL&/1*gee9'@um +K(7 /iyn~cFQkz+Wrco8B!6yk5G*<er1tBR}S >[.S^i\)kk-!݌XŢGzdYeDj썏R{{R?U~IIQ'aˇ9ܲWd@Ņ"B8|B̯^dOm/H*=L^SC/eOv!L- fvJA~tzNF6^}d 8FMr#լ v-@ZI*ؗMC>2eٗX*YyƓxK9B_5Cn;yfa'-t/>>ظ)4dpyǰ&[g@MZ* <ޙW G .|40u׌&q-/Lso0yH;`-)NmmVJڔx]YQs7Bn̗ԋfs:rr·{RNC:wxBdDsbכإvhf<@+Œw*Z \h[ϻ/idz,|wIj IS5ghW1Ap\Y N<;־KR:Ndȶcfpi}D)sqI|_e"Rx7vmEc爬$ hcV8f<[ 4?9tή&)fI4hL:cv<ۛS R7LL;o`f f`]a6f`"(ʸvʭf?؅*$D7㣐bmI0Fgi{T1sR ֿQ̧lUlGd+Qy`CeDڔ2yrvP1wIx!I-GR^_l䝦}VZjVuh xW!er~.qcEˤ' [9.gE!>Th~iwd3[c#QתS:0CW ,:fM/F|Bw4@QrwBkmGIMF ³.$ts]!놃2 -Q!흻ڇYei€ZdA| G$MpC`OnTփbiGSbt;&Iu*٢ihoSadP.m[u#w0iMZ2S3{J d9JgT]vV dm~2 eH}A6L٘ηo5ۨS9(БBH!a^7llX(aV8c 6(q\3mh CĕY nm`Eĩ% Ze aosr6-~Th$|"xE|Eج[^v6 qATEm!4Wbɋ{Rϼ5trR$'@>>nPLtCb "Nt}S-Eչr%uP3d<'+"Tiv Ag}# V\)N! :ykگ,p~I]m) *Q |u 5A+8,dl}ٝzX%7?rυt0Yu3|K*4h@KS(D11|=cXZxjFE+_:L9wWXb( Bj#vmU^?.6J -"GRmOƶߴqu _I^j! @HΙm`NJH 3Gkm;+!DrUrUQUTyĜGlqK@/lR/s*Lӯ 'iMDVv3(GrV+&(Dg對E=L d~=OϚP-LcxR^"x]SgM(ZD=Eb_W|Px ;^7ܠ"޸{i61~ޖdΤ;XDWI2ۻZ,ŝik(bVa,cИS8JϾΉ:HZԥUl HeTq'~j$.S1<2rv5{P:)u/ik4kŏ˭ 9x) ( *l7l0N}F3"@Bg[+F'e0@w KdO2?y.w@헬eŢe,ub}膽py, ۻOYvAb#U/t;aW*s*sXzkmL)޾>{$lQ^kݑM5R[ g);V@DB'dBl'r˙eȷjՂlIEix(9f(|0$ O&hP7wj5S+a꧛1uyH/]d6soSÆm^NV|{~@q¸لc `XG2C S(_@cw'E5n0B 5Gr2U$4e˕>1ZTYN@cZ}y>e?{ 5el}gCDcM'_H`˻4eJ)ɂFJZx xN m!Ou/G= I3xF)Dp׺X/5cksjEtI"HL]~G{V E~;N|6{JagH',p 6D[[S2Ek}U?Ȍ'|BF<7T+N:A606asems)-Ŝ~$֤5akpfNRW/aNr]z>5Ϭ\/;Og[* WS]$ʹjL^iH^X)F^wp[$|: z) %MI.O!oZqI!ݨJiZg%їwA fNsCٟ0$pzh.: r 9-qss7䄩. ,^ $k]b: GĥXv"SW4,&R[I]V \#XeZ[iƞd Ry=vzU3I٠YQbO-`zm!'t+vAҪP8 ^x!?KuR0U\S{G!t<=klXZY(nB},5q1 ;GO&='S@d(}{4Kݚs4E5<5.*fȦ`; ҋ(Za'+^םA)3"ɩ@$iLG6]4%yԚzNO#a&ԁ)bx+ ?Q.fs偷ʓE1cvUnLC|zi*Hps8ޟ_ ǵTdW+h=g,iTZisa&aS;E7=^B(<n~B10\ :ČO[jl(D m*㝊:/~\dSPPKR.UPƶjt*h_fG7ƟH] 0T $&b5xp!GkeB+eT% uoD8 ַȷY9j|뭑2ګVPT,UXup'27~xƊb X.=bZ٬VAf.>hD5x$`GL9%ÏK/Sn|NC)Iov.] Ag?aqsEj~&A`^H+K*kG2NT`9d7^.(ܡGyg%Y\4GuI$\W޼+D~'qj_hFS$16a]v*h*vYH܏Σ+\OzPuо\8IBCBDdAm@ڎYxVf!xbEٽroLckZ0?cP,:!XW2ʭ/"߽0 tk0;@Ö8ܺ(le:f% g_F75 Pp%uI5]*ȥ"mK[DdxaRoP}$z tº] ӥWqڃ⤩X=<@ MQ/궅WWB:9O{z:h¶[YSu2EM(TÈ=f>W6z  ~_$\O#zɮ#ZD~}⎇첔oȻ.9%*^;LXQ-qD㘫Y {3SaYYT\X"[*(:4c_{~ƿL{^fPe^wnC ͫP=?_˪tmgכdwpN+a{7J@pV:Gs+Q +fCh%ɽ#"nendstream endobj 113 0 obj << /Type /XRef /Length 133 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 83 0 R /Root 82 0 R /Size 114 /ID [<9806e1e36174bb90d256998f272a1569>] >> stream xcb&F~0 $8Js?`z (9A$0i"مA${VD2zE:j@$o,d &7HG RJl>X\< H28`3UڂHM`2DʁM6ucb endstream endobj startxref 110540 %%EOF rpart/inst/doc/longintro.pdf0000644000176200001440000107355113454120607015650 0ustar liggesusers%PDF-1.5 % 1 0 obj << /Type /ObjStm /Length 5082 /Filter /FlateDecode /N 86 /First 693 >> stream x\[sF~?os*[6rرn H_}(uy25 zgV(t!E(L,l-\aL,|a)Bb,b"_H 5H @ՆBZⷃ"<\@S!DcB$|*~+O@bH9 ph kXZ |ԲZ@olԅ _B{0`/@((0N 1T~0Dㅁ b"LX퀜ԬK)LD@c=f5|;(|$:6xpk#tvu&S(HctF@!R(dTreaR Т^:a^TC ``@Z( @-8;l32`$8Ho Uz X~WC(/OWE@V=[-דz1` :oPB!·r^e]TuEi2ǧGo|ttZ4ZhrhVMΪD#am֗+Rd+LV7KT7Ϲ'///Heȶ}ٰne;;z;}W8]0nXG_.:3w;]n||rPȖ6;aͰW],ƒzp ?,aM%CX*]lU0el:~y= 'o^y9zQ#65TEGor~^/§{ѓ{VUuW]U21,gߣ7 G&vEq؂QV 0Hlr}5ɧ[S|ؚxt껟@u'<ì G올)Szq uw-, 6R':ZժώU]|u?_-׉}.瓽d=#3RvѬ56mQ4ez[ޝ7cjUQfvRw-~AGGsRD1llJ;nQf]~[WZ.('sr)b֟rL't[YQ^.j$xQNlE9W(41tZe7uXN5t_ghr fBOqx`0\݁K|7':Qb7@ 6b'绚`W ?8GzKu,(h6foۉnN:_Z-H~Cd_04ˆ_&=VɑzxR{Te^!>=D*Ceyi{®.>h޻&| M2"z^ľWѱT`&?x[AV2/UlA+(*oʰ&=Ri)tYo (܂r#Mюd[-Gz~H)S#=A;Nn3ȹ a&/Ps.W'% %^+^;h*? m4}E'2헏rSr:@R*H_FJo97!Dxodd󀸄+PIZJPHH1 溯@2 ]q|Ł^2Ď[.p2ƃDNOig`EV#Tԧ= ۂ@Mu/qx4XFODtN@DZ!Am8hLT;+|2YP!-b<p^khiPK( x@5.!Ű{(*@KxVud֐ف#(e%ҊdksC9X䩥Gd7hY ֳ=EDM?4J}5 ڣ'e?{CJwvS*[[yۖx{{AR _!W1LASUUR pYG^ahѤ LCR阏 w "uK(8DF `xc`Q-et9dv}v\ XKa,^H@P_䮥`M*]å!]:%(uPuCŜs&-[p:IIrE8/حw")`fuMji(KQJl:@iD$J/-Y$yd} :"r/\*%ʼn!*B/ SĞ9W6.0[as\"M%O>jjMw#):4\wLc R( ,J23+$h@39wE}#=L1Z:hq_g:P¬5AjCN5$0%1"QqQ-3*i`+k5,'Å)Xv:DLGv{J)^BPAcqś@YaPHZ`YF]Tyt/S#w9W2iOcrrh#X6OR(7*6꛸9oyFmsD b=p=vt<*l)44i+nPkk ={ f)[eA i5C0QRt`́5@=#*8$&$TILH (XsQPi]Vp+O"zpkzm؜mP3Ja+Xq<;egϹFSOG{Je-[7Po{UJS{˛6YA&L-UadMR&hZLRi4Os0GkLϮ(ƇWrR.<"D7lӡbp"aTrVW('G#EEbJwD$/v }cD z=F\){V:k8EI31l6Ց7jV&*Mgq3:gM;"k6JIp K턻165iO=JG]P=Mi=.׹dy"ei( :IQ-gJc|&q'zY/ gq'ʹ.d+𯭽WNWմ?]5>Eop=TO8A ˗im;G ϧU/ڃ `?#\[~V#nl#{ey<>^_.1=~q\_Շzտ&a݋&"ͽm4LݴmX՟VDͤ΁Sa`—]q=h X+pgJ_'0_%XU4[ߝVyjo)PVei v? OU%v޻{qO- bpڸi880g$jSm3;,6uR2Nm=g)|)} 0aDK:ZV|,K:׫ |n)*ښ;}I]*(:fYڀ;%v-ؽgFFz%J]GLw~}+7O7{޽zx~tN/ Ĺi|&WX/isy7֋.~3z$Q=#|V ~/QGvuﲮNpILDzKzam9Tendstream endobj 88 0 obj << /Filter /FlateDecode /Length 1100 >> stream xXKs6 WHT D8vƙq'l{izPNG3i}jN6nzP$A#ы32gJ*+U%*Qo(%s\WbڼN\%^æ}q^ xR5lfAPkZɬ! xVUZlIeN+//*+IƩMO_ie;r[JixEqxGz+ D/$?q.)ސ5wQ 6}zl}@JѐBk&<_F,m Jz_Թv{{WxC84/ˠ]+͸ϷPx 7UQ;0~g2W@$hQ%< D~K#hRPhX 9pQuܛhMtρ**GFB ,dPX>[޾>E7 a}lh_y/ nn/ JlHF1(I;J+#ݬu^x\ʆ@akxG7} Gp<'Ȗ-s;R:E6IHD/=C*o"hUM;IssF/[[uDbMMכ#c|g$J]k/B:!4bĜK=ʔeLsC̤`vO+(# KF̳/$3 ̟n^w24N+[#K*5W͑/vomd,"Tކ>sSƼGN`|bBy?ܜNm?M8B?nQB7yKB׮vL]<MIՁ}1~ SE􋂆J*f wDm f ]Gendstream endobj 89 0 obj << /Filter /FlateDecode /Length 2174 >> stream xXKDϯhr$b\? V3 # 1YJښn4-㹯ۃ2D#X$]{zyT_$vSWUWYbWOQZ;FW.JE[jm ~55Wk]4|z,*Mfĩu2K jm8M4 V&)$|->.h7 {-5*҄U˜ȴ@/ X&fw1*e:zy[n-%`ߏ4@H) 3G⶯L6jLك{L^8upCmc=gg\#_|Oߑzv>m9QS-` Y{_l1Du mb50{ϛ~w9Iø 4e)#^pc %҅,3݂f5"{63nY3mE`x2F4#HxuINT[:ϲ"B=H.U?ELEɒSEys+ Zg z/N,)]>Ԧ@m-ʘOJĴrL-49ԲLҀbVSTd)u? p$S 1>G*x@&\Q*9{NJ3h'NbСN]Sv䠚ti=h頊*&Udwwa:̓fA8A7xx)Yz4i$4(*%Q1]h(%6V40YO"ɟ3J9t@YJސu 334Ħ7FI)cYBE;Y flj)/1q)yT 7#ԭ|V+86үByĦ혇syof>O :<_˅D:$`~;䄁{X \PW\k$O<,ɢлsЩ Y$H{\]G {qa!ːJUi`čprXO߯A `o '_.liF.3cAGOO~:%V]~ύii1d|q(6}ndPPK^ ,M@.|viρ( .Fk`(˥,do˱$d%CИ4ax)C 3w+P 73"?iQy9GѱJfTEu|Ċ&$w~q06^* [8˽^f&/>A @ U6[~ 6(8V(ZeΆR}2'TQ\`h֟NRW&rF7:4i-r1IJؑdj_.URgR :֣kRő /ǮfKBF$nNpg'ȡhq} J0BRG>N<eձ!P \+U|-Ze~ 2Fz6Cm Z(2/ŇO?> PFҌDRn`K[ZhDXI!aP(TA;W`=H=/`/s;2kĐiI 6 6d:ޝY7ml@ *EJT%i;j^`v.=UPǴSOɡO5I=V י|&oOg9؜eE`n@εxe䤲b#|?wX7ɍ ?ud"=\'SP 3qƉg:K|]Il\679,<!Z./@RR73j1Շ4i>X.}Lf$?nӏ)VK0Q=pi kRDYl_Ln8$Qr P0Qy/ poiE: ;HՅfry Vy*.|NU\~<Lk;WNY@4dd#kSĩ5h|o qJendstream endobj 90 0 obj << /Filter /FlateDecode /Length 2128 >> stream xڽY[o6~02ԍa-ۀ- XmԶ\N%VdK$y>Q|vR3G6jvy=iei:2i.ٟN1&h*og 7s]u5YF l md3{T"v@p/ 0ب(Y%~$>|~zy%)`>0|XQ3c#Ioci_{=5B|O-KQFhA[b*Ց&R%R呫QՀ74 3`:@L:o<]6 KKyŚ̈́Vl$(ٖ4x_cx}s~~܂uwNg; *DSu$˞랂qnLA+%)+H,Uj@&t?.88%J!A1/LX }c,E^Q% lP.Y4**L@)^/:++~wSܳ(Rf] kWnx<}O%nY}+!,T9.$z6!Iyױ}vj,'K;I1vA5O= ԥiؽ≲l"jC(8$Iکӌ'JLEAP9V[\(STwKJg (v{Nr:7w쎸ydeq.%2v58ue Nk 6/IO-CKP (&RԐaW1>ܕCB5Hwt솪Aajǣ*d|L4@mcp ϯyၐ`duœ~C, ւb m[¯~:wD-8@/_Z2GU" }(\TV.:ܥZj|`Q"#7 ávz #Q@׃ED\婓.H*};aGIZdA@p*& O3cXw^K'vj}05Vll=L0u]\5NHqmފCл cܖXѤdRMkhmǰvO2K-!&޺ K`퇞A3llHh glސŨʂGN$f'@\j/ue=dp|MJx/)`tysW nOu'Jr͞$ks+Pyć۱ι;N9n}"pDDmɷ!U+nG8J\aRf5lMJW> stream xZKo6ϯc70͈/ v9!ǿz)$^U,U_}UřܼGi'uQzjQnRZ)uLNlU9}-?vv#]ln^~n>l9rˆT]xO3UM}Km.Yfa]LpyͿ&d.f[кZMH&;СI{{(١!}%C޽R2=`ӆvs3ZE?/=bbJ&FG>3(h4BR!hFެd\Jϴ(l{ێ5 4huSN} 9Ŷ``XE[]KZV^`K/>ԫ`xxf/[zPL6m0 :s&z$L{'jbCTSU uSA,IBh}{mھa禟7tϲ۰$9ïCdžv^*ڏ3-7Uo [`}`ksej|K3Dw٦#[\f kzON  2X &xLG ]k8 ,>h!$9#2Gmn9 [Ӳk*_ËouI_]+F=+0DDx=~oXwe`qQ4{\*S Yp܁kQ׽(b-: w{bͮZo<6/ QYW|6vx4b}h#Ba9|$]G7聏Y(4$G*got~町@`)iE)'%g5g~(dY fK5WDU Cyo勇TB J/ -D}b\- 묭PB|Qs*q S_]|cny@P\7uvuRi D#b@qtNh,;yBm˾H`kPh %,0S#B-}l -7dˏovX'D4ۘq΢8e U@1ʙa=k:iG5kDvrIR%[;P;Ut[SH(EC!$|Ie^8MK\uajZK@TGiv+&qZ8-h%CV&m%O P_)L+3h";y3" Z`nL%f K͵&r'8 ԔBzʼwR_8%%W&Zkf(:jX t1FCShrү@/.NgʞAwY&=2MofvaWAsp?@tU]guNY-*]e"t!d)&5o]-qcq'ѯX,˳%'"1 :O3ߎo[¹ok'jUNޮMU0hκ%z.g~u.")cZںzܩiq.O"h/ˁۿ> stream xZo#B/ЈY~- 4@\\@.{-Z9|KLW$w8ŋv&k֭]\ΤtvrX)}B7nVwyҔ8u*## XVuZU m-V t»M)3suu>k}Ӏi[Weޛ+YڐJ5hhQ?Np2NzS"IxnC#7lL֦DI$IШM@C kZrwJۣE4^FԵ-iY \Εhh-- ֿiS4D\ @l]YQ墬N=F.q Th7].\jC'0O;)Q٘i%nkha|kk>FX>+VXR4dεÈd(.A.\Q|K @2 >611i1q377O[ Ӳ1ٴ^f߬' [s 袦 _Yh3ƟH.Д]%$zSNTVHv_v T'pºQܟ2-r2ԙ'y8Z|^k#0 "zoث*k^8&M~B|a[Y#brt^0쵦"(yYZ"x#!'^/z!X^_seugCb'F#݁\l@ܫzY/ P~\> 5뢢AM1Yc'N%bwO gd :5"iROﮢAiNcŽDzo " N.&+{wc\עQ-ئe{}.S({ >0ͿyƠOJn m)z*' =Wa+B/1FTWOz &plwkm$ mk 0pe]WUm!f,i9^<RC*7:E}{w-W-("\OX6eI>MҾl] tORc]}kI~T ϶ 1=1*Sa[K <_ rm"%r&UڪFk4\"pAiNu1'h~]>5/$"3 6EI;/F6BrL "sb'6:s0rKWm~`GwV^֔6hM{d%Hq?#.waQsߢ{bV?RBuq V *Q9cH xE]F"F:~?FO9s3K3WdQoxW!6b? S=/rClU5YlܚV֑hXHȳ,)p`8-wh/a,ULa=|>c x ߶/yJr?meй 8sm95g6DAW+7f+Vp_."O.F zTُ_fL$1_N&P{X'Ž-G<VYDBGYJH*|JLJqHXO%;E(GوOY%tttQ(&P$]]#7wG;7b }b@_]`^ǵAc8=fU7lы&cJn7ᒏ(!{ ֎ ɔ0tGB@niL~Wo]XP4ҎAk !wxN1t3No#ǷoJXj:T5 Bh gPkT/8q~yJ EQLby=!:'ȿ _'Դdj2; W1lؤ|(}\%4( ˒hHa^ VHuW!VxD pwR.4V~I(4}{JvҴE"519~kij5yaQ[߶x;*ߎcC/z?PNendstream endobj 93 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-impurity.pdf) /PTEX.InfoDict 29 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 31 0 R >> /ExtGState << >> /Font << /F2 30 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 2229 >> stream xXK_"~? @D2#eX c$[3&D(>uOu#Xp͙UQڛƛ7g LQy˼?|~q9gl~|q懋7/ۋחm.&wynk4tg[XͺjV 6$;VLՆa6ۣ>az-we)iٖއmsƧ`®a79Z7֏Fq2l-_rWd[K.ZlcasmY]8oagY ~ȶk.x|l8 6Ї?„M.~ }eax2LKî6a?|Ûc!3: 󇐬~nai'8?"臝XVOP:Ɓ uO#d[7Ɓxcq_G|"a?pG?S7 ß ğ''J%;"OGE/d|F/dFˎ%?K~2?"?WD__%?ß+hrc`Շ%?Y?/U_ GI\)|ԯqU>#WǬ?g窮)`Y{;YЇ7YJ%={,z}JJ{?.^d\И棹hXQƵp8=>#cƯO?{Pp^}?|xf6?vȴ*\d勇g鳣׫fO*ߨMWe/<^"C( Ҏڣۢ qXc$ɇ5>= oyOZJJ{Ƨ?~{䘤l!Ǣg{Rh=1x+nNvYOG-F\Ȧӣk_:!róҌ!? kO2%/TxE8/o{_|g^bl2A f%(Pj]#VP"`F5%PRG" mhUD2WV)w퇈ja6qQm[D!Q쇈 q[DIQ҄SDͰE3 IRQ!4 `Ѩ hMB"*{.ԥ~(p(jRѥ"Jzx(4OQ B[U!h(zM#ETSDєRD>sMETt^ǧmBodEh0"*J^BQ"EأUǺEعo%v[DCDSDO7E>Q~*UD-|[ZZSD?QEKESD1>(?Q/(E"KV_EQ+TDROEOWZ"j忊UTD"jQPD>QD~QDQDQD>RD|RDZWUԪ*VV* )}RU%&&d2L_&I;6u \~~-jxPC`+uળ4*uqvRBcg)u|wz&6uwmSVMHvB:7DȀRǬ:'(ux Y]IȋJ&u|+|S@(uԬ)u`Inh#7u4mu:ߐ*%tԡ#zQ%4@kTcm~xPG(1ooo#uߢgQⷨC_ԑ9ԡ#uп u0~H/R$u0~IyQŤ?A`:_$u0IoRo|c XHO/RH`$u:X|IJ,JJNPǣ p"SL)i_t&N  8%j" zs|K,| $I!p{7?[Egzë_`}sUnendstream endobj 94 0 obj << /Filter /FlateDecode /Length 1783 >> stream xYYo7~1<C6E}H+YURʲ8@aH⒳Ùos*P _+|sB myд.Gσ!ʼnT_A45lWfJR*ZdɌS":{|qdjiQelz:LK\/Mp|d*_m+9.R(!BD0e~ ;!&9ݚf`S1Z+׈ּbY [DQ*vGAJ:nLbuo)>Ѕ&A0dص$wFF[I鮇Zϒg"] Ud c;9~ϐ:hcK'B+m!I `g8j~|.c%RHU|αpEG(]{ R s&Ҭ=<=͋T  W([9i@Li8Ξ]`a`:;2'wO·B*N08Cˈ_ڧ˟hhkI.ٯaXN0T) CRZ0V+&hTgXKxnn$3`yvTҰС{ˠbp\BSmDa %Iw TCyV<'zF%q|0ڔ40o(T맖e?ڕ=*iNۦ䆼wbU|y ..@{*01ɪk~y߷RKb kk`Ht(vju3:Lv%j #ۄ(q8JլiDУCɚR[PZ;jtEpٰ m+j3/^GASŭmdM7(ȁ@VՆZu-%!j9Mo:>rYN;%斗K{nAf$ϋ-YQ ľ&` M[ګ \ñ/VtoeϸG7vQi5!L5X y/N:UiQެEϦ3X d*w$T((J%B)e ^3՛d-uWg] -|F:.G^XvPK%|ǩN{PaZCL '{ճvKPpcBQP7?lD6*mXKF)|_Ƚr^_֣𵿇oÄ]/IYҫsھ! +R/c05-⎯>`ƹ8MVNv;%+clIqDKJK[[/Vb@ik尌(d.Cvv]SVk۩*skE(46TH S[AQַ#ٰ£(# iipFW@R Wф$5@8[V,7〨}znFѥ1  Wwpſ)endstream endobj 95 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 96 0 obj << /Filter /FlateDecode /Length 2866 >> stream xZs6_Gz.B tf.:w~LZ& $(ñ3klrXw[R5e׋(߄E2.,.׋BeUE§;;}q ſy/L(: '?k_o._>x|e D[I#rdafuOXֵ+/_mQ.*W5UX2WKS#7|}Kuҭy{Td{NVOoA*WvEU{$x$]Z5$?Eb8Ѿ*P16 o}UODC;=o=-ԾT5X|4lV׽Sb)!Z.IS9NUVG SrP:HVRxu" "'#_DnEEnSwᛖ/{ZI,֍ȋDZP0۾;+( _hnGh]JYڐ۔SCys5N׭EU/BsԦQժDxEG ٰo#:*6ބB#VluX2ߕ$_DTӮt#q,Lֽܻ36zUK"$UJ 6vPEw>+t=_; ;g4;~Vm 8(9)*@BarL\5X/R<[n[*SU骸g>ݾ\Ssུ֌X횙T ͸V [ ʥB$'Lw ׋in,SZ hHxKZ;N4@#Ўl51q5|=[ζS%1 {pat/t;}1eQB?/7F7x$>E ?e?@ P^chW1UUK hbC&4xv벎nrI І&jٳ$[ZXg7O I"*n*e05BѫrȄRoRWu;0f΋[*{1D|!o $Nȋ/і ܭY46h{.QU]`}82TR9$daOifUpNZ_3VC ɥ a),L+SbX΍̴̪i_?5Y}SZeW/f%EB0uJ۔wOܹ汝1V({@ՖymrlJxApP+2}v~2~S},+ΦlsYU7e[D. 0K>jDkN!3OWV'"*`& Xo%Zg!iLB㛺x?V geHWpvL$x#k#=瑕GN?]ɸv'Bw1Voi2dSk,w+ke= AgU.:|aQw >M]؀ઢÆ+8Kۘ$ 6%FX `2 /ת!R$lH0uoBB)6\47)fQj9V::CgLGO6R1|qx\K"e7ױZ7d!u8M/trd[[*]U GH/B6osLPAy L?1=Oc Z:?/o<Ɓnh'R_Ћ 0?ja>%3~ ҹgx&Sɦ$"jlSc+N>96 ٝ44cRӮz;iǒȿM|/Ag1U"Y֐6JS>ncrZ Kb7]ϒUŮm/\CbII"`l+Nʦij>Yd:`; CNn׿/ & 'zZ\<.|Wqv&$f>XW1?@khQ= | -|/yݫ`n`x}@Dg>7[U6WCvDFw!IIVWLt;'u.c OqPPO8/?ẋ@caxDbsʑ3x pRy/ճ^>Prendstream endobj 97 0 obj << /Type /ObjStm /Length 1790 /Filter /FlateDecode /N 86 /First 761 >> stream xZo6~_q-Doq( β[ڢ nEYI9vfE;vXN$9:1)Hw;~{ґcҢ@)I~VdDn%/ J[wD xŸ~CP` +5*sUI;c zGRh5ju/OVNBYтi4HӬ&-yYU1%R\Q1)e]CXIR&Jre4D!B9l"Tl Қڰf"xv@ CֆǏЖLՎ -bfaOFaxF æ!u{rF%Ս!\6ƑlUj˾< amR{sܢ&uEY(:rg 9ONS\LpesmFH]%1-\K@݇_ i;7!{7@x=hv볏yLvtX,&X!v5/yZAZ kpx%Gop<o"YԾӢ<,^/Ex3r^OyUd)E?Nٸ^|Uz1 o F<k|a5j\ٴ,49zAU1] #Z̪|W53`*˂y &b-'gb2FUgS9 geh\`()ڟΪq~NѼV${'tr1H狫I@l Na趥AbIj(Ly7_.aLԹ?6 \^x2/AkxVR?'Y)](4Ӕjq2V+lh vfQm ^ ޹ Cd0TMʋ fgFSHw+rR[|#ͅ3߮ԥAuy4wRYmxiYhu]-w a+FvΜe)WtM~l|[ra3ەiG~L@U LV݆z771a:36ٚS6 LĄ /Bu;2iJU竓6;up1 [gւ?vPuRiP1hWHn_z~g.€PՊAn*Fśo퍤iCt ^M4"7o0?lvg)l.Ёu83uoǫ3±AmlZʵfdطdmI\WOf=+k7[2J_%4f#?>FW3̲{'EI~BОG r|h^O&L=J'Elz=OWJz}m5X{p4YS?QMi4:0;k@17pn:x diLJaMqeHJlܶm:+yMendstream endobj 184 0 obj << /Filter /FlateDecode /Length 2614 >> stream xnr X=`?L0=a v K g$kk;fR8$dX]W뻫7ﴜ*^UVnb`Rrc`΄(]qm}t,nitӟN!z>Iδ35~J[\Og5}=SJ[o?pQuE{wT*twQ2.B|RF<ȡ'3is*{ UET J(YN,,' $ʌm@f,A&``lHK-sW*pVT0#6vA3UäphMb&LT-^!ℿ,:!0JM^j('yHa89%Si="+;\)L$?QBBG1L@eA_'뱡3Tf~X,+7tItJ (ql]@e6˚90upb:&{tYϵ6H@n=:F݀ ܿ< SQڝIbLǬ{TCu!0"CSs-;};ʬT9SW34B-z)!}dU4!HWoS >R)H^D b p_a!Rp& |ޅƦJp|) A=Vhoх "ePc#vkYV2V@?a/%B6Jc_ʼni?xw;oK)%{BжwmQR.vd@ ١?"*P%:>AZ"Q;a.Y[._hK0P(*#Փ*ESW$ r)eh D-8*Ց_52)GfaJ(V3J/>#,03ツf>j@v3AV^3U1n7'*7Zp@ Bt7Jj1zb<(ЫSTGHi!+rur*e$>?_|&ȂDV E(Ifُ?^~?ᬄOt=)9$+̺?vNn5c9 ml/h$|OlX?Ia=7h!HO o]yaZSX>E{!([ GS3eU!!r 'l~UGByˏ'+}RNc#f?xHs݃ PG\ϻ.$:Y%v ڽ%B 黩+61׃{G=W$AIW(Kfх)ΊC2I3UVşrz*/= $qxt\Eʐyrmb9Ձ^(߇(_́a>!S6pq8CbN¶fs j rd)K ?Q@_4r<#7$%¨xMeT} m76feX (#~ǂ <DGn\P` >Ϧɪ48mKyږic4ڗW"^p$>z#F+1Ҡw]M@.CEX7*|C*EBOMʨ)8I%,޾AgMQ[AP`d Cy? #pK{9T/ٲ ~r{:Ry]Mt8_uDBR-_0`vUߍm"q. KoVڝx i)^~MX!qi=:puz <_^xv`e2Y |zERV1`Rm" R O-dLoɵr`wInQk} DO.&/[YEPg \! ]{+juqp4W}z`rIȣ s.@`{YtB2RҟHh?U~ [z_4Ĕɼ]ϵ"gzj#%z3c ō9R5).xō6VGhpFnC)cUrDK> /ExtGState << >> /Font << /F2 43 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 511 >> stream xTMoA ϯ.؞O)䐨Ԩizr"Z8TkR=3 `?]{}['Lj _]kxZ;{w]?o@KÔ* R3a4w7{xG0gGGs1ZKfoޱY6x$`Hxo $ċG!ˠps7~IHI m)Ŏ R`}؜-%`X7piP|{Ǐdʤ'"opk}؜m-Fτl"3٪F'Kк0Z&-Fg|iF<"RؤƏ`"X<W ]dw籫Dk "t8+HNc<^ Nc"`\nv p<=' l b%l֟gZV ]D ^ԃVxΈ`":߹#Hendstream endobj 186 0 obj << /Filter /FlateDecode /Length 206 >> stream xMNN1 +|q2$)T"70eD O*+[0P.&㈑=lOG1ZTp 2V~[od~Vϵ[]RML)2pHуu^f`~0"v0Ή^emv)3on[|5^VsK!ӱuKu𞞀١Þy9tKzendstream endobj 187 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 188 0 obj << /Filter /FlateDecode /Length 2583 >> stream xڥY[~Rrȹu4AQaVJFZ}o﹑CF>/9߹ëm9ZΙӬUYWie\5{X~jb>A-.:],ď?`g2-~ Ue qe3u~#p5tָfiR鬀F\Uڇ-ACq3UsSs Fk<yah 1je$0#<#K]?!,yG$”ߠi j4"^RZPmv~ij LG=ϴG~9Tp(ͣ gV0=7_oE* }iA+E .a)'yr$ڐl0z WV(K3V9Ơ705C'X:h;>gT8y0,q|: =dE{#Ț P2ɦ *ВSYo߻:[gU/|@aYUf'z^gl[bOfp@+~ z[^aLHGrĔ55G&M*‘cw&!˪Ru)Ŀ6gbe @\#e".tl_z6c i2(LheG( 7ڈWhz[f":+/D_pYwo~w=/[dLrLP@Xz<;Xwqw"h`M+Vsꐄ&|Kz3 O>=A>|S B#3`F.b2 2vz`A Gޘ1R`9:M<dzL Wnٿ뢲dN kst䎰#,@.Z\ O0EhMc:skC1@&֣\y&"K<538Dl#ci[0q,t|HL֫SĽ6MQ`UldEOk*teʬU|&tU*/,B+~V4lYwV $󃂽6YdtuϾ ßx&)?k$fo>,/ªʙ$4Dm!}?KGA( (5H[Pry?<^J.:-Unb8;AjyU+C߷>}nWԴr@י%>'^f8|Ǩ .UāAtJ"P#x+_ {|+%1=z"`a' wdY-q=^b4wڏNftxwj`561h8N.AoEW\ "nH+pl8IO+2Q37#'x}&> stream x31ӳP0P0T06P0P05WH1* ̡2ɹ\N\ \@a.}O_T.}gC.}hCX.OȠl\=%endstream endobj 190 0 obj << /Filter /FlateDecode /Length 155 >> stream x313R0P0U0S01CB.cI$r9yr\`W4K)YKE!P E ?0? J!DH" @ l%r38 H.WO@.Eendstream endobj 191 0 obj << /Filter /FlateDecode /Length1 1373 /Length2 8422 /Length3 0 /Length 9237 >> stream xڭeX[A:%cK.iNA.xg[3:׹ֺRYU sf`H*Hhq8%ii%`cg3X! M`  ;/:-@ t0H2C!vcgK- @v`TpPW: b 0[@Ёi33l+`[&#&`6G*fôA.66ƶ۩7xO3 P7C;q6gYgc  q)CM-6Nvf-f*JotgO*C=mWa@!]vD?O5 0B=aF</ a%%>s{(_5@o&.P7~?@S7qT`gh`]L%vX? /l&p¶"濋`?wQKarlL6;8l"7l+ ; [ZaLZ9`j~](;X߆8[B[50,G;N`߂afxT߫#!aEVN<0-n^i~1?lW0l}uUrChtx EcbmTF|M[G4| {Voicl㎫Ng3EǶϠ_/x&W?jf(3H,Quuil4އqQ8q_v<kyܾ.S£!ܭ)rdq؜31hOjOWfnYvCqc[g$|GRG~)i,l$IUjRҋ2nDcrrϢMMtE4opm.`dSy&X} GRbYnq';-_|GqTL'Dǖh[{-!.+"<D:f^&xh~JhgxUA%9v39*\j $óUs¹9赊 -}{x7l?cdĄ#4S)dh*jW0e6pgvW_]J(~3Ma?D5Jg^#z4=)2[.Oli씍&RjP0aVh 9*zU=OGrGb!ykMjE@;4cݎ'"WXA{4 as'8.IRVŲEԥ!H <#־?nQ+t[pr~!ِjmQҶڨ.yQ^gYHnxB;$ҝ>9>sxͪ%7ݳkU+OPB4Ck _%xl"3X+VJTdJs4M 7@PSkxXqhuyRJVIA?Z¤/؇nD1w8O# -FnH$ٱ`ɣ]H>zJ4еK첵~Lm#.>Ziz!a_{+r+nVpP7A8_26ʼn%:uOϹ nxU%Mh/ f==m cg"xZH4b=|"\\9H?qQ<ˏ*pY5~CN+j3T,u9-ܕ ||p4__[üYR-;ș6C˷HSy+~2=]ͮM۶QN4-Xp.)qlҴ"7-վQvP^Y;w|Co.S3_@z^|NlF4G+׸IBޥQRzJ>\Gyߎ[hԖk__\ҍl S!0Ǖj%$h ߔr^D br\Y)>A1́ f2"d)$ƍ+Ae/s:lcz8A%" H|w߮jz]g͌b2 # GIWD'UAL1s+CYNo3dG8Yv ӆ |ÁfY6q~+B-^ds؈(@8z9@iDT:vepzVjiR5J;[OSRq1$qVQ\u䏦}:T 꽃t&DD*W~hV ѹOOS)!9-MGYb[ærŭADS7m?I-K'\%]>rN/Wc2*k)^Js黍ڏ0976No4<)#-ns"A+qN܇^A]ݢ8ZJ`j_:q&Owu٪'CQ}z>U#Ok$Á#V\Vv]:lL-Xtp{LpM0mHs;e/co,֭ -g@'J\o)b^65 Y^ tk] Uw0e', cR38Γn),Fՙ5+ />U?z*n(#eXmVLx P-3Λ`vQ+]0X"^t@DiU)&p}@dZ/QXX )b4ut atߺ"z}!' *LK~c?#Zrb>1kz*=cϭ{~c?;&d蕻]B\ֶYn'O)l:Lrc>BH! %2U]6ԆOmS #d3kdu\ g}[&ăzD?uƺQ;:ʋʘL4 Eoڂup] Y~{7Swb`,3X^aĪCnb,.nŌqnwf h@{,Vg%{Ĉ JU` C泱"r~1rX-Ic[u1T,8ur1IJNZ5`iq_mvHIU;U_jZQ)k<Ԇ1gW$c㑩u$2̹B0<_?kgh-%}W6ml@B=98sE*sCE<4&!|*ۺ5N|w3g0'Eb)tf;43/w/S,C, IFGN0REpݒm4Fh(s Dt> ő=brAaBuS8CQ:$܉*Rks/1xg >*_"LJ:{%#vAKV9BKSmiQ]u8/Fa:-dNۢIՂ\aru'(tKNJ;|V=h|oJ 8 DYIXtz \~TD Fy,(ǙpY] 8BR-&LyZz[bei.E@!+f.zTz0v`in֕y[ozXPuP꣊nX SU68k}[JEenR-L]*u*"ɏc)s5 'OB%!tЧBqH׈:+ib^R 08+KR]܉TKm(XwY pwB\ԯnMG>r>Ѝ;/!KB:xZ1 Ȭi`80#;IF/V^] >[]j>D1럲=r ^^l-Sn&9;5O"`yA,Xr,0{F2-qg/ȿ)yt-U/\<`LixO77ϳNI&.ul3]#v5x29$s?yG >tC @$`lS/TSV8}*\xx4ii]VQ+08Z'zƃpd9#[k 缏*YJX=mav;鵏=/g+䦑s14P~GWd0B"6 M |>Qhedd\M(lN;~Dv07XRQ64ٵtYǡ?X=Jo}m"! ig%_S;,TdDH"1%>E1/nҐ.K޼A8#6ON.K];Qr2 7%O:b1!=- Mk[3OL2̾վy {_l;I (` ihzL*{ /P1PQ ~W}Hn#YybFda 3^me'{..UuZ Xh[jn;H,9:wPeTuo1 gQхCC38оENpE/d^jN^`c#zu.Pet7.}v((TrEHpX Wxc*6C`f馟(u 4'm ,kB XǛ~J{Ŝ1mRɖQ?g3NYsUv56: $mc>^FO=v ;tgu]M BbphuSyQ6c7\)O_Hv$G]QLWp\o5(ui?> !2f 2,mԟz|c#DЌl_zy&ظ6“X-&O)0/:Tu]ٰKT2Zi,3oK%R_qyS+G@P!Kv~y+|0a}yo))i0`Bmѻ-r9R)mWR,~ +u!>}ek,D8nd}_J{JK 2siZ}^<&)Yi 6c0V2ƛ^d$z=7F$3fgң- J =w|$?2oLp5yUc-+PQzeJfkf8*++*)TW^P;qxjljZFm_ E.GWQ[BKIUa3 DU"0/hWhDx~F/ /? 8ڠz^r !&S ,yC:' fUْuv 7C6*ؗȃQI/!H*fg&pI(r]]D R C*ou!n#F 6b #'g$#[H:([^"=H, +ۑ(?Iyg_r(9ʆGm{>Ӗ&b= ID>/>(p bFf3;1ftA !d^6HG`|osK/Tñt*R6])5|ʡq&IpMN[B[ml_Cz^SVld붍Ȫ 9BԖ1 :jyhfb+V 9w.ONAk7sƢ[N]M-'5!U$RTC8 X}.hD+?R";Y$UxILe~^ͥV07V)/cXcwdJ,K$vn>Qsӏ]z~Չ8D[֋%1u,h) YHoql[JS(&;F5]W`49f`KղGvg5+恿ׂُWD#E;e(x5ꍋL(}=B֟wNʬDi-!m3JI?p6B";=3)boNP*w"Pdvݣ XP= z(3)'& ᖘUZ$ƩKIeͭg>.x3 獯+ zg]ºZ2jxDgh^&LS S <=cԍJboْN7{IaJbv|1Rj*hGr(XkKZIcaʷلkX;nuGa?8;H{Ld >eMm'+_.+||%KqKx͢ u҅8}弳ƁO_E'|d/ēj3ݥkof| vs4u y8Y;yR6ȹ[#FMhR@CNbxl 5|YSsx+Z&5p55挲ߔ)eT#h{c1zT+5Y]HgŸ^U2PZ/ψ\ }jaoig Y~PH}\x\j$ipX\(K뫍VB (i1IBaF_]mM&L@{nfӎUicb򸧶 ͫI)3!Ybv' $m:Y h]RtN6|liǫPtg*Kzr:O~21>BʉqR9O|\ņ묺:/nn.J<շ ޾&! +Nendstream endobj 192 0 obj << /Filter /FlateDecode /Length1 1563 /Length2 8852 /Length3 0 /Length 9740 >> stream xڭeX햶qww www/nERhBq=ɹZ빟;G5$-߃89ҪR\Nv = A $H[N>!n!^4zI ~=jf 07m@nI0O+@ rYqr,lAV6h(Rttl.+T *hX,8@P%?Dr`?7{Whrqߡzr6nf`sI+0U dafn 4e9Xo еK=95ltS1 Cb0@翿f60sq1F (|96 / `pHc78^!Bpp( Ak Ak55^ B/y! oC3aB~_? ;g-<ȍraumGc: scvLg}zG3$F&>da蛼=>QQxGb;]yf0"J9`3ל1cuMڧV(X+kmKP6|?Dj6w9Q5ٓtpsta  Ts&_#K/GI4D&9Mj&| 1 6d7+P[=_T3*DSFo#CtAk4!IbFܗbҚW._L(,&lXi]2ːJ| ^p;R9X߸O)#oD1UE I:igVQ lDPLRe˶T,&~խ灩r" ]V9xqCC~X!o0KkIjQȼ~TF;q\/KS/i0$2k@DhF!-dr>@ɭ׍Fz068!qI{qE riTgԉK`wp1Eogti0khAg&cuǢ2SG GBy% xS~$%yuϜW%M$EGU[޷]wtl[)nU(.;BIG"ePFiGE'>{auAS3!_}Kb{c  Iїp䘥mjphI*#=XAGR+SA`64?X[|<4H?maP z&:d I>7Y%_)7Stg.u4Gh# ]Usx>_Rp<<yg3v#WtWfҔդXS?t KP}JƗQ#_Sgr]o;6Vu6b ;:uD+x49 d+pTFb $fj3SLV56{œeF ,oZcڪFY ue@j', .)g:,gx Ԧjo:&bڳZC$u-`W $fNB֩m6 fi5Z?':] gf+;˙ُ 5&` g{\3%k ,86 ?>=ǿ85OU?nT6>'֙T7-Neцҝ6y*_|IZ#Jrtk=pf#`r<Ȉ٫ZH/siAM|o E y _a={fDtFT}Cs{Ҥ+W!bϐa])^8}?l¤tqk"/%v*zp -(9Ĭ3Hd36]4-ZGp#TP| }*C:͔;|wl00slm#> )hLFM fRhPCbCza Q Zk祅CBW\)شsteٯf+ҝ㢗nDzwfƙ\LE mvu7L(/)}쏧!A"(L<_ AjĚ(+3#<1?,$ϲdSq͉=704tXk1ZNäo\5'PrH<Ҋ ꮥM#Uf38m+d~LJg'FYM⍯PS0zh{;]W$632eC:a5!SN*86=ǞƼ(5e#% xѮo?$RZ3Nɤ^x o5as5E%, xF!9T{M9ē+IkdE%W9o->:⹷AI7=Yv#x_$UzYRٛ j -J!?,;TNQ|gЉ[dGE\zuJGkCW>ԘΈogn2%,u0#2Nssdu.;[}m:pٮдVKa!( ! 1W\3S̻>3g Vs _+S$(̰RI&#FQk P^T'tdh?"m$O 4wMaak%AM~}M27-,&$t&W;Xs'7gI6nP͸M̽{yNabcS[νbd&7`#[M Q%oOʬ8e6;~ׯiGDM"80'!esUz6~żO{%ׁ~p&}93 ydY0?cp{$wdoi\0<tKy HVH]B# -Q r ;UC`iɧ.8P99/zcv8~ N&9/$(J{KO@/IcG囊8'8/`Ŭ׆A=3m Eُ"n쯊r'2eL-گީ'tڂ:^z(# oPS\E`v8&3 .C9uM: % h "(7x|=@[=ߕ'W6#e6мPYGI.9<!xqM\fᓃ۶#^o j3X1̘88G5S̿8twL}RyS2 y0K<8o^)3 \t.r5]|oG BtlcҘm L*cxoj뙐E"왾ёnuYʌaТ~鶫V*p{`:,>1SŐ0 0 ߨݬZZ&y+@H;Z ?^$im$q.l$=LpKp0ե9Ur-@oэXX,$2ԧr "ۺ*s_2z6?OРϿ[& = lXGZCF$WUTJ6^O08t=#:W)܃m[~ۋt0QMysSTo׺%C#:sf6J3^#4G8~>S;m댥?yt;d^7\@Uf|l~,Ug{~R}evMDWF1nBJ;j%n'%9BBj>% }7,4Q/3Md R]+R$w<~嗪w®#"Jߥz_A)hf~ESCP!*aqsAR@W5Zvt?P#>9͖aE/Q<̈́B@4xa |GO Z:[4t:ѹ2(. WVQѿ&]3N/^rw۳1LbZos(ްsE pI w_RqI#S9Jb{Y hq:kD=>i K8"nX+~r3-9ZɬS<مb})1}%U= ׿>6 poM r2<~z+~P kٹjZdJYʵE 9®PKzY@2Y:0V s WIwO{GY:v6yWq㜳1Harnn1$ u~2D2LѲ䱇=Qʒm}8l4{4M{Όe tw}>^ѹwG"8 ոhµ\*[:}~SW. xrSC?]rvC `ȣLǶC -/HGGE!(G$Ndv#Cr"4{Ob-*0 @Z^oblž c?f-|=mXc"u.OdY&?hcu{^zffFs~Ԏ63+u`ƥbfʟA!-rz%v9J5d`CoA5y q H@lSn"a iF߉&?pl| 52.COWȓ%6.+ck{yC!7F(+RR5d(Lc_ՑM@>%t V뜢EBNe B~]Mhx`Vζ] Qpc勈L%AUH@iuH5?:v\_rEL;WJpj &ӕ 88vcd(53hD$,<"p z721#7k1,(o)mE}.H);YhהooY` /h|UOzjd-vYW۱MbˉoP51a;)Gڍ -tP~`3YyEQOժݲÿgS ]ch" YXH[JM@niB)Ҩð#)105=|chO{ˀ%:W0)68+7㗃ރBi>ʥ!VaINDuf_Nrdxc Du1h\q.|4 Plb Tj>VCm{A@H+7) 0ך#ٽ2B 6;>V&$-2&>b4Zs:tgOΨa>v6$2&dbf{*F7/"KI!ζ@VQFTg1lHU*x"! U/J2fP`[;IMnN8U,Ø |d =yXNfK7v|gڂZp{AՎxZhJ`xc,Rt(kňHr.7۴deoJ6O )s1AqIBȫq}dܩtXf>E$ ݿEcJ ϑR`u}1.;C6!J5>eDȐ ͞)[|o$$U$nr9lW{Swo4K8?x9&䐣c"/4 Ë[HEҋnPC)8S&*ļכȿ=j,4 DJ6љ ́߻@YkC9?8P#s`bF5p2;d3~Y03|,z o0`c>{8ʙ^Xrw)3Ē"[,, ˽~[ڲ?*Kl㓬KO`l"0c@UaWr!J\B%^~<lR#p|o%5*"lQ%6zM +׻kw|-)QTnRv)c웷KsXw&paz<`:#pXi1y )Zd&.󜲒q)³MS7} jA'5M+P*mc5D;(pbILdW>+. = --32쩳jmjt]HP!Hǜb"e͊| 5M/Bendstream endobj 193 0 obj << /Filter /FlateDecode /Length1 993 /Length2 2471 /Length3 0 /Length 3104 >> stream xڭy\ "$l?L02;P( Dd)0]]8`Ci+&d/:s"mR4 BA"[&d F`A@*Ha0W'[ iP٦ȺKeK&tW&V~GhƜD c;̌!c$:)4}{ؑ$,~lId`%p#S7 ?R\8:A?'H/6V %f ~mlң3I-G!7O"BOUdQ'`x,~jpM@ {=OM-M@[K%Ƈ6Fx[wg1/ɘAf<*ƸDG8 yώz X.43.{vY[`ۆ NL]=38w_,Ê>%-pMEG-c/$;]zSl̓r(?h@0DE*iىyDkF1ϊ$_fvyDmRLٶS_5ެ);&v[.=ɝE sge7/"WnN8j8#kq 3G 7hVkbtoV i (ͩFnL;šE[ݳp$p[۽sB`ňWTo [YԗyG;9̽XtDK&nY߇s̻YWUwH2X E/P~?XFUuò,Dy|fP-!,'G]םTq9vU!JH|2 Qa6mh{5^/lgfqB$u,S/a_  3vSYΒ~$S2BUsH엂g^?/7B>Y^vUa6,Mi`ح.Y6:+a) Kyn[;w$?߇tT/=-(89m=e9)ʝoO_o'`Ԁbjlh[nHq։L%f+]"/9Ҿz#+;D`>ǷEԝ nMh{@/wHɍiUߋeb/Pљw {/r 15K )lGBH}ыe5뷉"_nex mgv\ۻ{A5--8݂u$;0O/5+jgQ+ߵew^!&LތDy+ɄgehtrrNp+,ti7Ǿ33}lb@w)gr =p惌nXiXWmr]z*>1#8eGb[_p[Vz[ pen3a\c}g>͏n;>YknwM?QGQ_9\P|U_E{|:{XOsgM 荘G >9^rFlz2Ob*46x7U|ESӽ2aB}Fgvfb`IBPXHM޴w/0sۆ.N֮#y|wo܌Gj|q\*fwiiղvԝ5#zBɑ=cw9]pL{^,q NJ>nZ(A68HI~zJj!:ͪ6#yp}st9ؿ?ET. q D/ɔڗ'W'>8ժ Tͩpkc9PH;Bbm/5Dns8'_ϙst|5#/5{:SUl] ȝ w7N-(>-u Z|8FfpΎŬO5{/3ڴzq4V$T65Leȇx8s7&-oNAys- 9kѝ|IZyqa4dT|^=2IH*iTI['n#/Nѷe|oiN4>_{-`]򘫺>xJ8E˓լ(=80.]%_& Q1{V5l+?LHE7>o`ҝD?[7gr7S$G>Gr}q;4Z㿮\6jlp-:/UT^n禎:eUA4,q:L`*!6[ZgZ Uf졅o}U~˕A.>h nx{Tai 'CBw@rl}93%S3v4qVH՘m[^QtrYeuA[]F4 AlY52}kzBWg4"xm/QclO.,xn {NF?̫0ѯjOoja^ҦK> stream xڭe\UkXHעAbݝJH,`ҒRҩt7Hwww l}y1{R3lXY⊊,w5#bg+a r\l@n>Nv>Nn5Pbn +(jv-6/5Lv&3PWP vt2XYg1b I]`GQ@e_DZ{MfK7]\Zol agc v*ڙm 8E)^Yg#k5;I 6U8X͌V򲿿uDuT1:kx؃,f$G; 3 K7553ؚ8FFCB@OV (19_6 4s]8 ѿL!n H7A7+$؁ )C<,@ob~Ko4~K? C/GdX.`ޗt/#%/dו{94C^__$Yl/lMzك5鏔6S^zڸ1KR|=ˮ_r/j?a}q" bB^9Y9Y2Fe{usdbg2qO 7'hurf{M3v&Iu>9cEN)íA5)̇+hI/,!Ř S35:Q>OuPVkTuSC=N vɶN(W][Y gg/}|GQM)M `#ioxzOVKh))YGiVd:r|H\SZ)@(BAyqzM ُމ2ڲ7DEYL @+:߶vlU~|eU1&j_@#U$ܕs8A۩'9~6O+!0 dhEܮ HxͨW"PwLA(<`MR&[X=Iw(^n[쳃46)w+5fKjs$KBr6ȅq0E4QG-^8q}ſ#Q8~;*H' l|{1\$S /&$B`s^"ފ3VL+ц h`9^jsgh̎m[e?=]ٚ 9̟&ry~== dCY%x3'킂%0nv(ey` »ВB)SJ#FP#8QysR*~Qd*f\T(b)j>NWdE.l Yi  \Cf);(Ht>2njB(>G}_릜PT3Z&+bɻ_;MO"ձ \ LVB>199G@W;;+Ժ^XG>8 *yz #x} ̬{&,l1jjFx|3^,u 8zӥZOytOz}D`u=7# y(\9S _1^_d]2wS]1mp5c2n㨥FqQG>_#&G㣢aX!؅"\FSz1JnzQ#8˵bRSTWq|{gQ^M0r8aaG8J[xtIAz1dc!߷}"peM*kDg0E/YXS66L-BֿwtI [>=D?e}hښ+:AƓsnC2㜏`JS)om,h9*!Z~Gu?_9,vlab i(=Y& kmTXۑA0JjɚZu#VK іnI;ӏi4s5Th)geVS*$݅FOP㫆E}sy/uog A˳ؽ cV+`,u=nzw33O xa&~]P_Upꘕ#HH.L61(QO5j`s0佨Pm9 ۃ08\3ViB˩7\L#]z^FZq%;7|9<,f鮻CUeE2 9I}ƕUv1٣h:xTɠܝ#y:yZ5@<3sSj8H]MI_:Ǫ޷imp4~ޢߡ@ZAj+m 4VjBT$"h0sJq4Vzr+8ҬrzE㮳5It9ag=m*S3ǒ1ߕ %GTTg̓}9;a*.u/[_+UHzT4q= q:D!=4dޝX]DK'H-{ '*Rk Pl[o+`\B8%VX-!k!t,3Kܲt-):h?O8!Yjmۍ;H6tj =>F϶y0+_/?:WW,.d P "!ux9FHOn=)[YMSâUBHOl@^7J4em8xDN7HTF6~ !/4Rchט|0G +NX#Ddj)yHp7Qa$83"mq[y$k̞^IJx;h]4{6Xrv@ 1¢(|Ifg;R+QJXD3~߹ۑɓpJ# kقxqR3|g)#1ñ 51HDi9XURqg056$6.xP~#'QF~P>-1ogQTDP^w# :$|иXJʏ&%p)a^;br(tخ1eTWgV4Q;7ycqQ>!؋@& &Pm A[DEqAJ/@hB}ibwL9,^]5ZD?}$Ee[/{wAPx˶|OܾxP3j[ *F{$ּa5 Lꃿ~D,N+]Oi3R« K#-2g6ӛd3 R]B _\'^o X[s{M8< x12i`i#y8mLJ"lƄcgw}#SaP |2Hiq޴ Q̟~^-,*X ySZLsinI!L5Bzi%; lK{xL(xdp~FJzDd5;T<)7LjQ_4;0*V3 BegBzO(T<~~ |S&sdn'r ,#/X҉z¡B^*iiw\*Ld]땒!G,RgөҞ )LPǞDV=YxQn4&{C-IM\i< ٯD`TX.?w ܟMD(3Xwp~B;_WZDO\)@SV`8QS}OJ+!iqp6җd ]{@ ftZMͧ;~IZ)%ה\aT82jefA drrP(*]*`ǃ@N/VHЋ./xh2dTj  JRmb3KҵUǃ9*1jtfßPUٖ@!IYRA?󅋄L]7w4fȑ_!{xs$ dqkͧݨ@njVgP5# >*隚'eE BQV@QfYiФV&!LE|$Ʋ'e BN-2'ifSY;)7!EjfB3[#nuLWggbNKq\yָY2R?ljlOW1@68rW |BT/KM-)KNHy~=o hZ5_nwH6&L8ۈY#s6(Od{Վy<]0g[0e>sW)ORI5L&X܋/}XYqrl7G!{"*T t?s:e=t֝K˫_,=xtRetr= ~3xNxbX^xpcc Jy <޺.(O,k&ւX>-Sj4"?8 { 2K϶?{Sxb9OwxHJƾL#bʠoQpgxOG!3=[=N#ݫD.ci?bO7o`VWޝ)z䷊͗~2BBVrs }-8Yj9-ך|R[#0\ۛm^DYe8~~HuzjN<)rn{lkzRj݆r 1ry /}g矛:0mg&\^wy `>.>f<\Y$&nd 3.ƾS[* ֠w|Mkz+ `No)b9%؇Lw/҅ s'ֵ޴,9!'DQw輗f'˅)PyNW9 ?mm9[HE(k _]V~;A fˁ트=@eB qD1;Tk?S7Hdf%ӄ=wCBcSޕ7o^m!z=0)Q' <;E^u.8 K47V53۠}slBZ[)cbڭHO^ɑ /YpΉc697P܎H]?oH2ϑ6pt¡ٷ1#_>kIh'B{ >C@D,)i")~ IkI R첶B ,Um55QI iNHrSl#b-Њmԯk!(GE`$NzU8Y ܷ>so{ݟ_a e<ԧ_WE|lଖC1kG5&yu'* FȸgU(Puv,){u7b'kksYg4cPNf̤/&|R *˻I/9֜T}N:y6|݆{\, PHv5z̹`0I ^.bQj%3~TFUeϜ &W<A4t軭31'ͽ60'"ZwCW ĊL:|Bk{klw4ځ16&Ϟod6pstr+ 2繘*>gF*io,GGX뮖[$(eqn ٜ"K\3rZ Nn1Rv2HnQij0&p(Gh6|dCUQEIiڊPz "%GVtRٜ'+^fo)qMhAJCV]mQn'|Q&NH2f:y9KYJ /Cd >C R]w)j"%uYar=PdK{}9 lg 6]^ R3͟[,#);k ggd.uwpǃZi UQMc,=Y:FN™w\iNcthUjTHAJ?(ŕ]ow/"n\K2*g6 Te%|Cq^y~{GB$w5ֲ2N QL5, Bx֞z< E/rEYE7֗ ¶=4\B f)sRZS S:逶8s\|kJP\6L4c*N稵81 7^PJzj{$^Q9AQ߯sV /4iX_#zIFYX\dR9t>yػ7O<,qq_L^zЎxPu$" ˏ?P' '7}j\MHyGr@@p[[ DG0"7=//@z!`ޭQLppSZ)#O%$'z*krSTO WGɐlǽW3`Q JtC;%-Er &ؑ  %2B @GUXfԃPWFAlJJݾ.\뭈ZU!4{ELOA$Z2oGsL8F[Gc˝˃¦Av[68xVclˈK_Kr T7:)22tY[J'҉ZY_*H~_^}!SM}yBGvq Zj1 geEVIBL% &i%[k` ?'CGr?}j|r,[ۮ)3tl ڜJ ~ ՐdO}3E>@׷4sonc!H`]Y0&kN7E0]S@wrUm`vakZwJP %Zf%˥3ߢRu`ax.dYw0}ηZ' vAlat%[#ͪI$mk_ fQ Jra~ hv&ㄼ3%][mV&3rRSݷ* <_qc#9{ L!ӈA! *&AE!3Ix4(,+3~MDS;"¶^Xyfߊ&n1`UZW^ӅP$W|WLDJHw1(u܆Z+\_"G"=3ҤSEb:!Ԡ&Wa=cg!Cܬ)#s&ޓ=t{$="TnPi.Ls-^rGB ZΧch10È{Φ?45hBOtT0a Qii_WSj&`X $0ˍ֔9'샹UT3U)Ԥ{"ٷAqWe6IvHN#ffFvdD \AFϧGTteq_/(e]J;28bm+Qk (<Ȩ y{: ]wAO`NsŚRh:-4' s@懕LRB.u.Gw1v˝o}3endstream endobj 195 0 obj << /Filter /FlateDecode /Length1 1089 /Length2 6050 /Length3 0 /Length 6734 >> stream xڭu\kT\$EBB@v XN.FSRZA@JA>ss}g]3shBQ0%҉O_P "= ˣa'RT@@T,$&bȣ6VN.d0 Ѐ8Y9, pphahHPpìlD?$ -QѿPg\`h[Q?e>܊pwfIDVjJp&G?_n( @AahCaiӀAm8A6H+8 '(/ Q ղqXB?0$Jn3eUuO btu m/ooLUKi FC܉nS`  `nHmc(4S"[7@Hn M59c-q>  o-C!7-m޾7m* @ox+nʰ oۺm]6߫!'r @YQV,-hϿvÖ6; ,gP%>y㥸SۂjS%%)ta((lmޒ'UzY>O`Eߝst-M{;a[ؿ9z҆[#(KwS2;s}c;:OeH"2nVO=^CQu.M-I)>z2񐫤uD#'%ANRjN>=/B{,(`5I2t($ p~P=}79a1Q#{ӓi6Bz5DDCuvↁd,>irPg \9h<ܿ(`Sib4Vd;[wrǺh!)Jn Rqؠ(g.#,{y󚾂A?n&R(º g@< P4l?ɺ#)`x'tBZ \ tS5󺹉?N>A ]]Tti"g1y+RBЎ^VyIv/o˧JJ/|! ȯ[PD 뭹=h}=f&9mۆcwq;&mZCtc# UwDVN%6cXP\1\)q a[ r/%Q aVB7M}=^LqVc,*n'Re,sapмVy4ȽfG+ (p@-ew6Di'J#5څj~`2K_cC3pP vً8$L.#yx?ya6j Z)OAqz8Չ_5ބN)#o{c>'MzB1DLe%]2A:kQ.@n`1!QύUX..cg]'A:GyFf2HA5WCaA]{j |NeWdǹ;UXc?S{VcVztc4v ;<ITA ;ѷsH\c^r"{%9y[0ukvS! MƗq9룖Bw~Wg(n z?,^Vw|ދ颇{4 Lu z,w.ƕ@U!xtQ?]s]-C-#!ZI$&2 A[Jo]#4Ҙ.u'^whM`!|_,׉>/PɃPq ei=0`PU& ;jpi]GGDqyy.{Vn@J?i|!d1lv! R3ϒy?fJД I_ٔ Zs阆 }W\^A(5EcF޳k>B≳&B OB<@ӝ8I \Z_!{k&ʩ⸉#ov=|"?ktRg}cwO'wzdG`7{~hKRq|Dk.i]ìb#^BF >woc*`zj:㬮NgJB7C Q mAˊGphU)F Fky?@vV]Cin:ꩌ%pn\V!Ȯު;vy$M A1L=N:âr oLp*Wz;E`( u6b:sMlЗ幏nS$佯WF!|O~mSQ 9erǛe>{ \hF(mk,F_xYj$.Eޅ?m^ah8ebyh!MVtvVD6c/Ly:O&Nb֝kXʚ[=ĽiQ4M?Ƭlo"U0Hye}'1:V9IG#>Ob|Br\23FjmC}\ᑫgATs:jSө_>飅:/jtb/3Qw;őq.;]=}4#֍i[IA 37~fr\8\?v EJn4'48DGƈΙ(vƻ0V6 &J>7s} uz/[y ޼mc<90~5mxܐci]ԋ++ր_\>uBR| ^6nx_X9GvRv[_t)!ilN|]9zŞxhOGwÄY*TKbbaѶt)db6 BY\6u>MݖU%uC|ʜN~%yD%-*jay2'I6}`^Bg/~^ow sfݫ7!2"%`?}$^OV|P'@G޴exiIv|.f, *x+~b +G(TI^kO9bH,bnS4 Z7-'3>xԕ!WkUDLYpB7546(yGԘ[avb9]t'w=(igH 9Hi("FQ9؋9Հ"UBS!b3{O:LeTϺIQK7vi{4V.f`d)fznLbɻK@b:;^!{ |='3fy\8fd6E3Ԕ]Sѓ]K\A=f ^B(WDDCKnQ GKEj^z+V Nܭ|\xX*ٵ%_t4l}=PFE4V|fzZ*ގ~i5qCnwZj;X;>~Y3YŚU>?yFzZCU{kd(]@ <KSr?3xVgF<&YWDf$w΁@RUXOMmF1 %g.Ji-P9v8< N.139W;?ϙTSWNU08ۨi  /33CȁH-qAP!pP`IawO\3\`dI8"ҴXkTy;p']>*]kc[֩4csLTZ3pDsԓwAyUsbM oU;rR( Kb*_DnMUQd{/۞_sH*xY}fȓMߧ3" y jȸH>0_P\OB}cvJj2t1A[H|=#_k唚A(RFՉe}V`yW.0{E U%3klYB{7`a9CZA7.m8uUfѤ&3PLwf  >\_qZ$XAE01dYm;#JֵN=Q°.O-$&j/b}n$Ӎ(tI<?霨6 -QBk[ϖ\Ϧ]'@+NtbTqH.U$5t-|{s;Txv8!3FLdP}5c"AiIAp,1倣4 ugyܢռd{n;Y%\DZb2nv5^.)ZhQ%.U1%r*<:-^[@k'7%6s@6|#/'zv/'̾F)ނdp3upWtAaB e#; |,`BI;. 7|JFRCnxGTXb4$1JTEKaʙ ~lTbp+œ,i[2`̬`a{j7FdLiW-Ziin:tjp9o͗stV'oS (3r*qҲB%ŶڷM Il"CÏD\RQøޝȭ:g .tV%NMŇNNF=c t4K±'qg\L#Ƨ>r4;!{@sJ*n"woB&pX[ w?slk*{}@1k>7P% yJ_v,>]׋ݕZW:ՋX~~5g>9 k-Cݥ> stream xڬeX߲{P];ݭ8)V܋>>g>Wrg֬=3+w"Ċ*¦@q{;zff2339N`f?|)>)=#У>=#ȧȧ>;X]lf.g#K'W[3a_3G{S)8/PJhkjlCOG׏vabcdWҘ=f!?hWclG?>:o`W~jX] ?m~tϕ|52q#ݟaHnjk>dGGv1S%?9v5Vlcbt2/a(_9?,ZQ.@Scg8?Xۙic3O?>@: b:?i?*b,8Xژu>nWb/~ޏH^@X?{xӳ|xasT&__>m-ۛX}k -+*l'_>x1ԦxDƑfN"ir9Gi\<1.ump/ݫO*]sׁ>iTaf},I?b8OJTuz䧎[όNMt/u(e_Q &`~Ю\ڷ=&cƢ*o`(  ׾ }8 aGCgyL_`O}s;ki$~%[/1`5(^,bH(|z; YP͛Jq)QЯ7SGi>bq d oT_֍3s,grkUlo#ͬѵ2p@4a$XnLcg;{*1Z"X}C1ϙvоfm Vvax9~l*|Xm,& }q\`P' %}O5\Fǩz IA+_!"./ }J% =f]&ֵ8;42, q {; Jz> !^2(!pdG'Hl|OD8VcՅmQj.ʎkr\ 30!kQEw.:U%(~T]ˆs tfRW2TO$܍_g|xCvub1^59FDcгH|`[`Foo溇 BH s5˶(xԩKTƻ& rIЪqϠa9[?& f_Ӂk9H!p=)1CR6} 8I$@0GTb0e$h[h0p]甊|1F& jY gxo'Rn[nVق!\>~rywk-}<ߜO3է^)CT^'6ylfqN o%:/ [,k}fy_ϬbkX]`DS- \dcOoA{Ι?K ޟK჌\3LuV!}FޓGŶ.N:6h}[PWm1Ȗ\ )@άEK;co=ɟ `OpOP++ VVa阅^b}74\@Kz'wDJa}\L*9.z89֫wD XQ'H|&+*iѽ],Xi@}.}3?{4W)е$WMܗR^+FaM!*{|q/"(:؎VsE.q,ĥd;gGD{?]Ho/~K UBbe¥DG^˜3Ӛ&(!< 3R1@6S~c`D3 b_-p_#c)3H0Q?o뀡d ]:$eBM/b;Xv;yb+e;sz` q10񃉚ր9H-;&K( z^s%]"j܋gk BE?^yЖc4ƕO s60ȗh20R wzZ*?0+By F]\=&3{o|ӡ{u?e(Vx )k!Ds#9Mec<[ʱ΁_s]bPGwfpcw-7ХaA[" l_qԮ䯄+ ^rȘ=GZsm$ZG S Vkn50֋3#}cTURӳ )>-h٥8R)p0 ~R"Ihc~>uzԦ UAH hN#|q]FÞ?>8`H~X,F$Ry^VUbhOBds'OP,qRe+p}Tc7h1 CC=XGXO((¹W H7X|.:WI,ĵTpb^^,iة#-4 .'9~aS; CoVr5۷QCY-(oB㙭]wugy:]mC.~{ .1v.XN 2gQʮO/O]VԙN1,亞'@U' !4yE$vjac/mv<_h V>8t\櫍Kn#g :,1?j4%͓DêRkilw8ey9Ÿpuҍ MdZD% mdSg-^rྶT^82XFuvz3@~5 ()!.+7PHBRz*ֶYrNr7\T_µW[Nx|cyz*of 5WtwT]}ejF[rF!XW"^̘]#gD)F hyZLI^I\&_IKWr'mFtI,l~>'ہX!#6[p[I$%lLU "7\ |1 FJ$ipzXYBA _trO|UWp-փzP8:V+5iIB&w^3 X"=@veư >W -G(5/I%_E>p3"}[[T3jn?ԉ>H -F9Q9Ytf(h^2I2(_!& DK2(:z-Bk H>숻[v*gP;OrrZ^KrALJLYxP6eVDS=:j.VJ&;s8zܖ3-AtLM`9WTmQ Ա_{ O!GCĹZ爄t\nf{礹Zp2V6"bք. wr(Zb?HnCT?T; "=;dޏ ߐLi{VG(NRd}^> 9PBuJcS2z'jjb^a@^"ԗ%B o.G;jҌb J;]|T5A2zY,á>E_gIS@<ƴPxϥUXץ͘5bF艋}>c:Qȱ3J:Ƿ`)iXG|psS>%É4xOBX\ 8Kz0Î~@HP8*мy57lkZGEkJ.HMtcQ7U;!PINJ\:4R+ڽP8.;Z[s@ 7 x*놊nD l72f>=.m  ' U!ӈ;6M *nZߏK!]XMV" ' r2#eQچo" 7f*@=&7}գ1fd3@WfB8bYiו!"od[i> r}GI.R#Kuj'T3hs6xPYAՅ*PǶ-}^𨲶51'x9YE>xL,oP[]j*5lS>jdh KY|Qm&t"vVG]D|oqiœy4?"$oup08AYOv"1yZ[~ lv! ʜ@l6C X3Xd"Ц)V/:\S0SQimАr[yԬPGQ6s+6Y0MZC`gQ))ukAZĺ?GNv'1pWq=aci~iHo=[[L.!g}W  ~3- p\T'# `'%WIȂ+M"\6AG mB ЂV -X*\~KssnjE L'#C1V'W<')p\ ϰ{lmI+ujjXE$nS2k 0]ÙҜf\QƖJ+t;DJAbzM<$idMs08 JԖJ!0 e2-?N6+o >&163I=n7dg;.hR#r"/ѡ;[ޒՑ;HQԅPb`sFe%P{ Thϼ9bS0Z#fG/(G_ 4Qb7 F~fx&j#"kH7 G]%' Nf=XU{(_zz=/k ƫ#FG<;A=nJO򈼮C $v׆mO_?$ o˰XvdA7B@/!cFA< ½AL~e> BRp:8H1RC 2<"V4ka v׏?C=)&TQ)jMobPH</PBtL9 x~\{f2+О˓7Tl t=q-ILcioK!HBڈ`H0>MIlS8^Y3n[5VX^G_\5&+ĒHw2* l w4`tN\R{>QrDX_ԤlQvE3̄jPPJVq@LSNJUOuBAU?ЏA-ɛp`-MdXA+kǣ$Rt-C>],S|(&a iϭyXDV`|5MMBFpg!8ыMuē^[ 38ՖH]rۂ^v7 i&2cD |O|ʂ_gS"LG؁k? :rmb&2t^UZ< ;4k'9D*j5\NܮGĥgȑ,g胼CȻfx's W[={4eW@+ KOs"CB]ڶ`3.HY0Z-suZS\Zj_Aޙ˓VU|K2\&7U;Az3#ƫke}t;S*N.ŕьPް FKZulsC*|"*CM\#9Mkn܊9Dg.},'#٭]&A)9F|.MT_^I9W'o}i$n1(odK6OqԣfL93 *ڌ^zypL.+$v٫č.p 7xؼ$uC)< U /0x%6v 3jl?~ӑS1 b >M)Mo!\I׺')2?s,πE,)XaƍQ9Gȿ؉xDpD-@g[alH9ENSyjʒW=xElOȟf@rn T!Ҵ+ĬѬKƲ\dR#+ T܀؆wV67kIgͨu&#_] AZqU"@{°g|3QdnƋ(.[?Cė-U@ B awʼ`L_Ks2bTKQZ/ +` >  G:C 6nO)qFѣd!a3osUcp ygaxki; {jT)|D;Ⱥ IHq4!6t1xMfJyBcmwÉH#$MBFG՘b {N*qPITRST!*/cHc| q;۾̰|v*EOQr˶tQ0ϲtHP/֏Z\+W7mIc_!>:cqnvн;v<< ҉\*nvnn?fQ Zíoᕀ3>"M.\%u6<a+B<2.ӲRۼR<+uOxd^H_~ 1yd@DVFh9gX1@F_9\ x7a'Xh/@z'xD{B8I萎|t.qTAY OkP`< {OC2 Tg]ngYXNJ}Ѕ?kf%2&#j Q 7A[2i*V }ƹdaTl^q З ~ EdfXP-3It$ǫ|mV-WC[*,aAM]~;b`l["]et+5nQI_\.(9OU %u7?&i, ;ra{/h+MkJGb1ȱS ІŇ/[j!N];xkE7IPy#b3:bUy#݌F dšoӠ ;W*Tb + J'on¬gy~uOyѴHtyO{BAM !/-n̅6m ae 2mxDl ]*<ﴇcsLc\ȉqBsg@E:/jlR4"+xKYG)6[o"54OSq* RF% ZIևH k06&ՎpՊ@wOl诖/w8ɋ0"vFGQѶCUwrLBV!xmX=BqdG:Gr. baatd⊷k $MVgN2s'^O!P'MҿvCuSHOfwpJ&$g̕  qꉴA?Yz~i4٤AJԀ½.}/Gᡂ0Eb {qf^}badYAW%q(ur{Q _w ,N(Գ6A_S|."wOLI l_?BJ1ͩW0!6@ ^K3^\- !xfT:lvc\qKd_þu6;l[": ludtOD(trj'FA v_zha>&7H{}c30S)p(7J; *:p9sBȊrfA-j>liWtsSy „rڴm:H'{ٳv ّj_p $"PB74^(\` >U5 G6Lj.ʮ3 WɘWl4 {>"Àq=F3ڳn^dT"LtK14aPS_O;;$jgFad]=NSR՚/65F(%q|!30)6kw2wפ"Y40ʪW z{6prcqdL*Ye0 uD YQuX7 NLtBL40]'tGʪL,k*%] )F*n tku+r[(?P(Q,y&.Mmr?d3uyub .w~zȳfNܑpjA@-J}݁Z׺vY,~`~X"3|9Iy}5do%x'H'ÿF56$cꉘdZ<&nb3j޸3{Ch<|%B8P ]M"dTBL1WǷEGDrAaa|:I|Co9S)2bjlOP1hu<]`"|^Q|_h36&mAjWk˂lWu#ˣ0bHŶE/E<ɺ]l!pG+fshTز&* Woqd0VRNEa8VsoD{kS. ^GeKgU眝ǽȟHJl^nCiJ p?糺;ߗJYd[c~AAsܚ`ԺA~ 5 ~ zl^v FE2dAoZk+'iH+sAѯ4񷁸3J5 CiEj2g$w1eVVC(J[>;5pRK)yF̳RK#{\&vW^[64ķ ]ʖիHnF_[k[8{ՉqݙbDm4zLT>xMXax0A,_A!L4',Ӗ(o >"tG.T sE+4 ;DKj̉҇nǜ砎Cǿ))WOS>9 @>ehxtdowld Vn}7ەc,:UH}uHI|# gZyh77}%+fDBnj7@mˋz5Lwq1셁R[Ź!e{u~Ba~'GX0SGVXHZsJw|voҳVdT$sH#69)'$x,Jp{<|W'{NCZ,l\/2;V۶!כEq$0)'{sUo*nSkU8E2Vj|QSΨ6z,P1{Χ^+[o #тiF/#sFq(W\H)-9&qC `8y]0ø4ƒafh=v=h޺;[r"`J$e{1ʳuZv0VSS^ϲFsF4U@W(E!W.mS|̄Цx*ڣym &{>\xV޸ٞf֗I9G\[/ySG6~jxKO匹śq#t q-ͱfh 87Y".Qߧ5Fe|D`.AKE­hpA=Yւ U~:7 t Ι>fTS=n-a?cTM mSp.6ksDmlt0L"z/S;/]AItxorE㮼Եc`K=4nfr@|8LxkWO/ ww0cJXҤeWzI3OI6;9ɗ,7û~piYA'dc ?BkY%KTAl*?۵0DyF,Gʿqѕ)e$TO:Py矙=ߤq:}ҤހrK۔͢x?R[j8Yl${IсC3WҖ*屜I.x|P$Dgz3F`L b; 2Кըȷ _ԔfF4"Wb Qͭ]jI,I <9DPq[ILyae#m$kjxȲ'K b!Uo7APj^hc#gM($SW r"J5CWS vp}_ΛxY5V >1e[GQFx x07%'AR\Ru;|a@F^vصP|v>0$X̭Spǂpn\;g"z2 6P-G8̻ӜptֈC!Ti}H/|ܾ 1<&oknUǚ&ɲavOv=vH?}w.4_*p=5z][6^NGIEJWos,$x*ށMjFѓ14¶P Yuo,/.SJdjt\A# c=Vz+SgeքCa|Wj>2rv\cBπcy{' f|~).΀1  cWUl4 L޴)YϚK#4P Ր?C5M؟1ԗ6 frp3cD6Bי {#??_856L (ٝD6GE\Θ^^lhMa`@38(4OQɆ\.f_' 4֓:hgr鳡#  #Xk|tSB3=MޮG_yN ~D#2 #Z]wX_zᑻ;rRr&CТ\T8+{)#,O]Ld|0 tޫ4bJRXƘ=O~nVJNYIj_;?G#,ATn<rfABX('qR=.)xyef7G756  Įu[/U%+/8!_"e*71Biz6iIDץǀtq h:oIyN~6dnäMZ@)%gJkT%Hy_*]i=fƾpRWd75KV4~y禝'Il9Lⷦ ԝ>-1'!owF`JTk͕ AV,ΟQ6(=q -"E&|.fFiJ @ЇWn9^6t[z%Xac\2tI;J̴y5'܊/W #Er[^J3_ E{)bO,W6ĴV`⬩FȊVB@Ϸ͈\JO-ek\6ICg}utoA9>er~i5u䑻Zp^ZaV[ZL˴>ʷľR':+Lⲳ f.6JtHY8vҭxQ(,'qi=@QPdZ<3AK~; j q#,Z-7CEϪNSDt`\0~ Ast1›sACj,'oG$:nȳ N@X$ *1pk^e4@oczRn:l tMtR8#.+W>XEn7QWwYzY|`V œ^ iR/^IlEm Mt:dU 7 nl?B1D()^S!n$z$C.`4z/1WGUc*#7pYS""HE}'R?Ƕ~x ͰzYOKJ`ӏ/l2OK N`2[Xvpk84ڕ]-ϭHiGeS{ qjiQ@x$%J= &q;IUڂ(o֌pλ0(8v:<ul[x'KK0Q(Un #VHm?m¿-<1<~wB-UhI{qI'=6`D?QW=0fr:toEuoAF`A oN[~x巹;bL]И:44r%AVnlbT)rOK2+~ГMs R2sBa g *?,R)Tq &@I߭vwN5 Dƒ;~ei:I`g-.IJk1aq/`+4]5_p @%G//#/ޅqbZ\$iP}Mg\OkAHq|%e)݅ `ČknTT_G92%iOS7 +kj;N  azIμCx* g2Q/GқDpa759k3A3{.WՃ\CjF@&Qh,LzJR[ endstream endobj 197 0 obj << /Filter /FlateDecode /Length1 1161 /Length2 5189 /Length3 0 /Length 5904 >> stream xڭe\TkƥKD$DDBKAҁ``f`hp$$))A@C 3}ޭ>_o}YZs/.CA%(F 2=c Q p4J%GH]1pG'wʭ_A%$ zw'P0wo!0ð0 P;GQ 2r@$>zG0X)?-"Bx0ja}4Կ{ d4衡0 ߡfpU-wnrD"p/np a(Mae-u 5/G]+/ft0p/Hxf^j({4",@ A q/GAa^ NHfp@c]8@X$ V$EI $zAC{&)?$FG#u a !$V. 7 Q8!GQ/v-K? 0 $dnO0C& ?ws‡0geSVF{ A@ĥ"gPDŽ; y'F jYdDʎUC4ǟ!^w ̔&1--sz\>3Q rN9[=XNfzڥD3]/gne򫂿RLq]hU4%KH'!LBxE¦=_ĐN=p=|E{f:hy5eD;24D8A""5oqFf=K=9.JVND ˧B$ԪcF:*RM tzʖsSS'ٽ7z^kDT8!o%+}hLK.;0]ؗx-%>Q2{zVs%UCJqKs='w6b* ("42D-@ IrtE1߲,Pj͍NE+x[T_B58br\aJx殆ڮ高5-;\He"{l f:Ѭ&?9;2j{`qR;zc*n1GG)63KY[tP]wv}BF/&jxz ZqE? hPTJ T+(ɡS"Us" 2چumy'd`%^*tT%E 45a/Ծ9|zF!/ :/ƂLW9R&"Ӝ< $1|9y\bq@)\^ܭlhg͐> @/R>f0u랒69mcGF1VL-[`\FЏO_4ZL9;G{;#ʹ.m2kfgzCkkT&e%U%Og+&.OUmUb D~ć/*{~JQF+FE+ HN h.mĀt^[*P0_f1h6wk& : |ȓnF<"nBJ4Q]Nm+Epγ['$M9g>/4[ڡX(Wcw.,d+(, gؔltXyݿqH&`I^C,";;}!pMH62XkQ oBFæ^Cr414sk"2]lF[32 'j/!i3Fu> :ݸZ`RǬ鞝^Q0zHS#O[80Rme im2Ɲ,k}7^qU ř<.7C#I9 g+T5nT> U;ޭ}!Q|NCAoӖ.:0 6Og?Yb9*P-`9B@{H-2=z2Qa;ɂ29g,sbqnUyZli=[[U|pOkp)H#%*ƽ G"tsFLLj3Gy0UzDm.W׋k;wQv0ôQW=.:KPߥHf>ti)dH0> M^aX*7Co v2K^@Pjj =yk. T0ҫ%7pcºXFfŹګ:L-.Qq׈0HOf\<;qj$@(}4˩2沝&A M_F1aWЧ}>ޞxuIX+=p:.f?PJsE#m[> 6E̓Sœ76rN׏Xq h&_zCfjjtmuOv>7w5%pv|" {2;axg(RInE3Vd2% Q5kqHvQO[)BrdRMLE*3Tz6=bW;orj~gp2j7 } Ņ)KxnAיΰQWeV*\]{m⊁Qj'f,xZk&(&zFҌ<#}]p{#Y< x!^aI6<ڿ?NS !%zo.@B-Y!Ȫb|!( JW]nƞXYiX^s(#>ܦo F荭/Lbэ~̟〵W8_)tHY19;\~Q}k+s}{ܗےg)o~08ߘ.h>JeA9-ދDLvB K&MHءF Lj룈A7_05MN~ayFbfŠ63F_V܆qⴾ\t@AًoFZͧ cQ; |vK:(WPVW1BX>#t]7.m8%0I|NY|n@f%c\"є)kZVb6ajbEIXHP*=WBd V24{ΐs˂_+_AhOQ˽ {{˨͙UGS$!ފĞUp{zKDI3+f˞cu; 'o!?WW͞*=%Ed0W9uC&b֭G+^^ ܄i(5%ˢ_2^к4b ?ɔ=|ɟTXq4˛XqlғTgk%Sj]^'teodd?M}6hHlD?<`rSqwbmKc4@AB֢!*{|uXmm֗5x ^:k75nb{^yK?tq;O\rckđuJo Ykjmn}J=ObZEOѼ`d]@[u H _{{fl䊹H,pĿxIS=xnU{M{uh9Y/R~HցPfw55qM>>Fe,f'l ҲHwY>7(5|" _.[[|JW i+,.<`LSp\UkBbR+;oD^gooNnطtCNԡ:I5͉'ޗm=1k Y@?[s$-@IlD+6Dxn,Q(y=8ww^Ncc>z*]ʐe.K8̗ig =1ei9_ٷS}ot6ç ~%i{u!؅GPU@\:JŃqZ렄&D FId+xڽtJ־+:9)^~;"u;,!XD9ѽ2)2?U==d!7|T5ؽ5D%-*+$=endstream endobj 198 0 obj << /Filter /FlateDecode /Length1 1013 /Length2 4077 /Length3 0 /Length 4722 >> stream xڭw<#Ef(e:HV:8rs8HF!#Dee$̐w}_7BbB`i@Y `!aR..e4Aw`4Ja,!-*)-"F(\}ЈW֯ G#laH@qkœ- w w=vB`0`6$) = epvNjx"oxv(`'x%]\Y!pQvp4ߡ&i.j``[%g8 ᮊ!0=G[~n%h(Bo ]Woހ0f^*H[?q F|H'q vpo B0?&N q Ho@zCbW1{!)d7E@0x@|? @|(0 ^( </m( (". H1gFÑ :-p[O([pH\JP%>^&x=B6H\ҧ7iuʕK+^1UC2V)m֥9E"5t[/̟ OEy&E5#jlpZ[M:󧎄ȴ1#u ~?d_&_|{NYi<̾|nE!. ( ί)]m^8 %i U{S4% dSJ] g{1T@DPjFauq]1$uėg /Spθ\@*90 i~;~Q41UTTg}H^D8̴I F0M(כԠ*]067KIz(_D~&Ah.۟[`8,c"J4=`?7xoK5*ʧ5{V ɦnVP,Ǎ0[\ˆn8ךR+!ԩ0.vƱ. ܱmąq!kVwk"'6^{t&ku-,aK025UOsγFNu^ A:%]4&7]rKݥ.gdN2JM@)Q6{ |ncUJٕPu $s9QC2"^By7^UkH8Wh)pc9uE3rIHXz%R(FaԲT-&4⨨rrz:JI3EPd0w_Ty}/bscHo'6S&, &2j"Y&k r&5B?o'2{ `^ JV<$u߹u9]]ŶO@4(H}9j}Lg)of vS^zPᐯ7oXJ7҈܌6&gc.{P=eF>.(nd90NĪ;'Ef>dѻSbܢi885~. *T6>Fb(yo08ґ&ŋQ(AAGyxZقPM+\?n1/:XxAlr`@ Cn@7 [lJ.KCg6O)D$3쟪51`ަ <(TNJ#ɀv!`m{Ov{o,nfuRCI!9W$&9w|~Y=+6W>4e7iU%sd!4-W/v7{}?o1f'j9"^H*UHrn u]+NQ85S;ef1f5.YSg$3D.[gE,jT%aj:hNKgGlIh| ! Ń7V}=v^&uSb%o>]93?7_6(FO-X^I_cڂ2fRO|Fv-U 80 wi`>&s}6{UY{=g2{>8qcXpJ@)G =0g[vВ ynT/$_jq0nӕ4d)Qbʓ6 ix?M*6Y|Q~ԋ.rosopΓ[l?Ug(ݯJt .{BŜ"lab|gu4 X,LQݘcm0tb.<]Tr;/do߃MQGjVb ^u0-:"Qr_OWjXVE|p2[Wxo>zǥx#ʂ=QDud&r a{yH-j=eo*fBK_Vlv#q-*Jt84,%NpۓXV՛^: +yȏ+>y&μè]U5<`.aaW7`4}(+3F\V"ÉLoG)yC>ľTB$f; _ƫF7My{̔by E²†t0,t-w ^&xs-ER߹ EDdTko]EuTkrv1Aܪvl- Dcի?ocjôL!.lTNz nҡdV)U{AO K*-3Ij9+#^޲rm ϪNn x`jDaWyBfQN1"/QO8Ru_;p  X& S]g 3*VVrO+~sʀϓ?oP2endstream endobj 199 0 obj << /Filter /FlateDecode /Length1 751 /Length2 1212 /Length3 0 /Length 1744 >> stream xڭR{oK?曆% و)O&.݁eWL8P!1dD|.pD1@P,kIB1 ~6&".~=Px)d`)–?Ic,…do l)2#D", {FaX 3=19,HYkQ[9a׷ԓ~LS>n PV{0!jNO|6֧mK霮Ȑzz~$iެ\Xܘ?qn7쏼v'/j?zzVQEVfqR|Q&meٌ੗;ʻ֮'n>H9fɢn)/-wYWA;3TF]^ˏ'%><\naӦ/4շKS7Qm;O7Vj5{JGwlm ɫ+͐^a>a5M-Hzf .Wϯm0𻴋'wnߜqZڶ鄪ϼ.dUX{6,)}$Tm& L9~<7ߜ|;ceW:dF1^K~rq xoZU*̊ֈUq 魬o8izšvT>xQl</5~"Ԥebendstream endobj 200 0 obj << /Filter /FlateDecode /Length1 1065 /Length2 4101 /Length3 0 /Length 4779 >> stream xڭTw< VFFu>YcػeU$;{Q)B!DS<>￿}}︾㾹صl֠ &JJTHK Z!(e+7PJIAw{@DKJI%4wpxx:I ac4@g\+$AnB ptAW B- (RO=j(;4 7b]qH^'Bz)Dwrw$Rgz܌rF ã1n @ۂXԿ] iwjnVH */VfY!]_veoQ Wׂ/J r/ q"a!aa(fR7Q6h[ w0q &_(@ق^ Bp!n$Ks@~~!(2B񟼋;ncCDQBx'vs? bPaI4 q+,Bv[NJΠP?TBqfa 7,G_niqB}@_EE8 ( K0arqdp77C.@ Lcr̓7)hlm& =| |%E*5 cf׈&?~.1)++>T euƚ_`F{'we|}ͣ;^GU{Z\%y7,[]rpw 8nܩOMțХ'&VQŮD=No8>*IIAɦ[߬W 47ڛ)t\bo*XCa-9`b*jܰ{yHy@hpmg[05Rb~s-BI>t5ԳyP*OO^6;IzOF^c3UcodDFaFNb g3]/i)rcI)C½H.r6&)[f2=9kg9%K'm͋Cg:![_%SQyti4$ZD ֕갓/utOe(`ͮy)67_$9InTp$Ƌ7RoenCK muFGS7*6*KW_/~jEQcݷ~fLt3Uw{>]U9Rf^=cΛԙ.iŨ:[)d3Z$6QGFS%4S7.0wzޗ\ﵔw ~PCwyA^%NSgj̇G~pL<~23ަQ|RJ'Fs䛩<_qti"%37MJV$2rUR'⿙'Rv(, gJZWF@ytU#jxvOM/JXR*6 ĻU^"?)fVPnVDUhVx _cYC~NM穟eDO2l[-\5b.j?´AM"> x'oI&o;mhnD؁Xtt5h?"X5CY;F`g$vaR eS<٣OAǜiʾ╘/ uiI9vGH|gˏUj]Ec0aGḀ~Si`I~ny6'? ol:ƣ'>1<=b\[uHMM\ZVgcmze"L&0Hۭc#Ӷ7zɏt9ЫPXyЀ*a)~6ݛF= %*BV~jzˆ]ER3:5G>#H:Fxǹ|1@:rö~ϦvO{r1BYs/}k]JjS5xo,V": 1=peHQEg2ϽC$ –n3,ҎƆ)UQ_F9"vi/_z/nC6$֑bGC mxu| 4Ie;hh.ȪS֘]3^ifw(vk:ʨG-x*_Ms@iہ+jaT%D\S4U}^T_=Pqp\KrY舴V[U)7y362vc HfMŻiA3ir:VU(psz -AuWaA}LcqtX,Z~Kl}ʩM4A{N#ue|'~6<y!#Ӝ>?m2HHLG]u  o(}8) q 'E"%% "j|kv0l^wj^X~Sn>lK,K2YVl)=rxv }t|D b УG}ߚF^ q̦)jՒˋ#EokPH{˕f'%d% jN?z aYNIltfyMΕM,>Ӣ8VMN7-ja,,Ûe/Ps`R{/[02ExJrs-[B~aׄ;9\UU1~ Pyu9āb4ŵ[{/x'iO>&A%\|:Hitķ0TqϋEٍh7ڙ3*cYRy(2sMŖ%e$:0z ۫_.XU}}sP}h[1HJ%5e3<@5g:ߧ ) |}eU=OW-?μ[otlTL9+}&d?_ œ;;XT3ky8;>| +$7Iiܘ-_x0>YE!tTr˚S_UNR{fKcq2̾zY; ͻ}wTT;zJ^N,MVikݮZiH=SZpPg?*բ{fDX1`A=\ֱtT'7U7c`j)Z3kc妙fh§S.VFK'a9 ٢6AWwƿ:^rb4` <;\=]s'uLBi*I$eN\zdE$I-6E.0RP[NFi2v7V,ƣK\OChEn^چYj&y38ޭ7/\%jі; CjU*5\ju}觙e dȶQN=t!3yc%rôudFYDsu3P[a" e/IhXi՜>u%|J>GtSƇ"MMmky?Qn{P]cZt,v/૒^~ ccBQ(T:#fL\gcr#"vHv,V|vrTL,#SYo"V|4e+.= i,ZYkE}cMCۈ'gBиŁUܵ}Ĉ‹1[9Ϗo͛w5 rqB& WR5װOQEIa!RѧdN yR>z\2YFyw{ݟ J8P> stream xڭSyi{1rL"5;W =O5j JHTW}s%0R┬Q#UNʱ;.c- ~gnrvN7y%kb/8DJQlRUf?V}a}}fMSǥ1߄}䓕N|xZH#9#՟6#S3eXo)HVCyGW_wv#u9gkdAOmV T}^Т:RZU u-ۙuP1VY_!Suh5o!R3a^BvEpFlrg4͌`KX}e i9LvN5Saj]PI]; /*)򦨕; _Êz ↭z_HK'L^z.FSʣ^b,ZpݷP{M<9ЂYnϺ;^\'»%z"I(ELᖎjaҢޤ/I&匭Ƽ-Kz-YcgQo(x}O( iV-e 9{oXTo$wޱqwfYZEŝǕM֘6l o9W]JT^s[/? jXg{=:k(E 5I=bQ#n~> w4w(eYj[a"kPo% %*5 :5?A'ĀαBˎॗ]n<oc5ߏ 7eTKE0˂fxّoƉo .tiFc}wo{!,0s&*W6.O |MY)9]qww.ZsQ҆i}BϩMM{~rI-y3vӾ/i\A!Y6Gw1ʖ/3N GtŮlX$*$(f&>nw)Yv-I!::MQYdwܻ)]!LhxX;^_qa3l7;'|g鷶dp,7hǣ#0ZJp֝l߸R]Ip(7zÙ4 Fm8UHs ¾f}3mȎ@.[40Joۥµgcj'Vm|wveec\0/F.7@tpHәu}b}`;T;$ٻɽ&˙}Ńţ}DE54PNG?4󭈷!-܀7ˌsLzY Ji(YwbZA/uOwirIVϞ:D yH{Qyya`SGCRwH˱74nS6܎)q\yD<]*bcаm_6} M{Ưo5޵#Ӭԭ?O{*tj1Oul2ﲝ>H|ۡbRC ֹt!&,.̑Z˻75`03[7]$*d#pZG$1&n>gDLT?eEf ^:n~0QYunLϭMQ4m+>[j`jT|gǹ[\)pBU}%4֔mFC4d$7Ԛ;t̹D% Ks[fᘩ}:oGR\w[~0LXU`O| Vpt&rng Y|m#_ Z`gJ.WE1&/m#=RV[t[2zw}3HZqrbЃٛy~DVyؚQVe`홈YB%"ohNa.wC" =6Vendstream endobj 202 0 obj << /Filter /FlateDecode /Length1 792 /Length2 867 /Length3 0 /Length 1417 >> stream xڭ}4TiǣP Q4y\i݆rLD%o˸{sZdձYiy+oi)DZ]=ڊJ^c=Hj)D~s ,i_[J`|Bol _/|ar$1d[QME7``*2@q`kS_({̫k8=F[טtڷt׬t;` hΟ5x+knrWG:͐a7sݍqT30L>m .uӔKskGh-ʼejڻvTkemko^6>Ҙ N8s8h7=f3SBVL_*jH´{,}*V^ڨmD%5Kc| % ,q ꌀ0utT݇ tLu+{S&t\m{?|Y;N%uOĵ_}[BI)ܨL^u;_uep$|vO {ZEM N&Bٵކ+4Ք ܄5 z&m/k5>ikb4x.OUo :_?VnS zLXfI|}iuNL/FXgS⎏ǖ3<pzwFt{i[߰|]Uoé;.,^i2Xb$дdɜN'bSpM^E%C?7:TpŽl25sa7^8ߎ?}swK Ҵuoj49X2$0(EB}{u)KG!L8@]g@'endstream endobj 203 0 obj << /Filter /FlateDecode /Length1 1240 /Length2 8276 /Length3 0 /Length 9030 >> stream xڭeT۶.kq  nŭHSPܝR@hqmrsvs~#>kεZosqĀ`}U/+$X{:=!b@(P b a3a~p'GO <_I@YW t>ak l ~@Y( .qc@@;'[O /'U7{P_v^yCR@ֿ5ـv07bͣ {ytߋ+yA֮-wO 0Ww/OAnjbQUOk p kCbiz@cQRUQԖߣ;m7&|]=&>~d_lavNn@>A!5nxI:A|Gcn7cg08_*$k_$  >yLHȣy! *XC"@Hcxg su'(d>AG /r#(> yL~t5ࣧ?x1=yz4F~D?MՠGb8ӿoZ& `"@8D[r`i*n<‚`7#idSi-ޜ .Nؗ%jv'Kg#q-4輊`~lѫsvZ.xO|$AVvr4A繋u7˙u/tg8ɉ1ׄDHPUΆlrugd'%E)W_0޶B@4ڵAvEaϰ?qoRMO&54;gA!a<  vwî7K䄱/Ɵ4] j^\'N/ >ż,떾x9v_0;XPo!ߖ[#QRѲ++uƀ]qM׳ hYE= & z9ooSr'=&cg{G_ H.W&E,k$>wp؛5%3*Mm8[Qy$OsNH1q?U1ơ{8| ["L :u܌K7z4>1:D#c B,v_՜=Ya-m'; W{UXi/hC<BEA1nZBXbi[=Q62gG/kEyzȄ% 4-d^>=Ӣ y6fH}mu3LM@m>+BIzf1%]JG7]{5prl8e"jss?ŋfpBO yIc4Εc:O\ .SЎ:5AF BeڤP=#r/}R|sV ^OmOQĩEm?^WYOF*<40uěZՆ&/|+&{j{]K~gT*=BՒקt sVTA?>ln2m;}%LPljpDpfJ:\5$7s̚+b&CoW~`N~r%kmQg5ر"() Dn"69UQ~:tIE=@G4B67iL4ƟJe:cmqLG̝ M_)7n_rK<%l;9vK2#u$"1es5~nAJɈy}NPFĶ>י2J}ki6xQn-qWF Y CK9`E:SxqãKFP+$t/WC00Q\\{OꜩJU_()I/:mS#DdbtHELHvLyOc6c-=A&<^\ʜr=2L1Jl`=*3$=p˺dh|#ViK1FrDPz^_rcĚ )&rpů8RGܓ ~n,UጜG~etФw_krK3kN RXtDj=œ<цUw*FOF .xzgs$q.'u 48_3tQl|_Ǔ+tmxtL)m.,:!?qf% 1($`һ9%CLSMb"FZDջyH"|R!!Wm]&Ej'ؙ;)mr/9eaԏB+O{mϲGYk{%0!he,bDɲH{N2T49LCE_B_6=o!ugYD ']Tj4|#'Ԥ1)W,|v. Btwި hR!&SEYӌ4רS^ Z#*\fSȐKetVOXm`ZZV[mBTOM~G)Y+ 1^U>}x>~1eF6`"U [œGLXmH5_[;T_ 5` lZ%Fw 1'=}3w`![1-t[.a{C[b1a.N# V\%Y)6Ǹhlnw"-Z/cr*{to|?m)fn<-`yq!2>ˌb|#CFk߱=S,7҉A2@Y+Aբ bm1%RgC ǥƪaAp"g{GO~- 㔬)c*Dkʰ;2>FֻBa+Gt`鑮J^D~=[" XѩΚsU8jylʂ<,ch@*3)w1$w%Գ3.æY4!-gⷾ:u[/>ܱIi[opڻ 9N}Ig_b,^##GI~6jm&8MT!vk4[9[̳q\b wo*_(˛ b->}aQV u#T3WL7A՛'u4Od{eoxRǪEFM{C>SGv6hpc kxz\#U|sYIz|`F-{u9NL`M եxս5!&Dw}Mh-.Ŀ^% A>uCHvIѥ~ iRW k+EH߃Ubx՗ =B T M:K4f=_`[z0%XYC6Ezf7։GA}Lj7=r3T%Lօu *j gek\^V?=!kw" XyO;WlŠl,S= 6>7U8ݭɛh_+(Rޣq 7Z,^&Y=_hťCCi=>6Plxh$~)_J0J'Oe, oC;wU~ȢtjŒ9Xj.oR*$iR7@:ub$Y*@Z_%w\>0٭0?'R3I9 I a(N k:-h4Q(` ԭ/;wOz4AkB76M|kFZߤҳdJOvxt6dJ^ٓ'kXK_H/mgɽUVf-\1$7 *$ɒ:`b#1",!ʯmPNԕ<=^t}f 3Ҁ,}}M~Ad@p"/qQM :|*\QQxj*ޥ;Pm r {)mkk!, YZ@ϢP_/>K9vj-5&eɩ^NN?(qq fbQ''-dՓ+ Y\tzs(>ʑl@i H |W&k0V?aH=;ȗ~ctQ3F [؋໚Xld^m$1 $τyKIMi6)?$Poo%Fa7=DtsXSd6uPCU =j{ vyE- %;[v!JS='fֽD܅7 ZeIH G+VH%esd[$?+%Krn 9?hu}%[fB2Ĝ8  j'!WG *GLgmnͧ\/_e(Q~n6z<9H;}d\$8KA^`:ơs+%+.5Th;sKLӼlDs; p#Bmub*7'K!"jE61f?M4>^Q]Zxa}yEG6*Bv-a(TtnH-5̿vH 5fN.qw5-3.KبCXqYPkQzy 6qSngcV^+bDck4v.^X+ZIPܜBLs򽏟,ǔ6;<߹ZA&Ss^,U,G g"%K"kRFtdHrw]a{uYP<QM<k<Ԛ"ű^obs7Rw| Zٺjf"tu8q4 u$i͢ʢtYlkoR"Er["!fr;pJV)J ens_[́1,Een@TDJg8Pc`4~/ظML4妸*M#K:{SSq/{f=8u`2exP6rOrP`v1~0'SA#$ˈyZvj˖]h*<"<18ؗVWC|NJYRݳ52pCS+!O~ df"8ʩG(cpx@BUp1M)d:F&U)\O N5EJ=_%WLoͯo0ůL ߔGg;1?584\lk~eƉ'JS>(K5|$-5!1 CcTe-"n",H";id#qu:{>9}O-[5yoth ~Sendstream endobj 204 0 obj << /Filter /FlateDecode /Length1 2021 /Length2 13038 /Length3 0 /Length 14154 >> stream xڭUX[5Cww[;w,wwgwߞ.U5k9_(HUm 6N ,,9UUf #30F `a9X9,̼쬠_ Z .5 gd02BVVN8@1# `45A`G-vr:8D#ilkc0 0ۂ؀ -ŝ IN?~ks+sv:l67T_+d`en$dcj0Q hhddprp 1@&i99Q6Nvf'? / (?21#[csS+'> 01n L6N#PO&L$'I0A&?$/b0A,&?$e b@]_ bW@|IA v?Į5 ֿL"ed2p427w22kgg Z?sG?GAeAF:Y&Nl0qZ.⿜XR j ?A[_A, }2+ \?Y@&.m7-( oc;Tٟ@2s3A-AYAS'1V@GǿU21S/IghPNۿN q8mYOj_E,D:hl46k|¶n as^ff>`sWt!,Z$yNCӂ 6tN!,ā[]|*IDك#v}w oT?M}sKh׼Jsߵ#8Fm9WZ.JK?VU݇]!qɥ)jTMFl_ꊖ:mH|i +أL?pBøH*.QH]<Xͯ& ß])36-K*U]`3/[԰<%PǼb rheA̬b7* k= e>&N7?mtӗ}?A% oxè`8{GO’;ڹ>x&H#:@ \5RY|99IKr`C^ R o ߎ^<%ͼh!mj4+ s6]d֊eǾ$ޣB>I^ND7ad 2x=kmra]M-FM:|t!pxTCeӹH$o;Wlw̩3\2b+),0וj #.9?0OE> &%`ȖQzi˰ }FzV WGcwQJ2;᱙YНqsSM /Gyr1߁b~]\'7} *1!ش|!ʧ2z. /22]n!]CjPkrlx*9vt0$ M|jEtl lҗ\?V7:$?Pa4%28lR .9Ctt|%a6{i#1/~"w/-veV{դoTܚ.H¯I|X<97*i8eE}E8 +X{pSIY(dJpQ|iw7Q~ʱ~i^`gs32v vquu%{ DeuԻ'mQ}dzF0 MImQ] !P;`B1yrWv-ڙDRǞM/ӧ݁;tUyJTָМE =g5rv`[i`2 RgLՓ%KM9A5)XG91"Rj o7S664wU#ƹ?6vvDr 5Z7:[Eq.BR[/(=:QYڽ>^Z*H;h[_i'j%G7PjGE-y]zs Y!?6qa>paC>f`DdcO|rv0[nWSH3^ndžQ#/JqgHE+kwLu>^ric-o{S)mg6x7kZg8e^vH-{1GtZm:ilM+(-ռ5nN+Vd߼FGHnHHOla͂l;2l].y_r`0 ӎj^Ne<@ Fs&]KКa=$,Ru-a%RZT!!%x Jyf=qURy]AxZ9#+q/Un;6GTi>i-y^f}Ttx^'~޹hi:|^n,B(* "/N-lBrW$߉NuՐ#^YPs2b!x07e:a<(O5 sjhM`HĄAjfQ"dA2:?#imq-R` =1͡:n< ' AFfgԥ3N#}um΅_ ^^,[]9鬄CDT Aw(Rl. 6}⺡7C"j*tc0lJ~ cgAe{ ՀwZA?*K p71tjW&/Tڂ+8};߿z knXY);Hk~&*NxlE&I% FP'}0Y(ȋw3LBSr0γ?5Rn%F3?A-q} lNgDw2,‘QoS"Ҿy׋ m0Wj38@(RB7۳p9UIN{&nq;xD 3q{\JB#gP(֦P<vnM=a9=ן%&,ѮD`M'T1 ZG.Go8`קdϺE-tdY:nU%oy<<1;=@F}HΞG&2l25q4h켈=̾s#@(_dӌs6,M@mqjƔvjWܗ 9瓻 ~C 8.,oQi Hd¨wfZU{v*܉҂D˛i@ ٱfIΧrF3\UސSa^{CnEYZ@ 73W"rƉaQzӃ,OTK%>.%>pKz~* D95 |yv˕HXaz%fTlo+ FK|UwM~Ma=UcB?szv3 +vCA !Q¹GI1Δ-B='V}jCUE}-nާa!=,2 .uXsd5<]2u~L8>FJP(G\|l`X'?Mu| Jzw^#Upm{Y۠$6m 6,R<3 R)1~$WAذ=f?tĴ9cYZ:Tv <Tn/;+ ݰʶ:7btuшOf,Xx$^'19㗔'02n$]ns\ҸJ>rJBӏ;"3R[%p=¬ FяtX+MZ!FNM!|J`?םysE)N &(2*ЖK, 9Znk*Q |BT: ^)~J qGo;nZld.иX`;w:Ij{Ceq@G; /]` ܇'k Zؖ;bOF)mUhuRu) , A%ү֮N 퉳?#\ZaxеؖF}}{}ҢĮoc"A%T#u}d46B{`gM+`6;zj,&GY#~&\Lm\5u|$g`/S^J Cpn9猷TlY4lӟɽoil&?mcb5D.xI)>e/B0:w q[잩ƾcp;0qrv?';)Yͥ ]eS Vdpi:k:APU_z2E: ֤T{x+ RڗZ= lur̷8PG>BJ{fPWh01f\/K#NWmz,f+9LKJ="8fާ7;oܟ>qcY=2܁<\a%cܽ!)-stMT -Mѳ z{LyREO2w&Ƙm?V?+jMDpįS I"-CbD 8&[Y,~2CU<՚'`^f0,@M:0?mi_\,rdFx6KSFYK2aUX0=,y]9W8҆mz!u͙fd|T=n&)`KdLcťOUw47wZS>}:H,0R!u :N9)U ys.S\)";s#7_1xw[nq;,VҔN G˩ $ZI73Nǯ 6/ urD,nqϣ~2j,yf$!8< ~R@OYAժK{ʿCW|iqQ6EqFJ S.`V=QZuؾ o+$vׯ4yE5Vb7}eaBgY[%xW@wCWC¹ƨ _H89;YPp[#S.iR:ߥP_ K"Bidk}_ i10&T+牯I-!d`ɳl8vFp$hpW6D< V)-<$AcWtg[P'W7J*<_ȂGͦZ+8LF4cKG?$})@.9z(;܅ͪ 6J|=AI;԰kS10]MIC%\<F=œn #+YSMTƶcYGwb"3yhc+V&y)~!MnE;z\Ro] u|2۰e5spܾD%S.֡ds267!v靸n8W.[1UwpBo.|_Oy{Hdl6iPug໅llj=o^Ө"s mm~’w{4$UDS4s$wb q3.ΌVyKI1`0؎K"S^$!wYE720k)$ݝ*m|өcP&yITI5H1Q/ ,N?'HGƎ/&$P((!zX\,s$1tgu!M5B=Quk~pmK+g1"OF~۽Tm^d;7!>mV1(:s@ t\ұ6I@Og%gut O}o8~dߠ#]VCF$VSVZᣵXS0NΫ6Ƭ]Ĭ<5>砖A$*WwM7 qBC#v Tr4B9ƋZѡ^#rlp/v 6oRMGeӋ*Ɇ2P{o_0}N]`[([ 6,L8)VoL;l(+̙QDWX<͒$2) Lr}E討M)r2 $ߒpV+ٜbBm9}}K#z(K40c[#Hl~Tn,x }ʯ&H$y%b=>@6zsw ˜g쨩q#niqrٱY~xCw {"=>axhJ S;cjsJn(S!ٱbn.Z=v^1:<(x`RhFŇ@qҗ7iqNzŭ+A,Juc?`!wf=ǎx/D[Ga}ו/Ѿ8QE}XSy0Y+$JuS/hJ}Pρ /$ +DswkR͛}=:s"' }0*L5tE KZ =ufxb WkR$8id3",0j$RNK)87)^XZ_g|DI݁Uy Y ѐE{9|00mO$36FF}ZW+WgH t(SJǩ7¦Yu[wzyMUHqP Eg! CÔ?y TN]l+ý<.nTq4=/2_![%I? @`Fҷ ,'W2F{U%ߵWJRp-F6{{rQn LT "=Zύl!eoX#63Ҳ2F lX|WM&0<7Q~*]3ji/^܇oc0\ߐHޮ~}OCR yX[kPiXD4aq&@l-ұ/^2q/TFdQތC~4vJ։}VV!Q$ě͓Ne*'`dl];_C 9/'8>;>1k.\c`;ϴPzƕҞˈ\|;RZP(}^Jf8?M:PWp|Xo!nC ,L3ZvHU @}$ bUS֡>uEp3Xߔ3=0ۋȎ8ݤ̻+ Η@0!Y*%!kQD );) ֙Il% H  /auQ % B+ ckĬi0\-V "h&Pnu cЅtUW16˯ [ZW6sdcA1 A+&$jK3n(E"B=p-ZuC17U ܙ G7Y]Kjyr%:O P!4rEӐE;rcYovn8W&cvJ7_Wm Вe%ѭUU!6ۧ|"(tIP {2c!*J_ S\r5_6g9mm  )#nj"~wj3 kih,,!$e ߹',:L]k,,$|vdoRgU.ף ,9/̵TO:'6Fq +:qyZ<"2L (O{M4S)NMFckK"&i^N͘ykl*+ owXغbӞfe|ۘύe_†s8f#ZՉipImDUeDXU7% 10@`[bKRK6~6 wnGf125qDAngq>MB>qwhEH/18V )e2X-&? l[' سGvp?aQ (q c A%n_^~aﺶ'uGdX_Ώf #x|I/` X#+9`fFYzB^3C,?ݤMyRߏƬ_ f!iK 8tV懆v-Up%x)#sWw+F,3"bꙑXoPmgň^>IAQ>8Ӕ'9RMh )_+SʞILۗn~*ե 7ݺ .W/׷R/Q>-[ByZF: :\S>=SkyUxL4Fe5ssJ]QOEC- -)BJkgiOoq=_foc?<7q/T§[ (xD4(/9L⣝#34fHtZ]BjJ}832Q,foj3)%ע$x~݋dZ\n[v6ӎ] V%C(}uyP5sxSPEw&Gw cæq7at-A5FR8CꋉJ@D([4xA!.rŤ 47wէƯUntsNEXKC99s{;x>wS^ԕvK§29N3iѣ@`ɳR*5".[<ފك ë *tVD0.[(IT,>bJ)bd{QeFF Rͫ'MH}*6F }DR9Ȁnr,¨+64HmAzSݣ z`oLUSGMp0mOKn[f@5j6g&I?c/:DUjuaN^H;Fߣ/W".Q*3' F8ؘj/῍yx@W`c7+/WG/T dJ8Wһo -< 0nank 3(}n`.ԬӪTE:{WaR B!޺fD̻?Z1F)$.j=FcmtqdB-2FUw7nk<a3 2aeUZ7+" .蜩$ںMsC u&XWª3=W~bŁ+)V;M2# i .VR0nV3jy\꧵04 7vJGk1=X_djsDf~l>K`xANj$bU\f rA6te,8?+ D/; DN[캾pG:PSKCT胹7ȽD#ڋbǺg錗!MY1*n JE>XkA L=xP%Fc}f/9qkZ;X̶6e_%iI ,R"Hʭ>ǻB´PÞ/7o-ᵖN! OxF E~$xna,c#Թ hHFBm>TL*EgO8)ơ-"VESD8bǎQw8X!LY/HN@?iÜ2g 74 0~Wes AlZώUsMDM.qL~\CWUF; Tv."4!FA¨}nF//fG- |,YK9*wo5ϕ!R >-rX~w"({ߙ\x&Qy!!cC\S"Ǝ{Jڻp`l3-e)̆BEoABx&qGBmF,%>O^?WqB t~c^RM;Fxxs+m|0ֹ=!`Zx43-{,D-m9?/ |<# <f4 g J "4sWoQXyZՀk@GNy*S-ʧXZ)cmeNC2oKcUۍ CnXB iEoc0YiQ-y }s^!@Fr_S$k5/\֘"FPJʻκ0mVG 49`$LtH^J%ۿlPXy IDԡo³IkO6YK=o?+o D9ǙIg:K~q8Z x~kb3#5&rš"KEn:wHQb;mhZ.wYھH]# ڜ sE׆)j"3ş/Xrd.}/!>!ŽYlLs?D%( 7A:Xl13)ҌV->s8];v :UF-eZ(Vsнv־4bueFe]2D[G6!Lr06OwJgV'*c,Neu{Jldg8 =44?fUzpwj݅K-}WWj>D:i:#AźĀxpۀ]5 t"_٢-%4-Nn ίҁ^t1!܍{ri68':Љ$ cۨp$g*BCNwMk:FPp #vf3~:2bLTKpIPe7t[ LرfxA@D_BpTZ(TI/0~aǟh>vV۸~ZwjM~GXSBZ}n/pCfz[$u.Ljd}—Կߕ<^ gx-"ϓ?Bendstream endobj 205 0 obj << /Filter /FlateDecode /Length1 801 /Length2 1058 /Length3 0 /Length 1587 >> stream xڭRiXW- Z ZňZ$PPAh¦˘L Q@@m-( ZPܐUv,(Rw[EQ6YqCm;7w9{Ϲ=QHA\ \fA'@At ,E`Jab趶 -b ;Ȇ$qH4AVw9 3bXp|(AƁ,#RNcGPDG E"i$"Qt DIkPXg"0'ByHD:n ,PM S!"XrR !>pc"v E?& ΜlG<C4B#\Q"Ae1X#cark*YKG*/7/_uW8]`r+RTrI" HB kKB>3Yh:@q!lI Y @DH)dK dRY$dЧC99h @&†PreC.=*D(m`]67`¡3 ͭ涌~d˚2tsrN=x{1X4c7q*6m& ͸k>KZ׋k*Zph2rހŖ/[xeSWz!f=X󝃏LfjGD?W;-3mV8ufryN >)_5)eeiҚF7ND}no{ٮF7H[3fYfҩz]ϧt7+8d7-jݛj ocedߺ-kWp#}kbƚ~ǯ)֧z6߄w_ s04;;&жƧWn|`j]'rFDz>>"yhY \ټ2I1-:=jIO+P["sO*?8`18mKvh$ |8*ɋmi`hU)܂}W͊ɸKYpEF[Rp/rKIB꞊ܨfx[t:x)gj|<ҧ@Y3=r {¾"Lޱ^-}Mk6l7ǩ \Cg^|۞;gt1}ͭV=F>wroߘ hS}XAmYbg~F+B.9}~Ϡgoi 1ң7Lk)zd2:i"zQ{鞤{V46ux]mTjHڎl{Z7򂎦{B~!1g8-ū{<,/E;BԈf|w_*i%b癌V*b8vVօ7Tץ ^mRO㱍iӜWZy3wACAbtX.0jH]݊hL'W5y'GNh-Jq-Of݌&&ZcL='_ y73{$z#bAn+YqS8̠dM;DYu(~73endstream endobj 206 0 obj << /Filter /FlateDecode /Length 2152 >> stream xڭɎ6_Q%v7-@҇ 0l\JlˑtHQUI>}#yWީ4)R?)'wSv}}߅^[rYlaa|CH`4_Tj v: R9#\Vh 鑁o.[)8[rY9g`9i0Wc$dMCò8 rÖ{Nٻ ^EN/ /, ϚM9$͈6Hʹ0H s)n%g 2]'(LzN(c] T8#!U”pKzqY~;"=_gsAy,g˰&ȉVM،Uʠʍ4) G"2:_lH5Yu^[ YrEjWZlQZRՉ(kDDY!Y,G'Cc9B?LEi{`GE @tx k*r&?S( S2¢V2J$+JV=DO QzI{F5oz>ІZe{<N@{smD[Y?rZ.G@aֶ#De4Yb ;u2?[^y3e6)Uۋ*t1aZiO2HT dr?{[l9,(m ?4da?Cvűk!B 2UH͆xHH_)P[ g=Лsgoʍ$e/v\:Z§0oƩhŪ=ٽuGOG#Axr!!f2VD7І$F1A{w ĤKuՐP,ĕ6:|mMYkaɼ1oM"^ő0sG3nMӡDMDї!B. VLp>}xD2} stKIQ(-aBxql̘rIi2.$ƈB6()ئȁ/3ڽK#Y1?UB-u{Ay΁l޷Q1@(pa)]GkڷkVcHƌr1'pI&5ґ~i/sV4![4: kC1"0/n$U|6wt`:I_z|P:X!YFc2L!\huX" '~OwDa'ޮ*(H ]b'*QG̟ 3q=b}YuwRFq'v9mkJi]M`"jQzΠ܌]}~}tDM2 KG79lPCʪY)JaӪ0FI{:QkD|4 Thl14$WX:{qwg^l N0>奭)RWl}=K@A3%v Lɴ'F(T~1ZTnD"G~;baKЀXp{QFBm"'(B54n4D`s|`,-:O4^ RІ_Р3v˲W:ph%kiV&&$?:HD*>5ќj+Ft-!/_jbMZf:ckEͰ#k ƼߓYm۹ LķwBB=Ġ}-6zp$רcy•qΆ!{`1*^ u";,3jC'yM%f/ crş,R[ׇI/?wh=KySLVr_TZ[weE^p-!r‹94aOM&B=*x9^IHu:-![f rEo"endstream endobj 207 0 obj << /Filter /FlateDecode /Length 2634 >> stream xێ_!(2j-si.R) CjvWhlܯ﹑(; A;/ͳ_ZݚݢiU6e}Y/])#<媬b|vprɦx5X1 lG{-WbMH_چ696-td4Q||@]S<=x$D7G.{7{g.~/c+S*ZR֍V3%m7t췎Y'$^|4u˕{0`D P˕sy78;CB>Ə= ?&@=1yR䷴ǰEҊUq)rojjL[U_d$_aSYe#-[^KĂNʵ 8Ȏ@ ӬOS.8M|<'J+훹]!P f%-F30e+DK~|3߷E,Y"{V232k"o 缪K3mR3' *cZWUMTt2O&OsqyƥUQ 9luĈQȂ"y/@c+ w q`1.,OK_]U vGZ˖m Iu2zfQMUb-iqJ"1a*~8E>?xi<>C╘Gj9Dt;d.۷@_#a/XESfҊ/D0Jbjz 4  u{^L# `i< 'Y^9Fܾ10#9Fy2XR3! H J6}HlKm[B@E~Be];fw};^&SXH2!֑e!8TM ;t bk*^Ƅ/l:+2泣dòn:]ܢXxP: TmҎ"^NčIzݦ@CsnL^ց3"ʅP[=;(`\ڸ*ç \/;bes9Vy!i}`HEFS:!: D!mEݒ@%x$@Xy1&6M0>%VCPV6T ]8eSJ"m1삔.tx-Ӭ Q}7&-n]{=;_?ʼ37~s%%/ yzGfc3I!18ICM"!>chHYT7!% 36%%0C >.f2MPL\HgQ_[&ǽZFY冷E={{>qaGTسg5b=U/Pˬ׍^JWY5UjLc D|/b<7D[@|h{SxDhT}@hR;E6bu=6M1W" |#(lkb]|'A} q;삡'vSdk qL #J#tP!}+^Psa3 +iL$M2O&ėNhdݑwk5Ցub0 &d erQd3HܵM݇,H5iE̓$uuagS2*?TAgh8f %vv+zYFB ,;)K4G^䪤# ӞA(( hx<Ŋt˾U|u Ԕ96m>0U7\1USn֚ *p Jo29B0yJUokӸ7WJMLy~_ׂCFPڴ'`@hNݖWɽCZ{ƔKJ7_ %C0^5Fk9 ƦXj@PsVK&S.tX4R4֐mܰC5~s 3@nvB~2:y(zu'AO@T}-Le#wpĪT&ThBmsd|ҪIr1YZTV3΅Mkw*/a Th?m#mnrfgiJ(n,FjC $)Nj97΀B_Q+g˄ X949afv`9P^Ds5v#9,z,>9FlZJb%1TX]wXX\;k ZmE̙#I-tP>aᆻ4>yftV!#}8R@E\W8=/p@ULUNn֓kinAvAFHJ\_fcsaƕ@M\KÚz|mGbXmxp>3E$qDTsm*ʄGv{_o^~MebH.>#J# }.N5uTK?72 ܫ)g%y2N}yS<m]]y4yd^yB'nbzgB13endstream endobj 208 0 obj << /Filter /FlateDecode /Length 2571 >> stream xZKϯ-R98n9TiU֌8rp@@hH_7շ1Julvs?ggZ1•ݬg 6Kavz^/3^=LJ^x*ƬvLo;Ƭ& d݄9\ q)%#Z0 Vab(\Rg̎M4C6Wᾁ=}}yNxyl[=aN|~i-9@Q.]ZFR 77\.~$KQ\  dʘ5&H hA1'QZLЯ 6$Gwj7\)<&شvVOs. nK>>vD$8x\=I?ޗ%1D)*dq 0OۓO۳D;^i( j@S;0`Ť[L-m* څlБ,Y1c嘵_Y>,2w$f^`OO% *HƿSmb:V.fަQ+ǨAUyVCn(JRE~&}RId.8-}6tv ;~--gQ uqe 9,e󿅴EFqwF5]+ *E~Oe!OBa;'KYܡDtDe<㯏:z8=(3"n2flE+aѦbz[ 7s"pۂxmI G0+ô[lrS Z`\ϴ ɖSvOwܖ/X7ؑYmA>PlE /rV\~C1Y6%r̈qO%zh9F}ez=O /d?Y^ "]Zh$ӎ _am &Ru18B#]s7:=PmOjΞo1O!Ф2Tp10GjKNcRh<z̺R\6Mݛ2 Y;&CbެMdZaq@?2H<)Kh+,I`:]YnwC4ׅOLkz $x4=2-YT|6!4I~IoTYo*qϗSIɈp{kSH4,±B'^/ PKެ+!UiWڰ|}fҒPxI9UZ:oJ>A!~c^UMa4 R4^ :"2ZFSLS?eysN:toq0W>A&|3f?]hj v-`cU0́lInM(3U*$. D](N`,_/Q:Ħ"lCF֨mXrB9{6vAh\}9{}}}XQDpQEX"tѸOYhZ!2z {( pb~ }P6_g= D5 >Ny`'*sj}%X5TBB@?"R~TYU}pm&ގ#3'u}@}\z_0{;֓`露$|gߗР(7#GD,̭sQ _xm~I;7iߍR`? SNW_RE{fo@RvOWX8\ ?:#-$CČAendstream endobj 209 0 obj << /Filter /FlateDecode /Length 2499 >> stream xڵY[sܶ~ׯ%-LН>$if:zs<j]ܵsHJ-'탴x|߹?\x]7TS5*nlQ{Ŷx[btzwӋτ+C,*[ZLyu;hrۥQ# _-4[ɆN&dtqa2ߓRo ۤ?XƸ"&T$XkURKF]L#t[Ǻ.XЪV6x*0= ƒ`QЩ JҊNծ)ѱ_Wk]ŵ5-nX/KjՋZtm?6׈n6X卅)+ӳ_xvYvx `P "C:s^uζ0hض9 OnF}E7G͖w]l\A~<~?| 9_$*k$LY$sX#ț<բuvp䎬xB ,cK4Z`~iQU1<cq=35ظ R&m,m2o[9: 3ڇ$RIwFz2t7 .Wk]BeƂ3Fi#ȰjvMS@9<;o U<(,6zҗb39PjTo73ݥ۱4%>p?ٍFEVBPV3%gZ$?`Ǡ׫6dv1vuYWxtYt-ςa,mf)La)?݊quEcI GwKf DA1LPzYNcH v99wɈ:PT0Ycʫ:6siM-'vS\@ލ̆m[8|DFؽ9"m'sħww-v>s4`t%^+}Yg@.'#]@JJQ#0ꒁ m ʋI{!6%nZ\>HpH`#GK&'~}6-!sxqF~ΐkO% ~\NG26<$MeTR!o0&^Hhs==&C{b2 amE&Y/#Ä),R6G~ d@h1lmd(RAhY+oa,$#9ߔ2xKYsolJ֚ /lO^g &IΎSc}FDðlݳd Lf[ $^ a1Vqՠ%78h 2-l$©S.7MHXbzSXM <,fbx\Xv<,-utt.]ASBwɮiÉ80zE\QtE_8q2Qnw +?Km,BTE[G_p<DZs~!3I.0*u i݃ #iܬ-SNHWeS01a!$ւ'"'6pʘrP^)kХW|.xhHj 7uI*Uz@NI1]O%\=\pJ2 5ݦcǶ%8^McХpo^v7a֬CiWk @(_K*ȏS 7 `Ū vNe Knd6vM))]Ҋ|rG+18y:G$Gg{%%z{Q&M߷Z> r1VlY1^N3Ik,&8I\Ma5kL!JX8[8ǗGLQuUSr#s) o'5$j3t3 ]W)ԦUMٝ}W[xQ'Q{wś,̡1rT{Ah#s_i30`yC<_CLt'%obӐkQ(ˮ5> /ExtGState << >> /Font << /F2 112 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 629 >> stream xUnT1SB3<" E)d*@J"A R{׋wz wJF`QL sê _ц-N[UPC,ʜLNHywjXX<< c$.o^01J6Ov=wd %TϠ jgxU1DLNtmSӬ S>8;Zbɐb K%L'_ \Gj}rZ?f%/ph$'vܗfףKݝ}USW!<)9`UywW>7 4LW/cMAzY  zKZg VZW /RPiȴҠH`>GVC bJYwj)Fa= [)FZUY_[rI;?[9p6vHgce[GccB$Oekx\ڨ&ۼl!{}tlкF"/Q}N:xE6U;8 |~Kendstream endobj 211 0 obj << /Filter /FlateDecode /Length 1425 >> stream xڭn6Ћ X n_)KЇVziڢP2pMgPY.OKmMek.ug'n~ڹzf$$ѪЅ qF.pQy,VԄ֗#W9i.@ΈnXvL!3̟ڭRidp9?-OgӒV3 K"'7DŽu> ܹ^f6D쓠pȭG%<!A৪Hc' Lj*üFd,L<Ř|H.1"=36PqQ]c vu01m= mHnrr8`L&Bi3pX1r`l;RmNf@QX vq(c]Ӑ}u, "c#nH۷>3!b%-g -ri"rW%QykUQQVdݍT5;vƔeYQ l޴s>ܙr^4F6GCEϵ|vDyפ R?e)*/Eōd\`}oIHF- ~uLMJL/&/^fhG tf4Bś 殍1ZeLsx2 ,,t^BvEM坰Gi\P>GPNI )T fzElH0P6ݽ\H[$hZ$G/@֏ ~ev2ল66$ԛ;L#ۊ %g .֕o{фt{Z*RmF[eSW&_V|pt.԰Ret9BB:ѨBimB ⟁]xoVS*찜ߙ^,;ԗ5>MS<vL{&jkKkz<=ѵ{=m9ZHwhThZ^b/s FCR$;~lIUX#k o-⩅SЊ\ě1V84> .^ov .x62W<"XWN {-c t\6 N~XL*endstream endobj 212 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 213 0 obj << /Filter /FlateDecode /Length 1141 >> stream xŘKS#7 f=5l=$rH(o.ؐu e !hѣK<8 ?Ks䳓O )Z5&7=c!=ur7-i3j,[]vo7iz|+O~#igj#"+u]& a~9]bO Ӄ a2-Z3Q~((>An:nh? L_Ǐ@I& ,ڤ%;s~HDdx@o8<6ݜ5E6oWU3VVa+4\ VZ [_ٹO\+-x weZptPOWB%w{SVh2'RvR5>~QA}oWQ){vX!慉MAҾ7y,t&ee}3SJ /ФJ:G:)(z$:ݑl bqOܼr>A_ݦTْ ޿w? hH;*fyV twg/ :w5ŸȌF_#OGP[:2RnbX ԟnpf^!<'$Be@*Rx@k .P="xTYiT&PԆA5XDm T=̓pNLn8TŠjF Ue.Mc4QXTK2zut M*Q~ZfR^U!Uh$5 Dkd(kejzlZ%G3}Nw9ԖAԖAyj6fOb4~IF,>F,H.1x$x~^:SOcP?km%\-Q5 O˃kendstream endobj 214 0 obj << /Filter /FlateDecode /Length 2221 >> stream xڵɎ>_K 4$ `$) lFryk-51Pb-o_xkyi&_<,<ߔy(])\x-~Z|Y֮0  w3պ(Tu)FЕYt|竟lmfB`訅8H)R\1r@'~E.`+:b[ .7ΈQ|w_`c-L! }[ ۤ!-0҈/?`ƏI+rGuXn2觽\L(#!4,G!|y P;ESdNUa?y¿?J˪}{7\iWE|YG;NJ$ܠk=.X /HnO @'jLah#pK&tPܘƁE<L[BTڭJ/+Wl`%!ى P96E"pc@g hJ:zeP: Y #WrOmgXτ)M0Z JHƄ87>RZl8 (ܨϲZM\S_ w:!{BoDNd|@0n:rs$r5H`ˁɣG|c& ƃ 9S--#hP5(z߮E6d2pL۞"7~XɡK[$ʎ3x۳5f. JH(`1`m+ _ %;1JˁB0=D]S' ѡh2N4Y Ȕ?xL "2DD4ўq qlQ! ^N?ğ6< (F• ^Zw 4m!WAʙWОmʘ[ZXv$1Y'H8 [ٰ'-lin $ssbVhumA `SvwvoH.Ruq܋DlJԎ7[6!M1]g,ιg Em N}㑁rf՜aլNxQ)N_; ƫ%FZ3om$ш5τsv5p-3u3ԓ09+ 7ٟy0-/:mhؠ V:V+$qi l3YQr9f Gz O1,6 %gpeǽ ٿ!Mn.l}uoB/eꞄ保9)_Qlb7OXF_LџGxN=8+0'\9n©Ⱦ2RQuAjB)0xцZ'$]n_'3#U""|(?ʑ>Y`{s a3*`<$򨂯Iet<ΘʚBD=QI.Py2k=Y-BwO 熭,R$ɝ0)B4EQRx'jMV,aQM!%$p>[ت`1 iWq^R^uW\vMܴ("Jl*H[sC$ʐ<].97(Xb/K][j_brQJ\VDӣ4ENi)&6?H}Sy#yčkҒW'M5gn!ג}Q-M#(9̆6D.]tA{}ۚl×|dNP.!H`g-/hVd f.%pÏO_endstream endobj 215 0 obj << /Filter /FlateDecode /Length 3107 >> stream xZ_۸ϧXΊH(ҢASܡݾ5k_l˕k?|)ʖ7.AvMQ3Py)IsS諛+We RmꟉ^(mJ6=ÿz&Y4;3Sie-1ˮڤe^ (13_-ϒvlX7[W*KRmZg(B'?_[M*7~5RGuȷ5SԀ%Hlw@]&+9(*j^>^U%߷̔XP fDaV^F$v G5oF[Zhwp{ ,Mdx/eʎPgMne;xqT{lpnPW=2;O}!=S6[b2f]PZ6p~mFD2%)5k6+@^N w%,cO".+7{|#[`Ťx`AEv݌B@jGZJҐ54sdv-uưhfbyn{ӔEu,B} yGƫt8^.$ +UBoQ,ՙ2-pEwWo"mIx(RN+r6>[n>*ņ9vix0FHsLlj\)g6cRm'z3/r:b.ɟ\M!\=G7ISDEZHg*Ӫ" t*dr#W3vt\OjEIW\9S_gī\EX _ >ٻIJIb4jr>zڏSЎĪ?∝0լ(“1c qlR:g¨$<`idhD])}K"2yEV;x$(s\j {Nb{?ɒaɌ ƥi|󛍙wvYCUWY9wH'0ۋq9*mP+~G 3~F#CaAoo=(tƐLsD6kٷ)?8/ˁ1G] pc5#h>Ud^g. |eh8In@gP;(DYo8+hhYBWA(UA;ݘdYO4R3sQ°ж6eu ]p t lb2d.-LsKg#G~J} 76y$ sbtvU+>g>sf$2R2>wq\}r,ЈD2+uNe0ݒjB ;k 2ne/r`c alG6%w/#th} 6HU4 -'Xz%U*.\Rx$qy TFnQu?PAKfXA8@ 5zbᯔ.W͛0+)>"]{'죰@ebvXavPe@tK͐gK $ ]0EZ=Oܖ3{m9?]/r_n>:cCd$ \<{̎ ѧvYW7{xM ӿS֦ 9r9$w-uF2WhmD iYX ]e5=A^^D^[j[l cgkjSAs'~ njzYgMBĨ.~'5Q꣌ F73t͸L '5ܦvc3Xr;{nx)X\%R.Mpݽ=N c+=åB.|`;7q/)/ӏB^%8(yvQY2W|vù-\$s~)8J7qzŗPni7[OҩsL2a9`bL?e$`;O+KkطgƷPefXǤ,Y4Cz Os Z fTg O`G#f@O|rIp\>=ɑ*]d\Ń}R4vpxBjѹͣ)^t$!׺8 ړ#4lrsz'Sm4PFuGg> S7O)dW}J;X@o xDh}RRu:`7-6Fu†'p/SL>qc.v#w?''9E.TeZ:dXȡ)n@f۰Ev?s5Ǹě gT|5!JW\kfzQ^oFz~\K%u=ק%28&Ngi$wx ڏMɾ|JG{o2bK/Z'>|LFٔrY:L#4w=pC J5h9y?$*endstream endobj 216 0 obj << /Filter /FlateDecode /Length 2566 >> stream xڍYY6~_X#L 6%`ն|eXl9(Tb7>dja?ޤWO_}0p?bI05W|Eb}Lu_ -W6Ly[ 2ymqm>+by-R[ۧ%ٜnԲQ<u yQ(^s" EҨˁ>dq'r,Ҹ5KuN:- 2 d<C 5AL㎇`?Nv2†FElzr-|E !˸ ;٨\:J ml/\p1c.fsNI}/ w'R<-]Yޖ!HH2#f $)ؠʓgRP0&p_n.yP0A/Ě:-M9t`̩om?6_Yё$L?/*+n; /k˕NŁ~ f=ɀWA;i:,1 !%{5]h= P-!Ey;H=irbքhMwȋy? @v,;_iX:5P۠D~ ephleJ Al X&o`IrLv .Nz-yb }2)1 g85Ǽr) {:5.Ц>BX᫜R,UT|L%5Z O+je]ulSJT(UeA3=W O!CIpJ,g 7^+-qf1{A~BBl˜^HlɞG=vJ* i~CwhڮH>9TlRa&^/gmïB79(rDpl̅tns>ϱ b 0:(o:ʵ iK w3:SPxTGr\6#sBq1?KLF>a`Art"!}9 z~G XlVnapA' 2YEQv/p]:*ױN'Q};AN99BٙM]B}/[$Y4o2h#AՀigE\FQx,x-x!v%";uZ*tSm RQ5# O 3mt?uǦs#죫ߛ"Vm Vfz:k@fEX?*r{a=^ "g#oi:uY7۩r7Lطfg+Q2JWkrpz' &܋Z87Q_vT P]PD_~4Bh]XY#URg (Q*SG%ӤB7N> stream xX_o6ϧd*")M60Nx.bǰ"}gEޑG')p-wG4;{Q6+lX6cb*S\l5bRN٤0>ڐu3DMs&5Pt,1 qf~[/YLjv2]N' A]v|91fS)[1׆n :w;;[~:g8-t<{+=siuPֲRevr @>-˿1=煷+7{IYnK8F[j-缨g 8-M\aƛ&E$l%*F47X 5 3SYJZ,(y '={'Os^6rllm=/RLUQt UPm*;`jѫU'eX ix)P^[T6qq|BnSʋK5(_$XŰ5QE";oDWkT]) TS6?@?IsXʣ# q (t\wm_;++=9W]&Y#!'͈\(-DOͣoΖWQ=By_IwZ{8skx! Ʒ$g(X k=T24W, 8\u TyGZmG f (eW.{.ȳ}6TG[ `oA჋5[KX6 tL{Epr\S@2@P;#fM$.B/4k3KV0 H:YOj/ f?kqvRQ.'B;'{vw#2ip-TE1_TMv 'x \Fi0ZvkMlNEyl8.bLWUc&%*S=kXq>zڌ H5"xsV=#Fv;>I:$숡}a+#9[A hZ̾sH(Ya5i_aŬC^Ny#˜ 7NO67 YTP8Y0e4^lZ *=-FXjƋ:\T7v S7~3?w)+ (|c]p ˾|вSهendstream endobj 218 0 obj << /Filter /FlateDecode /Length 1009 >> stream xYn0+tH"b\ 4"(ַ7q\Y '-/E>-ŋ z $k7f8# Pii2N(+2%E"͘(Ueʬ{5qa 8z089*fejVnoOR2$e*#Z; oߙ_fŽASiOt@3wxx2KEK-~r*±|̬)ZmSENisn3g_*Rw*]S)%l_BDJ~ _ZʯDx2D^NA,PT4ES6VN+ ,̭p.Djz{7e:uݞ^V}!bf9.ˀN,]ڐ*ZgpF{-@zOArwg(ƲTQ|tP$L ݻۏ@7 nl鹈2ه7=Cp|*0k`qS-Y<@Lw!{L*g0ڈ١%bpXw\5 f6g]Z纰 ܤHnڊ{!;mk ~ꩃ<Ϙ.42W-~qAꡳfA4C8rU컓fV;wҀglYONScS#GWq(yTɑubHߟY`qf[Lɑt$W7=Z7H[*׾p XKFVuOV#Bݖ/?`x˥U 8j2ahd&ӄ%IRġ+LCg)Ï;`Q {|?4C"sw`\Ð9i<9ZQdԷ(i&>endstream endobj 219 0 obj << /Filter /FlateDecode /Length 2155 >> stream xڵYKoFWAP!O>!,C 9-i"z5 <9"Q]ϯZ?^]\uU^Z'Ww66WN sj>tzg [xq,POO/;x~ʌ=-σl] 9 OXuL+W|/dB50%*"zωֹ6ɴ=(RQxw.~\*]l1iWsݶ^OQCV{OR0#qIG8NtIٔ*dAǂi=Sƕ ޮe5Xގ4c` SQuFBJ2[KL.8) ;a j _}SaӾ&"i簠d)f|/9i† s:PEl:&<O e- 2T!8LJ{-^=p#|uL)|}J,ovSyt (&Ǫ}ya\'J!u@STD 8I8~(8B b/Бf(9CC̾e`еP0xtr if;z"KoC@.d _P.:-u;bP*i݈ܨp H !͖B$,'ԻVSuد)iqf4~)Rz֔,s?T5|Te>\'g7|OZ9nZU>w4Ou\"ƋϧcZv0{b.k>)g&./{ٺ?qtTF*C̭vc0qKѥn߮+e%J. ЀrL^'0F?Ʌ$ )"\P [/-T 'wSgwS-UM Y]5{:4L#{X)It3x/+SRnƼ7A -9Vwuendstream endobj 220 0 obj << /Filter /FlateDecode /Length 2711 >> stream xڵZKsW|Y WU%$J|5 j%yS0yuO_7Շ/t֋뻅֥K(VWůY,WgZ?qi >^Z5[~y\2kn# ao?]WzzaZ~QL-|i+[WGh?qs6,V) >TxKX|Cc( A3#@Q~=J&t8(3}LK/y2/a旵`07bAc-&A}hv- qvc-qp>z|F%G*@4kv7}|dOAg9jbĹf8WmT8_űc@]y3bXc-ggu_007k0W'/INV6ӥYs~X˟CU4qhCg3=p  C ?x_\R zM6x2FV@(OÃa=őc!׍t`YC ɝaYI(XVe;Z0ZPE (cU$K BWρf!DPO|,TQdp`ޓ/v w6:ľ+D+(hX6 ?^01J@}3cM%zEn a`uk'XL(Q(XhOwt 0yʱ-rtaT-V&nEnȊFT`H$F.^]Wl{-3Mh='a&@inD-' 3+8Vrt a$s;0@Ɔb s/BT$`D/a?gb%ܯNL`NB+]rl Z2ypf'9-uƋ/bV?mڋ@,4[?x{m}„ĜM$pF'/:~GƧV #95^C,yd 419'v-a@E qD-A=]AJ|b!y(v~#kwađ0,E̟m]!)ai|~3KUf-*mrXSBSg!Ћ9p2Kes6+,>f[[+e5ٵ ԬJK8L  Ӗ'*4Qf1ys6D wfmSU@Gfە>G&0_FP%fN O& S8 `ln[|],G9!B~=lv Envc(GSkf .&9C(Trށ"6#e: 15*^IU[:lj5Ή;?}:I frV+&Yte5N`/ cR2ܹ 9FXMjAb\,3贉 _R5hU"l E>YqG78= qJ,V ]xmºQ"/\[<8RhEbr+)cBmjʑlǭ`7OSk@ڄL{~> stream xڭZKb1M6 lg8 r8 %{Գ)qćW7ѻ;kִa{g]U7wgß`d;iVwm3o?l{KX.V.9߯f{5ˆr q9 ҏcw=7?j.;>l'l!o x﫬3gn%le~;$kpL%& N@m6Hugω KX piXܒpL帉Kg:nZrFUiAM8ߍMGax n~pɵZW |D4^vw@/H(a:4o؂%#r]QI!2{WT3:?hRQ*&wsw.G 3s e'(n`Z' (sq3gUؕ (2˛ʧ.6ܶb+< }]rMӊ6D;>Ix:6,8z8.UQf.|ʬoyԋҥ__6i>fg?g= ț˞HiˉU |N(5`KYNoakja ']8j(Hf,"F>p-9yX.Di@D/&mj9P<4Sϋ_Ø)4IDŽQIUu]`:tOܬ#DzFvIJv1 .-G:I۪ƥRƁ35uHہ\?S{lDwMY~Uac̎Gھ&>D굈?x- +l8z]1żpa1Kћ`Ѝ9$8CLۜ|-yB>42`kz^a<"3^Ӷ5"-]'J"k$!Ns"pv$t ymc3n9O9':ҍ |A#}`[!O\QyU'9ӿ5 "lI|T(y=N52U{T:=*J* eWE=:}RceҠF1Mm)hauz̻5÷MzD7c" ea-0hroJf-t]MÒX?K0Ov.sW:=ʇ$%oBBiRǸLPzLvQf/\2Wι7Dչœsgȱ  =^w-H^]TDL+b D8?ԇKd ] .: Yゼs4Im.䤯孫Y.uXJźYaFh ;YW+i?myu ậ?j lƐbz%SɇPF99#Ijfz;[ES!cmGiq~^wY%ݨ5khNBcq'52NXx\_H5#.}JnjK[M) N)+r8e]}?Z4W[mq1M@zge/x%6@us[24PIqH ~spXl(-(|kwBCn߸*j/'m+%]d}Zx.rE\$9Ȳ&꽓>侒dBiX gK!>2T.G5zi* T;2tKpRHrCP>vT_zRp}I8,~p[{0AX%}\DtrXKRذS,D4mjSB768K: aDMA066Si%狙4Z$ \Cj#! "O<|V6StBp L_>;ur4Q^HpxvS8HeWm4ե+93Gendstream endobj 222 0 obj << /Filter /FlateDecode /Length 2138 >> stream xYKoFWB-צI$mu8j/M4I*$%8;].Eڍ"@hRy7GD2Q#-fˋYL4LٲtWsl̵6.xؙk5_4 Zx\]8_$q,/kXMʼ,=J`~k-@ n.sS4UV,ÄTϓ$@Z;HʅyfKA%W̛/gl!TĚ"Xes-jƜvOJ@f`9DM$,^Hb`D,h?'f]EAY0,l\0փ|`)vaCчw?![W&lJ] i~,6*ɿ8V\)$%#ٔebȀ1Pr*BQg6w"Ҧ&vi.3`ÛwQA%*26~^"JE() w l4 UMȑ %130:!PEa-0$|fbմXN.=㈑=%UJG(/@PLdԼ:)myƍίK.*X@,H\k.nwB-^k JB:7pi=-n%x+DDeڕPZ4\E[ź4AmAA%,TS)Y[̅YHB8+ +CF0*6͎C\R7pUy[v%0DT `beo{pk{1}BZ_brҘֶyV5i+(,bL-a\u5UXwhaڞca3䃫R9fծ`Ak@* r۠\Zַ .9Býq)06Ģ[#l$nN9%5^!+R jZZFN^;GWj;Bـ*wP5nNbzW6-g )s,kйnΊi:Z6fU;c< ` t(IRJKz9K[rַ|CφTVϱkcɊ߄ZMxvY":.ƽu]xyLu)]ඩʿk>xV,ٻ^p,{",(Lfvu3x]]07]}!P$?3 y.ӇWO[no=Me3.<^sO<zBoHt{</htm/N=-5k^d-' HNAX5~J ̰U81Ֆ*qbȎLL )0MϾJvʍ+[xiy&6Ns <tڒl]]pd[xSH3-5AQf8T-ٲMףT0C''ϋjWƽ4Bt6K'lV= qƇ%UС%MT:SvJH d!9>/Z׌5v%:q xß ̨qsGTǪ8Kܩh.@x%VK$`E9|pfr>hoQ&O8v8 \!&8;33/*Ҭyd&U8Lуa7#@cqX˺Sng ,<k}}h)sx&mC3}`I(SIsC m%rn0yd={c9n3>ϑa"AӠÉ޽"FSR 0ޑ}>l+!> /ExtGState << >> /Font << /F2 140 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 760 >> stream xVMo0 W*"%Y^Zl t;=.ǚ+Ǐ$Z&b EJ&p_|{|qmZmB8/ zkCFE9eƳB2]wo].dM%V a4)>uGo_,$tdঅ.EC Ghp$MJ13U|sfG2Idg=Ei /a\tH0Kr +%:^=oxQ'4iw!쐅˫ t<*L7 T_nݛ'+$zMs6MLH 5쿸Խe.S>I*鬆}2TA@C tf_&ʪp!h{~àN/kOPZ'uqaV&vu\r`jPN/ݤke(5T~ *񱎰oe&ۈIR4~xТz i6 WmVCÎCUɱn ZW2m"pi@MWP7k>WZ7dVQM y[sxF-잓-< %Oh4H p&>>@N"jlP Kq U#x U ÛZV{IX>N$n݀lP;غ̑mƖ+[(X 7ՕMŬC~KlQ~lm?`yP?^_?J<y1endstream endobj 224 0 obj << /Filter /FlateDecode /Length 996 >> stream xڭVKo8W(#"%e`E^=E;/JAQG| )$?T**S֛die@\zzDl+w' LʢX̮oKtbW䵪\OKo:jgSfƧx|[Xܔj)е9!9ULQeՁe9f5gx@vQw7mTPP(Z6#;V<j_50lY\ e_/bڴg+6u"6!3wl#>t}?x Zo]x| 6J> U]}7B)5=R sm15@#b y L/1D5 SG4g&ڟSs4 i&1nD{}?PWvLN`d$+d񑽀g8u'g,8.)gq.VZ7ϑ/mibwȆ3^׽dN@p6g{#Pcj37R!cus,0B3+¸N=F~3%rLNz+ Y(NBEire1 ēɷ dXWaypQ'M{nvι"s~疬277+q89NJWD0+Y0%vx9hzO > /c 6O_ U%~/X91]g-f?׺Eendstream endobj 225 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 226 0 obj << /Filter /FlateDecode /Length 1258 >> stream xXIo7W zz3â͡p #ЭAĀ`Υ$"Y=p{zcl&8܊l| m:+`Tx9z{.Fݹ6wmڧ0΍TnF\3֌n~9mgݸ]2ܳpmZvW\{.bxYZpͺ(=7Kaf|lyqY4rY2n-Hd :# V0\M8n%@Nq>J%J5WcB0+"9Ti\(f42U1GKx1̅˧HۄH zЪekCc#OGrl"<\= PcS@}%Kdjf,q 69`ӰRډ` k(FoOKJ_m[EZ@f 1ˠSjѶoOI5 ͎MDTO6 |*Zܷtպ#|?JJV-q-@0|J`~ƴ]aƵߝ2B˞/#1x!L$Sz0K-]<1mG0{Lz8+2`zTթ;F'HT2y%"Ӏİ4%Ԩ#ٞԣc3 qʠ+.3{ȴh!% %#e/nhҀXt1էz3<>RNrߑhg@4^lGM}Z$&&C7P{ IU]FT6wT3h&hS$!7kML Gre"tW LR)װBqED ЋAG:p[S~WJQ.$Xfl=ě/[#%IV!yj]j@ܩ fT yl{ߕƯD›LB(G =`k#~aԋAnSF)աԪ޳J!qN2#X~{!W/Im=ihyy)ۡ3|FF19?Ue0 BqyJ1^@,ҳgeendstream endobj 227 0 obj << /Filter /FlateDecode /Length 1129 >> stream xYIs8WS--SL ]\CMTB)h$=y86sxe$r{R ʖ|5Pzr4$ ٱS 5nn 6Jac&ի[\j=_?$}\j(عƒjtD(//rᷗ'h ؄d-! quƷy)Qs'DB@%ߜn5$,R! ":]e+I{]($~6xŻ#J]im|C{wŒ6tzݡ,(!laIEI$qr<:dnqSG9NGnCPg*Gڞ2?(n,AoHnZ)%)8qX[rFRFRfR}_|s?%y>ר LHS%Mɍwp*?J>?UIj:d"*Zدm5.™oj7bendstream endobj 228 0 obj << /Filter /FlateDecode /Length 2825 >> stream xڵYKFWȎrICEAqSO?vYE#bm{,NUk}AS]<&C`. /ϣY y)9a)*~YWߠFEIݢ-8!X(բ\WtW^K<_XHÝs"+L߱=Rl Y zQġOk,W?-) Uuk-!GI| ā^mcODJK}Ygoɝ`|tv|a't;88y^2z8 {fZoAtt=MB lH#tvR;!AcRyI/>XݩK\ӏV{wdOFomPvy oBAI%4z?˕ J`P: xf26՝[f]FbƵ;L1~[HvE/5@b]0dy^O=e /kn\Khy ؿokQ,?aWT pvwiK4%}@Dh&s tig%'"j&D+H\U8dz=Rnʯ'Ҽ_Oˬ2f, ˹\(K|/F1L$+J01j>v5CvFɯN [sG4.G vQgo PH  5mK$~ :$,86M0GPdtJ]f$G}QGBNޢ.'4ҘcxjdK)h4iLO vL}UÁ#\t) ,P8/8JXPK: n˖ }A4֫V ` DQv[2LAS#؏ر稄PNOdN8QJy 83 e.y-DgTt<0r?nVm2iJKwaOg1i?0޼?!O9_głj %qbu>0ϊSʓ 4-}ԅiӋ\TYQSE OTH@킘Wtx0vUL'-oۻ+$pA;=]R1܁CKДQ#jpLNCʞ~1 IaS5ͥVhǴ373 #j@Oxk%KT'GY,=7~/=pԃC&J!8O̳iQ[IZf Ԛ1&8rҔUڤ> qP Dw4s]Jg k=> 0WαڒC.XfdP *Ѻg+Yǒ)=R@Ń.O]3A[3Uɬ*J-X (иKz(er[L5,y%b[] yn#T63`NqxO;..l^Y, E<5ٝ?ρg5f p$4ƶw6'F$y˱!k|cǓ;zܟE\tL e2u!ZjOk-^D1sLV:!m&uK+!4,!^sjg:٥>9Bn*c ΰadsANrefM9LT="n}ť Mm c;zQl#KU2BgChe(7% VVo>\3zlz)~{$mliWp>Q,(%۞p}. RO)MYK~尰O`垯{%SE3$c26-eycM=dad\|=a8GC&xb/Dت7 _͟ &ˍ~b c &O?J.jҚ&.1I~<%~׳yÅh{$i*͕NzA05ES`,؂&P(`We%Aa ?z;%##pcU?? / ~ ,2F5J5W?߿/^َendstream endobj 229 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-kyphos.pdf) /PTEX.InfoDict 151 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 153 0 R >> /ExtGState << >> /Font << /F2 152 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 787 >> stream xV[OQ ~_GxssKDhlM_sVt̖iK}%8+|йA1˳>JQX]^i?;mӾeE\|Y  z އUfztD֓Wsz6wP}#c!`z" EB'كusD,JBrˏIЧuwH (R Ư6h@_b39"+ҺPeJc@M h~.KFqSPIF9ȩIk-̵d@yҠÕ ڷRi[bhK4WnWbh_u6L;,{WBKcrřNۃ 5MTo4GϥuZX+HʧE&rMjiS/?m+9V^ILU<91?1>,H=!Ju ~˶d&Z?~P!NJ~EH4 L4 ,L-ɔȜ6L;g#/ܱ%${:v=hedy;٣F>w,06K'H)d~$JBendstream endobj 230 0 obj << /Filter /FlateDecode /Length 1264 >> stream xڭWKF W(+yz$M- Ae"t/k@f!9S?=-ʩ-}fs3]&Mtf> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 232 0 obj << /Filter /FlateDecode /Length 1895 >> stream xˎ6QF׊HzZ 9EP4AKre;AÙCym=$t9I\&o'B8$"̗ߣ3-Ut;$5Lg4aQyN;^^`ٞN3$ͣQ<F%;/+ZZ2tCWe9qR8d&TӒ$2x.6a6|U?8͈ad0gĂa8zg!` n+4*Z I [ \2ᥤ itߝ\p6a"HL 3T})Bv Sb¶y 7["Qb_JA}ԗ)τ,BLf2S>k)U qݖTn+4SY i-W{+YHU 7/ ue=3Mg2jWtץ't"W1m2K1$b&@KT,[8m{ aܠ~?ٞ @  ^C!YKub3eh/0QCCRCRU|nj j5 R`ɓ1$*N;O L%géP*'46h] A9`Қ ؓP^:Z@hz&]%m5myc-`a\rP̨ҌMۀշVueXS2nWEP$b WL{k|R bOgbyR|`?kd= Q5LUu/c!;l7J NXWcV|K|w2U_Nb遆mkvݞ*̋KR~%YaU\Hw M4˜jk uZAf8Icw:)iAk%8NCi*lĬ DX Yn7 *A,;%+8/=\R6Lq`hh7ZP@zTk$nvH0=PBNPz'3/@j$~r(/XɁl@s2fb.I.2Ǹ(,6- C @ 9yl7Fŀ#> m$6!xX/jL#{rajAOh,:6ði]e <˺ޯzαmXi1p5|xSVʅSi͏V6ymA1 Ո4 6gΓyvPUށPbɢ%p& ȟ^Z[;̖X+&A. */ yc{ί}zB8xmP1 ~oy#7'-&tybKWIy]gԖϱA&-kRF8}IfāpqNNTg$z-ժysRmI\$H.3i2Uj)p2^.K2 &2V5*q#1 7KAq!"`-c{5hÒ ;v}f,{̣~o6Dw1(Iƌ>A_c޵z3aLr=$fjo._.O)>)Xep2fq}XWv̭\XO}SE\0)[#rZĄ,PZˁGs$xCIZ1xfEy>z:/Wendstream endobj 233 0 obj << /Filter /FlateDecode /Length 2235 >> stream xY[s۸~ϯF C:m$ڧ>0-i*ZR=7 {M2-<88w|ūw,Z734YaUm5[f?'Tr\eyjnILixRx,O!u77e?O8(t|*y>qufy /P_ϲ\5|;eى&Ya=wfԑV<$- jSS~ -V>:ˈI/Pٯ^_\*ԉĉ} Z4*1;a~^ߏш|wvsσaS;e|25j-U. '0eNdgJs+ȓ,ص$ϴU֦ xxHÊ ;!<1 q KFǠD6$t^&5r+Ad_ ny Q$њ uAv[Ne@Rw$XkOcd)"5!V(`AaA%cy9SyjB1lTZŚ 6yI.LJkkD)/2ʓ.$ DAYj+p#L:]a=Oð%SY6 +={i6#Ț3>O/%#ZfVmN ǦDpS4cgvκctZWb6m,vp\&l$4ndЉa,1N\}hS0p3:PLG 4к$ƥ-a@o}[ԇB4*hh$)*>`"ь!g»>'@8u cȨc2mžWHa_p8`"9 +>nt))ó\\T0 KCd[ ~Cq58/Xh/HA7vލC1b; '["_'qkS:o'EOCe2}LP W)KF/xKsdw-2/YȜ5^$Y\uRxr147Io%ڔGbZCX(} ) (SbV8MpU'WyTwN~%=uZ}ŋe$endstream endobj 234 0 obj << /Filter /FlateDecode /Length 2087 >> stream xڭXK6WTVHzI$ͶHQH䠵-e&9 5tzE73 G~1{l&*ϚQ L5fRZi[OfVKecᬮINRJijjp߹nua]=M,7=Wn+wS[&-7NIۃL]oÂtܖt M u4I.upLҒY]zz@Lf[Ud]IB*klfTeHjݳ2|z"x !zr Xg8F+NbPAB1{R,hI[|3յ95"i: l %n8 ~?@p?1όQVG,E@6MxZ'E$9c&U.ʺcX7]iQd9 &Ee0=K=p~p,-4[֝B lw9ln9F;/3ؔТò (nJ5q`lOE|@A%w*kl4h6Kgo^Aa3{pQSX&{2<]$VcTK~];dX4UJɫHpәK 48븆i@S wn&hzޢܸH0>p䙭˸kScC?=1aάcsθF6.@cۀ7}n 2K %+kZ♱CJnE1ֶJT0l`_c!a*+v7-qg1 (h0Gޝ;E^'} `0gMj;|Ñ8xw>r:|HMa}kqhjӮpTϱ؉B'i/7 yBU׬=-.s%۞U|J #g]A 9I-7xS@7I%c {Ny]:b_Y?ublRթ*ok!;9zk0 Lg -\':4`Q|FSS$Ɛ&x0@ƶЮtڞzj*Q:?:ڰ/RGkC%TQҽk  YsV3A"6}d+b\[ 72*c!ݻp WZx@mN]1હk ":h!q@h} c'ԏ"'r&6.8(ysJ`|KvڑᏅ4/1Cs<97w, eQ]6@d-*4L q\D DUՑf}ց΁҄$U swdIu{_ T>WpEx@ _,{D ƭ Ql>(0J"v2 G Gu?zp-*Kc=nx#([s˘#/Vge у"U/ یX瓧@ D&A?R_b*yU|5+2jQ#}1^:Z! NUj=F82U"S&o<8 q唵¿=up[Q}4|WC"(1nl<46j?a7ޠ/E'5B㡏Gy>Ӽ/E_s\(JŗjO!+psO)ϰct' r= p|^`oUv$k~!/FN?:]ʥ?fendstream endobj 235 0 obj << /Filter /FlateDecode /Length 1716 >> stream xXKs6WHD4@tҙ6z$90lijۋ}E*V|,v}`?_]~0B\\.va˝sBf-?*?kZ?-ohWO??<'c- 8_ZŲpy;es# |Oh 7Ԩ̶ y4a{{aqнGc~?[{:Y(%*MdJ'  h;8qpR Zaek e#Un4[Z^h^2JjYJh>ge8Z%ITp4!tۘ+F 0f]q1+R0SI"K0P#+F#$ B=o F3x`vᩐ!TGUbKt)``r*JO!4}*$aDL &K1*zHg B9ǢtY⃸!v&ׅZ,}ז@R4 ҕ^EPSQR跋…UL6i0!mG (;ries#)0T RP W 9aɭdz?5#t/&rZgC܅DuXM蓥7$&.VXtL+yT9Gߕ_72vrSh\5xSFt=Le'EKg|h> ,ъ@ES(cM@`?ӻɄHQ195.'婨$\*d8ޔz[B74cGW9HaجHcGC,ȗ%=)`WX|+a!Ln!c⚆Demh]р7mr旵 K!Nި'aBrI!k&՘mjQ+I\+5V&sMBTTLYdY#+;Bzh{is}?R hҗhCiiMH{Z;o9wB+v-Ǎ8A?mȹgs6za̕e.!׎@Nendstream endobj 236 0 obj << /Filter /FlateDecode /Length 1157 >> stream xYKs6WH͘ H\tNԇ'V҇eg,䂢,I;A`/|Y<;3MBjۄTEURR'2S4Q,,TjM)YNHh z[F?&yVl|sf[ia% %2Vp4,@ tn(j7Pҽ?~mv+K-aCo-ᡎ.Uc }kM9 &dN;KJ:]eeM&_6J㕽HמBeQ%Zn`l-VI{{{`@ߣ/xƊH w]vwe%7^pji Vdut^IK8IރBT^K]sفS+`U9(?8]+şǿy0x-yC6P 89cߠ?s6>09;i+[0#*vpei}*3 z;\ =1MW6t qW=A: K+Zykǫ(Լ2#eÊM,ے}DyYG8@c8a.8`%^G;v 8w j!C`ϥ'qs }wnaSiXM\ñ1<GWZc%j;j%t6Rp" މm9 1(?)(\A{gNrn _62%CczHj 0@.F HNl tZgWS8\ `epS+!$ROutx`M0e,ˏ+?vß qi塥bЮw2|dQFB||a"ԕ8xa7v\qY(n_ =ܘ/#毼)zjo !,KqW9UI#aWЛN^ ޖWSO "OgWO'*GOwi8.k *N.'-o'LMHlُ/zw SvVcfm=e*Y~JjS'YmNS{iQrbq%GMendstream endobj 237 0 obj << /Filter /FlateDecode /Length 1741 >> stream xYKs6Wj"xi.iv:i&@KLyDٮ}@%J~f,\,v}~w͉+GJRjtv1RJLe)]1:L>UcG=N6I~\qUOOꦎ+&l*cǂh8ղtɄFW~,y?WnͿQ{u\XcF2ْ* i\Asb"A?ԏ,cr -$h,"bJ'Y.1?5q%̆FB>3 ?+1Ew^Z"s}5CrR%mL!r91_ MNIzd}[ {vJ<5Y2Mp?r[Mk/ MOY%d9b~~+C1БoY~gc@ PIu.^0G0^t@-(|~oʿ"=svu:Nx#fQ--afבqEigcKl#/nҌKv! 9կQ^HQ"1ʦTGzѰSI+ɑL%{7cfU|7P ]>BO:P'cvB ]q=p#e6Bx:BQ =cg, Z,:DB2mBXd\/z-=9rܴ;Agy)n[HD.;y}-e ؅&=>f jMdm0;4E8ko_<WTG|:y]"\$fVH+yfibG2 V8$CjJ+2=x=BotR{SJ&('309#rf E-Ԑ kG=i1'rϪ܀JQ.W0Y12t`f*ȭmtE.(a)neIgEmMmGw4[cHx,\KqcfXq^F(cj劺%JY-| SP;pf>VU#?0BjŻ;mʹs NI^KNx cVm:$̷"붟V`Pn\ľ ?\y d4g0O cHE/pV/\q"Feαݒsxfno:ykYaQWJ&)gGUO+?U$%yHr0NLKE!Xƨ[UX u5+6((bERqL6}uؙ'K%3N@U|;׿ !?]{a :椊tFw"+ 6 鐥Ja춳v5{>UssH2SJ -&{7&O>-Vendstream endobj 238 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-anova2.pdf) /PTEX.InfoDict 171 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 174 0 R >> /ExtGState << >> /Font << /F1 172 0 R /F2 173 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1199 >> stream x_o7 S1y*Rע`؀] 6q돔x'<`̐y$E@]*P7nx|B:es~U_W?T.^FPF1@2Z2٨s 1@:t מтI:' ,?F2|rVjyCfx7t,N,AT wJɔ fFvFT0DNǝ1ڢ6ZI]RHv."MZiQ=M_lҋ&~+Ԗ|ߓOޠdd}T7E-ȩ7h]e\xW:_<ק/'_{o:mʗ׏:2vV+5Q&5-"v`xI_ŦG~y;}~}^]}bl\tI PT{H@xq y-Aw4NwNv|$ࡥ?*4EȗXmq4^*R}/r$9 voިovWipjQ.\k<&J(aG*J&eC"* yR Ȩ!l]!m gl.b;وQhl{E H}pb@gxFgxFg!C~CɍO)` O(@6HfCEmdDD*iHv~">&J3]ܟno¾>?d ×?ϩK` > stream xڅVKS0WԊ$[~0(DL/!NLb^Cv2>v%i* yFĩD mh-P-E)ޒ<8+f_wipLmF+]'[e%E! W=T2xo*g}hj, i$jVJnYOuf=Ty6v 6M ڒ|i5Qme`S/}ӧ٭)I[3o #+$5DzF׊ULjEN(2"KK ,: GS,X,XlX"T,LRPH`Z!0;ph4e"dǪ7TkC]cĊ:= t1/@QŞ55%pЭP~u(C{X+*dI rP8@gGY3$34#֍V,(FCKWrv%;65h~&YۺꐭSlBJEEcAPq"#?߰zEn_nzْ3#M 'Zyvacu&ngJ`s 6VɁ3qAbSql74u [zl~`!pD> stream xYMo6W1X(]AHh+iVv ,p=쒢Ἑ7CRTF eIQjѢ4|@iI ~⧌'g} 1D VPtx2p $j ֐4r%iۊ#DœRP9 }&rQRa܂~Z} w:@'Re8 GyhO^#"Jf@ka:{JW5l3 #ZD C *h2&@~⽂r1x-Lo >YfD0 b-㎆kXTX Ե]=!aQHwRpK$iMZHT P&0<[\{-*mO^b1m17eBIEޱr [TZ BqgGA=>ϵ,| {OQ𠆈 7/^PrTiSJ(Uyס[<.OrrIpYC^}*ެu_u~RJ~KΏYԔ^攜HJޭϚrS ْc7ER*+׆7".(yutB hFnKnU_WY^0b(s]62?oE uAE~iY2BIS,hL\QrV#,lukfSRdX.[֫Z_.5*Vr}f9} μ] qcy]i)vU.M%G.o`S_LMq)&X׀,`{qx iZ1z7Iu朐ۦ "Fu$ y/6IfWG*ӱ9$lqvu3ԙMf4lc$fN`~& n$v$ލl0C 5 T,8򦆻-Jו]{g[ $z/3s67{z7gfW؀`~~*[ޙ9}/RaYɈluv~j}JSrda`20cW^ d`d$c`q᫗_}kF meWn~.i>9{O9R: OZVFzb"L;^YFq0Osӎ8#֬cqS;z8is3i۟G㦆9wBvN(~|;Q ܌&_7gp 7 o$_۶'Dr3Z7J9Arq<]_> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 326 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-anova3.pdf) /PTEX.InfoDict 241 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 244 0 R >> /ExtGState << >> /Font << /F1 242 0 R /F2 243 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1153 >> stream xZKOI #9]kdHYe=,{H i~\f4"eQ-crd gƬ'@"7ʀxQ ^*\EuIv!tm xm@1b4G:SP-YOt!@QX6GRSꪹS Pttrv;PT&m4k'U7;"\!]]}p;٤*NGKβXv>6+7F?v"kG=/^^nMn^5o/qVt4kLTOkyj ɭY[YMc!{!Ɵv 'h!xV+kIs~M]ǁ+kY/̓fNtz~4V<@^xЏ3M]lshwn׌%1]DZ?]n!)i!!_Hr\|T3|m"l /ftKͼg :mpn Sh#L'8 Ia#΋ WsSSsK[4%a7rg DZ ;#o䆿m5ߨ{B$8?WxY Q.5 [31Z8Sl/}C[|@9 d}ۚqۛ竳/wWoNKg}|:>ݬ_~pBB1FU𾛌Az@6vΨ@uA Zޮ^WpL&+0к}˓o4+M0)7aXOfendstream endobj 327 0 obj << /Filter /FlateDecode /Length 1481 >> stream x}WK60zJKhoMZ[FͿ<%Vpg[YsX">KVӗ''u@dgh>h|Kb$7O\X9t~(sqVoaõ:JmfQ(Jipi@b0'w NInT|"ˀ4u((L! H9Gr7n?^]D%<^Uc$[2NuYg9d\Ȥ/vKU] v[nlO(S!\|ǖuY&azQ܇i`:3{@L*#ж (%U/'p`(֑ [z!?sQ*3tGYTtg>t?r 𱵎J!o,8Mg_ dw7~ ?d7W [hRKG9/%{ygAX %E ĺႜ=}aXPA]`Ptx\vMމ /ҭOBߥ4XK!fIMI60mKYT)HF#-RQ8`3M_X ^w6{f$5 (hZݦuQB5g65_i Ha'Ÿ 4Tm?s+HB0nx6-2ۄ@, FEgQ01O{$EEkiN"5 (7֞wՙhഹC00ٺl!h.2O4xM獶_`ֽp5O}=r9=]L(pՀ0'v8Ҿ*;atT-u:NX`/tECo I/T|dI&C;f%e[,#hO}jމG3纽v2kx%BGgrޞh֚&ho#aJA\hYw6f^ӗ93rI*RԻPpA; 7c[BGϿK} 9>ehp.Rl]i z":N%~txx/gT{縓NxSo3W{ͧ7͝Fbg߈@fF60d%eFzS$AUVRWČR)H6.+$cNĖqC_K) \{zyk.endstream endobj 328 0 obj << /Filter /FlateDecode /Length1 760 /Length2 1432 /Length3 0 /Length 1968 >> stream xڭ{>Jw$Wb߱", Q.O}rFX(FB0K"@6$ AE#ܘC`_H,Ös%o%畜Pq$k"@!.@h}s`$XؑAev.,ƹF9T-~96b-A}7J=^= P;rG%C~Se?޹FӴ0Ki5%m-//qb1lheLgDTebFVf4̂<M+Ztry?vo5ٶתi_~[buym06ijKK:JWzx8ތBe%ZAr֑VR,N8N! P,g `6;Z(* Sם j#9!{]G@蒙uo^ͯA`ۿ69ɨ ZZ=wߤ3o16Yʲt^LzWwϰ#TkDz_ n<(K,2m{eosge UJF2|-fIzE)c[S~RSw7 󏢦&y.}pE#Ĺn烵k%z~ wljERRwvd]~8L|fJFo.cNNY?\z<nhn>۠Y{xpspC-eSZnJ"n~qyJ+v:aXZk"ܿ)lMx0ݒ3¯wϓ eнۍ &x1WaFO/Sܗ;VH*TyF ŝ۶anv:]+k j.:/_V%^h7#I757̪ϞHL+㯓M Pd8jd0ˌ1 e[CNUkAOk0qb]NSqiM.1kPSKi)+Ellc&3y>;?@˪5*FuW{U*GJHj:#!!{-026w^ㆪ?ܟ9~QO̖= 2E@S 30JiT{H8@O0M-! 5ZGM~"YV8BI- Gmo2onhĿM!eg![s{t,7v90 i-وMǭnpOaC ፆV}S$j8g rX9 q:sUkj/gnʻ-mJgqMxtn0 LeU.qf (oVeg5ĩB0$)ة]D"k]endstream endobj 329 0 obj << /Filter /FlateDecode /Length1 825 /Length2 1907 /Length3 0 /Length 2466 >> stream xڭy<{mWfI~ 2mJl2b\Isg~d`5L"EʵԕXUdQPy9j]s GЊbsv$g$LV\ ~U)=>|YI!%^-,P)(U=җB;}ߜJzo~?'Z䵆5,<3lv;aNT:5Rr 5d#~xxLtKBXN^؝&ie RZa$IoQV<ޙD.~;gF"qg;SOW18*jW؉sFCy3TQ0Cy _MVO]TzhIA p,?$ /tVgApQ, aŹſ!Li%aǥm-^j3?w=:?x& ;W5@KĿ}S#oZ= 'Lϕ>ˆ_HZKq8%qGMex@+&e+DO'%meh -ng:OcGf[sƯUC6Cn&mpS٪3.$| )ϬO@" Lj۰s]g]NZUWNϳ:4I5W*${snT/AI*Lfy R<' #(nW3e@Ϙȋ]uV8+wǯ-=ZXآUnnP̤fi`-\nFv >U^_~iM>ZM:Ar~n:Вaqt/t9Յiv~R<]u+Jgo\%ހbn6q JyH#>&y&ԠS !K6=kRf:/WM\_ v=ZK]91{ QY{W?8oCM,Iű+wnGXu'kƢx/}<{YF yj>ISTo\a(2a`qVXx%Ù,=J*՚e O3Vee+=x|2?:Jg8ݓ3AX!Mܭgmnvi>s39_a^[8֐6ۥYd[Y@/2"4:,xjyYGk5Wюr'>΀^!+Dc/JIBB3;G:sh|GwQ3|Y[w~Ue0n}X`cuQ)1R Qlʖ|tRkN fvPendstream endobj 330 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 331 0 obj << /Filter /FlateDecode /Length 1365 >> stream xXKs6WЙH A'ɡS@K2-z(ʱ/c.(Hu0O,ZDSfcTU.r=2($?љ1Jjv7ccڌ{3V)}mH`ǹa?2 2v@~3mFgD:Q/|t:fZ1?{ XxƉ`,kŰx)IMӤΔ*Pm@1YGs蛳k5#BU޼26؍g:oWdeKw LLpG S0**ԩNUcXoY'uvQ`lcȝ@E{iAfWt]–,#ץ2Ŏh)UԬ&L E\z ,~iR:s()T99_7 fJIu=` I8x:#ףjLb8QYW|pvw0զVSPu9@‘M7Xr-jv[`oGvY\_)+}.$-#n0g79)kLBp#ּ&޶vG`kb7Ν{8ٸf񗆛~H6(efV#&99DD&?{}N*fH ܎@Jj;G+mu}P&ԯWhZZGE\ZlA*kݤ)?MS)=䷓&)idq˅^v=\.{hj,쨫*5 +B5L|}7*t/{<[?_ dv~Srep9RqrB!OtiGQz9%4yIqJؽꠝ @)`PG-MwFnD+!{|D7oԢ=g޵Ā; [$(nڽ`R`tDm ,u*$r̅?<'^L2@hkS0([Öya$8E! 0axbP!%!@LI @23a\ph=20Bx*F$^R# g}zr@y Xy *P5B2cGmXyCHcd> stream xڝXIW4 جE 2&@4-B$%=ȏj9Pbmo{ſ=;Umժ;|i/}=l~-JSӦ8hSSȰGeUIU4nhۿ 軵2s, #g OϟyI C$ Te=S 3/2*aWl /Kvr&K6JW rWj!,ϲ@%j12_D$QFDԙ ڄA|ɻK!*ڴZOn=@*>gJSOȖ6cowtit=$OptTxYi(tgbvg츤+2|x'?mh?0ЋbK]qjPyvHM GzFYpnu1ce-M)WZ5Ń{Hnڪ#O駋 +y Is8Kb)Xؠ7џ^Гjp;_8=f;=-ţ2 OR9+0`k[`7, I>'nvFsIϸLlC)i^B#Xlc6ipE43D(ؕOF #[3KcZ:?.%+mӆH:wӥ*m%nMw 9nvDŞ .Q`²'$t5Ĕ78qCVxi#W&L- 1AO ;.p.F1P:(-$B(n8, j G]m6Vt'=qFf!P$ SVEtex&.M*ECf ϶cllUvʒ^o7l̓U[Fqa{8cW͍G`9 QNv!UppÐWxê$ѻ 'Y-#1'e6eb6mH|, <  F~+SlKRc,A_cJhK,41dj;cCMPZ"'6 #Za01$ ڜÈW(E%Cז`.JaaQP4u5PMZ6R$879QEgAbhBYFMЬp?>rH߁;P vx2P("Mu 뿥N'l '{Qdf!'wkÑg@wJ`a"[$,;Oy$\UJ^p%9}f hР V%ijMNKѮ;K+&j}Uܸ8Pe 8 jEd t` Q(WyͻpH_Qzml)IHZP#íA q,Љ@Eq4yW)T.>9|=,|lq%|?]v(8NVCtx6ߍp}_ݢ3RHB&J}z`FnOM$l:$I W<MLXlln@R om+~Z!=EYU x0$ّ*[IE<S/Ҷ{hHx~QBʸ&eĖ~b'0X٥颕.lIbXb>풳5e79 jU!kb~_i@AG7xHp^S@p`6H{eczI.ciR+.vK&hKP!XErtpF<-/.lLOd(I9,-xCR}h<ҕMs Grgs ME[hS4;}19BCI|0V; q[YRi3EQ?]o^EYIb ,_% ^.°M ?펷_~9` }3Y!Op2NHQ= Zn@_C84h*GŞ*sy" gi#ϢP턲ؓ/Sr[# W2> stream xڭY[o~PwrhHч @ dShKtDynsnCl9߹yЪlT mz.ŏ?wV2jx/W&._uG˕fYn>NJ.Xƽn \MU $%iq W QKv3H`3%K!rrd%[⣉x_R9tK,qDW#%]+c.ҰFin+ &`B&Q5^ Gi6t{1?—VNi 'ggϨ҂y%0&(Z`4UV`iuΌz웪Rb3(_t#Oy5Az2(NlBSpTJ+l r"7__So<߸0&x~exyFU:{Ƈd}/u0{_ R+˙o۬8]YU#'{3q؃<=? 9C7G˦ UY!9vT[&i73.Qؓow,_@ ¶d{zye8A4(;ĥF分d$k$r9Rg`k uHV%-QMIW[ŧLpɠ)isrveդ;fVB Pexك!b6ǥfntlѕ+o T5I1KIS "!l&s`GI*'񆅁H9L998PJ)3vҶ9eUbI4.kl6dsyrgD`yJ>JabX}@X1]̠Y\cj3랽aqp\hga4iqT`L*S֣V>fkJ{D̬1Nuvц͒6H|āSb!<6M ZԿ.a!d>ZW|Obx%HCcǵnLƼy|BM?_͖)ix"eO9ݧ&ŇX{0N BL1BzUU\DZqqKJ1>=p L᯿^xek#?xzH%LlÁؑ)Ӹ٩uAFɦ*'O_ֱ:Lor1cX cIT!x-6]7rfAOg]'EQd$$3I*"R -)/4bJ{] d\+BVTЬDB`oFuI x+ZS)纎 zl2 &MO<ĵooR]cNK0֧ׄgbD<b>ZE9M_ynfF@[Lظ-/"LR 7Rk2۱ŋ\`V 1ϳ~:ʻri)jd]×jDovcfʎ鱖xV eB 968C3}F;DUޮq%>kX Ltb-3hP<#𫎸m,j!|%hK_s]pImtL@א|u>7bfgb,Ջ9 A5w cEr}endstream endobj 334 0 obj << /Filter /FlateDecode /Length 3367 >> stream xڵn=_aet)v0fE-vPl%vc[eϥ_s%)GΤ!1/ṟCz)g&Ϛ1YdUS|i2[ֳooymzQl:j?/_`Fo7?gryf9dfUT9f0/*Lb@3&J˳EZvGh௿Ҡ-x?\DnΌ+2fu1wgtE!+oHS1&|-'_&0wt㵭{+,l X5J(pTy}9 xEbC}{ȲjWࣈ`vln.F@{$<}܌Gn5dSFLIRs$Af,)>k@XGD w#na 7(\iGW=v+]* V)z~{"Nӊ~GMqfߞ7%AG4ex )R7$ ,0R0Q%[8Ls; J=N7)ey떧BPIhF$mN/<(< "9S),D%ZSU}TFhxP|MHVؒ, {죻@C\>=Ȟ-ߝk(T1bNىdؼw)8R3'v8??V@sDczznnv۲; &r"-lQ5OnITtEd}ƱU0,Q6ҧSg̕mI!w\EdQ Gu%! Qdzb^9ٔ# "]ѵ:6o }{ԃ HՈ$$+5mh.3e.G ΗI`kGq*B"Ÿ_H}_ rPS9Wa!HUuuJ!\ òWMf,(QfZcċz3'5C<0$SjlEv@"Yn/'xuаĘW'T9 ccM&Ntlxb'>0.mf*ƭrwxƥr\m?ˮU ZTPˊچ]Ԯum2/h7L)?)$;znue|ff5Ycgv][>[)s'܁Zgz;oW1;lUי\0dVlcFOQ8veVp~a<UjJe7c}ټM ơ&9j;sD@2:BTGs1&hj~:&sڊ&PMSFLŠ8Fq8W?p#k3Z^>{&zn+$*›$PyjpGSôWS&뺏ƎAMcMtΠG sX%XD/#&?RuDݐJ7ctUš (Ġ!?ll4 Pا!^nT}紾 ' !1x+IZa$MOCN ;hV`-s? ޵rA$s kb4:]S=cy)Y2_8@uOCSA5d%ܒh+U.Mf%\sbuّ#JY?Sj3KNVe*^ً\lLaf`fSBaL H:MҨD sfl0*uvyotdМ #iF#R2<=ZHU Hw5Pe vfl͇ |c)~XjjB@ U Z+% ALs0TBM[}*_]^c{{rp0k}*KQ01x` 0a&[i!P}=mJ6meF1#V& Dy䱊?{(MfEVaY, XF!nv$f!Ӑ4;2E|RrB44tPeꪓ&4+F+r&`KE k&3YO$ت0Џ@lHN)sX㺐 tp?qiHEծ|.ՄTslOo~PɁߋSVB`9#"f:i;$9ki|t6R5g 3yo&2)l\BU%$Ū4%ܥy;2DSPIC*P$s@oA wk x\urL4H=y4GC߰IŇT9OA?TJAGR3ٕep2`+bl7Gekճ!01? ۩dT )}>)nUp(CBVJF5H 9I{ ,FM(!yf| *T6kM7t'r*oy背_/~3I 0)>QY$Cr%[b Iֲ Txօ!  CnqV2Q?X']kO#?Ό"-1Il"X Ԉc}WW4Do M Ùm@1&zތy&gh<$ 3oFضF3;𡟴Oyt[)5a;TF$'@m+>֐L.࢘3IO9g [~ 4-}tEI>d`${iΘBNiS4Z e~dd"]}|YR\GOQ AE,JZ"@mF2䫉 I?xDͤW[Z|tU#k@:caJb;W$ɧSŜlc%@iz<Bxj*Ӈ7H<ϼĖD0;<2BɫoMʧ?^ǂO®MJإ2&MRNT:c$Rmx l@ .F+ttVendstream endobj 335 0 obj << /Filter /FlateDecode /Length 2027 >> stream xڥYKo7WUj1>ڤ@4@ `ݚ:^D^َ/<%7+'n(>f8CY?{VڅEr\HiE-EsQz+rʬuCJBel\cfrKƍ_[žN"F tG@`uK>6w˿|"'^ќN<6RB'΁0mE)taN{šA4qT`i(QBW =h=|Iղ"HrR~_OY_6kr*D^UA IYgqE֦5!'rZ^@0ap"({`@<2ymSAcv‚-aТ;#pPkwq繅yd.u~R|)KQoZx@C =tw?ܤ^Jr"#j!+툡-9;wفt)m4"/kO[ KŒz R2xxkV3榥:$ضCJICDƆ krB|;*5RUشE~#}G1vxA]d~1a|ԻGHh8d GvVUHGtkt[&=ƍ Sf̩UJcXHm 33(jckXV EjYّ;hFoQ :Wtyv\@أ2V_=PS䒕(\lpjr:yS[-rHwkBc5FL /Ƭ1 _\zw [$ǎD'3Fu6wcJ% / ͹[rWerOxR/Er-rS)B+k##nF{k*a+ 輠>9Q~-\bs[6?LSfjMt)UtV #c2|f0J+Tf2 44x?|4`k!뽜UA,h/nG]oC:2<ZrtZVszOb=hy[ ra/kK 7(^m5O\!{ǤSHsp!\*Zp@  w{'G׉u & Ptgػhv|V ί 4T% Kg1K]#mPbO6Ui&Gݐyݲ-2!YX4`֗*j'wf ?3F({5V92o"B+hpuQM?-jخ`s"\` #~_?Dendstream endobj 336 0 obj << /Filter /FlateDecode /Length 1162 >> stream xXMo8W=%h͊RAjvZc8A{o/E>RC@Hy37#6;zBY[]TsfL覚ͫL~Wݸu׺vN7MK'a-?g 7LKl;x$Ӫ B^uo̦73d+~E%O 7]q 1~.oS}LOvoN[77Î%kh!k N'so` 8'[} xN'g<+jGyR Q2XV^?uUyZL"#"f2ITLMkޞNZif%&²%g4_Õ7@XrҢw]m:Qڃ)Xn ``e(05(<7N1W_‰ˣ(|;l-Ѕئ :% 4C1%XW\cv 9 ׸ ,2 n(2ݒU>QsK" -j;7ke$^i@$ƏMKm`DHK!U) pڒ݊0o^ ι^z A^+;R==37L7b[w^ &V\BN*&y^o5W^#vIj::zX@.3锾-h{%S>Ƶkޔ0rAZ#TCD,Iy_v0dm0̠9bHf6d Ō(Pގ틾^Ҏdi 8+{¾Z2,5?%5o~yC=lvteU8!C^nۋ;9A%LI毺L&m@4i<qm}7(c;-AHqftQh[}Mh7PNIriI˫S<=|xÿO=\F ǟoA6{O|>5=~i?a o]wU|'7eVe -b`l D |E;[ȏi]<;hb?J4@M* %e灧/[Ìpߩf*Qoendstream endobj 337 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-poisson1.pdf) /PTEX.InfoDict 261 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 263 0 R >> /ExtGState << >> /Font << /F2 262 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 434 >> stream xSMo1W0{ȡ"8T=4|$@sǎaV=xg{3zc\~뺀} F‡~`fk_`w058Kv 7BgCv/{‹˷r7\vUu0 zJM-lH>=[8jX+:]{kvas҆z#<+G${kzKvaI!Ʌ]oJ%iي~v_wo&˨G @26 \d& oJc EP)m~}Y/bMlلFgI#яೠA}Š> stream xڵWKo6W(+H=K AX-w}E{(Zp߼hUYWI^y6WAZU^:"HUyXJp,Rfh|bumbQaT.-}\i:Eי3&^>i`\lz}:ֶL̸s= XZ3|jk*3Roױ˹ժ4P"w߀o'p9j\=d; >`H E !1f=kel o1^ "^W#+wKdjQp %tt~:܉BG Q% A̒]@zk[ޕ בxA,0̄("NSB5B<) tC@ط;^̔@4ܶӑ* |sKZ6gYUL2W@3nÎmNnԪȏL -&/a B,x Ec$ƴrY~]&BJ"%HiK}'SJQn5dmd]6b6RPp`JQA*#d04dp}F߭ ٵtJ;W2 }m%z$g"ܾwЍZ.5kqCU@pQ4#Huz^]V&'7 qŚVe)rݺ3Np~~Z-?Sx;?v2u{4e xBGP2`P:`I5Ga(QOK# >̀oVASHk 1f+T" ={PCMsΜ=4ߤsl82$~4H#+Q\us_{>"Dh"ei+/"/,B@0yTw]܍,KȩN&:PgL:Ч i21 @i7]ҏb6F(_DF՞OПLhI:&7^4{"oy[W8f$)w "Y_qS>`"OOAMA<=([2#`|5raRwWI*.1̞Y3d_\&N ]A]tT_=;)(_b1;󽂇T df79 endstream endobj 339 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 340 0 obj << /Filter /FlateDecode /Length 2777 >> stream xYK۸Wr1U ]vUM>HBJO8M*ʁ4F_7޿x!&6XӼZܯ?F]i&j |Q|H9x^1QHw&s[l<9g7vOV'0w!'|'WxޏΔ8{!xŐ " ލ"R"r=uk,*rG=V:i'a]PSV#swܪ[VP !e;nwYnGG6I ݪ:x&6Gm.:倿z&A ".E&z= ;wĵpIZ"U{M³ Le@lme>df76ju"iR"v>8Y4}#lз b W$oL{0V' o| NGao70NM<6qe*piCv&?].n*2.=z#qW1 2VRGv}D~8i. 0='_P i7\4 ||A$ݜɳv&h]Ns6L`Kml/ 03;X#z~'ɲcs͌m&M!C E1OЪdOaz؟:yZs*iw-ep1*K.* 0vj8:QُI 3a೥ܤž/#R܆ {uSd&➵mP{%< z N`q2X;;r"%VxU(>$p{ft=lsܥN=2D cRL1˸[kΑRļk42`']tU݌SRu^>v-(ۭS>>"WnBkˮi\3p1:[K&1 ªLA岭Yfyz{7}5)t4F F!DL.wu!|~`/J&p =atmZ=&n)r#hM:t뽒 W*厳w¸ue& z؅$h2jR+;d*`sEޞ#aLs XDH^No:3:`uS9 Ϥ(tċ+HWgiW椺3T+o 'D[oH|dcZBo C!<՜BVc"Aaj5 Ofؿ|$xUʵgEGGn,H!w%HzȩM[Ҵv$Y}]uIY`xCþKА*4$z+w'_ѻnS8;K)%7#^;"kwp -Zi=uZy ӢBRkK9`\-^ 6eUxO/*ABto0)74ֳEkpUN2Th\GC&N͌'f6GdZ߶F$HMPjZW+\wؚƒMR·~M^2M&QdMF~=-ȫ<:kűӰ(H ?f5RI8fs":D 67XUqa߹3Lj*]5fwW_ߌz4yF:Jm#@A6ʵWQFo*JV]9szqi5r%q 9D'#k BXUv`&; _&Wť3.צRR_9 MG퇜Ui*Qdқ^_}8z°ll/߿'@,endstream endobj 341 0 obj << /Filter /FlateDecode /Length 1988 >> stream xڥYr6)|F 9ЙкCmIZIO_hٙ0"/PeіZ])\[]V6W?fjAvs{g*?M/xq# qTV~hV]użur\V-v;f KS+:H~%pEˌ*FೂV2R|e`7!Or!L1g'&鐡bB# y|4^H[!(uSF T84."r$mih45j%HZġQ)UTF,a[>g'K1UY9\c-oƒI ~RK"F+:  vNtkS /k+/Ix-s42'jTdJf 3Nl `0tDr5@J(<eᵌeL Y076-9QZ [+V:yљP=?CTz7b{O~PuT ):r%KG +KFh] ʼnpf1"8>+T+F*#r&y;FyYq>jZ3V#h'F`1R;M|hVB (] ND" ʌ6NeUV&dҺh 3ci^$ugFXn\~lD:Q6SQG˽d f#dVs"LTa$-l.(iz\0FW3sή"/%?<phpSJU U&-u5oC1'Rc o噳 A2k&F⼂_sZ|-ʚp^Kg,9 gw}v?"]_e=UѨV0ni;/(u0-8]q[l=L -w:yDf3bI nǗXfl:.ͥvu!0_0Xc4lH']):c4=dCF̵Jwv^QXA.Zrz *ɼRuR ̅5]s@ Kȫ'bz=>_L*Ss%r~!9DOvբ׭ "&hil]o@44h͠'X'SRGzZDA=UmQ9և$Ʊ@TFu ~~2΃Y5nrA1n"A\\x%]'g)yOkg_.~bzFoiB.pCL"@Sz`LKj?L/^xpr)Cd(k5P=QwD֑tp`H*2(llAY6/j{ 46? `gݎ&[>BL |A~[M~areuӾS(j~_U9zcxR4@|0jr3B" r@>*t;B3^fj&q:dMё1to<`WS=Dcw6Gj;`(K C |PqWEN<6$=EN*P :SHHpԚ:!aBW2 =2Zzrs jg!8( mt',49cRVQơ =*dICUw4>O5yσkfWG>I*m[5cM7tTinI0ꏩ گxEGKYל Jir8k"]Eࠐ뛆Щ{V3endstream endobj 342 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-exp3.pdf) /PTEX.InfoDict 271 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 273 0 R >> /ExtGState << >> /Font << /F2 272 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 451 >> stream xSMk1W>tV3}CB[0zI]zțPptX-#{3zoD2bErF{8t_nd,Zk^OOG}f_L8j#Zf̧n7ݍ~Glդ)!8J!j1ޔzQX,1oV- D\&P_ΉZ_>`1N9N.$kqRKr.?̶s=yPeq:[(I/$E0:zň$棪O™ʈ7b OBzbؽWWrԹDG' ZRH]F%5?3eܗmm>- P?]oendstream endobj 343 0 obj << /Filter /FlateDecode /Length 213 >> stream xMNNC!a&3S7V6G;U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 345 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-exp4.pdf) /PTEX.InfoDict 278 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 280 0 R >> /ExtGState << >> /Font << /F2 279 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 936 >> stream xMo7+xa8k$m%( b$6bK-i#Bs fg"Gn;}?޽R>ůѫQ&R7M$/_&55?)g6Wu؋gBW񂫜~\gmW[F$ٟ1 ڱ⨃Qo\X,?J!h]㺜ѥ vjZu9P>kklXbbUl7ڤ4/+6`*q3Qkb#گvy62M8^4QN'ڦ9zg 5U]m{m>]n_6O[zdz,hs\^>w-{ԾS69n~<]PǛ̜2ooO/رjpd]e[GR92*#g )Ovj^fD?/3(v+2tsv [,zNNvvQG]@:ׁ qcTt7ْܳ 0B'QZc&ls1 D *b#R&NHFK !g\5y\yq)=IĉȚJ)ŞŔAZFL:Vc$[u䵵z&3{e?`6hR{fE(e|,QyDRn{6#Œ:ƅga^)Jb{FH90mg\!fi[[3%H t9.iXN "Xǐ ?!Δb 8:B)S *pRj/tϹzR+a֩uՆIE(1%Y<"g;oB2=u,hnS'mL1ljr?8 eFtL> stream xmRn0 9iI4q*miܦҖN:0c⠙G3YY%MiئM-"J6/& V+'UnUXi%rUXUwJ5?ڟطsõO1%.vI#r~:Bڏ(P ٱC S*Z("_?QcK + 9`g޻ -]=͊z ¸0Ⱦ2?bX@L"""=qm;xkſ4AM„4)e!jkJ>~ {<4a"CƧ`R]77LLt@>vA3''r.sD3SqX>endstream endobj 347 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 348 0 obj << /Filter /FlateDecode /Length 2575 >> stream xڕYo߿88Ϣ@WMQ>(bˮeo7_Rlg3R?޿{W4 &m~ZR*+zͲLrI#wKniT' [i#OiJFȱ;9LosEXjDy"1DR'eٿOHiBًBz)7g"gx meh5})wb՞d]ὓ+z~O =vA#1BYTEDE_]I5(O/c0u6]  6'z0kSS:;V~W(Ltc`I&B&3Le EאB'_Y v3kwyP%p xhY (cFYvw/ gJՓ3S5~od X]&,290Ħ--jw?hBah͉OY)(d9Pd%&ԥj"-H?"%ޯNƞ*0 !8gt{ԱvGOѣ6~խm!۞ d1028h1$dsv(+~~m3)U.!'b̰8w{wʤ\SɈ^G%ɟywIjD"͒^tGrJ;2ӌA=gv7!~ઉڔ|6ŲDYS9(|U=|g8|%R0Q-I_:qET(^!GPW1:It%"a +<~!C>nг?8O.]}tqq6)P_rưYM6"NkIsΠUk:w*z1:ͫ杺9giI_qٺs* ^\y.T5NjڋspInh̦lg֕C|ʇbr[Lq5ʇKg'u' ];,-_R&ߍ!*/rB2W5[/ ϕo#/W {mg(2e81DtN!F,vd{ p}ѹNU5}IhԽr_?b EeڼҷtUfL(|t~Fe4{C,$߇࢘X | J,T_"nq0|ܩgld@A=1ۂRɫLYo9:Os":ߦ㏻jw22wn}&m-T>qT%G"U.,>޿rkF}endstream endobj 349 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-plots1.pdf) /PTEX.InfoDict 286 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 288 0 R >> /ExtGState << >> /Font << /F2 287 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 369 >> stream xjB1yYfr --Xt!.ZAT.wr.T=?dfB05q=zr)![^`g0?Z=;ӻgEo@y~Z(D+PnمrmZpr<>na30#kSSM,0D %b6Fn7fbbɩ9I@u^=חL(n=:>$D!g@+W*> stream xڅPj1 $+;'[h-$Ϗ8,IOf 31GqrWA Q¢*mNtvll:nb&B`Q ,U^m"pX饛4 CEyl1CX)6j@7;]Cj?Dr@iuNendstream endobj 351 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 352 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-plots2.pdf) /PTEX.InfoDict 292 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 294 0 R >> /ExtGState << >> /Font << /F2 293 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 498 >> stream xIk[A +tUFl -6r($Ƈ^yM͠O-c%l৻`T/Z n{}ukwvΣޮ;Ć\?wwe %/0=}W#W{r7,ٸť1!GxDSg'rTԟʱ\1;IDyPwzyoP@~C0D Ef⨠YPԫ}-ͿsOY, >ù=oaxb+}Q˧#>PMbMhϸXPBCJ(4% l@.HEPjG@B ZC0ؒB~0 K=}Iv7S58R >~ZӟRP4vI4כKuө266̓19U!~an$-dϱ4D/zendstream endobj 353 0 obj << /Filter /FlateDecode /Length 254 >> stream xڅQN0 +|L%I6]&V npPn6M20}K] Xj[xŧ@m)˧$F>KsGVfD ;qIULܖQ=8p*yDֲP~0ޏ_|sNmS ;\aƣ!a('Rd> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 355 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-plots3.pdf) /PTEX.InfoDict 298 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 300 0 R >> /ExtGState << >> /Font << /F2 299 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 398 >> stream xSMK1W̱=8ff CEvCAl-*h}']u"݅$2 a6قP|. v WScZ սF_f6 C0ѱ6TpgbDomf 6X/c,#9{$s-\Bj رG_$D!}ND;zW lTpaN  g`6X}'  9?C51UmE#"6X񅦏PO(#"|NĘiq9t"9oA 6}lkVoxdt1> stream xWK6Wp Z4!@R٩ܒ0Ì]1 8KdR)bATV, feUbyĎUVg$K6a<|j ~hW?џ_hvã6ρVe LUaSK˹:2Ƅ:}mãusykN̒'`gQw&&KG0b0}˻CWglU?0>JQ&ؕX$6vөȚkӴ13trm<>"mMWY r+6y|].o6JUQ@':A[ayn<<H<2]GINэ\{W?y_@_pKA,Ir4YGM,bI߷G$qxW ,'lN&ׇ3=I0,HLu4xHn\$HjM,{o8u%w)8=$2KK{njinv҇Yd训1f=CDo@CD# ~!đ8Ub9Z AS@iu혙g")+uc$I B$!I AS$CϽqB H#3 bL;/w}mvB 2ȯ3IXJIAP5 ӷQmhB"p\8(A~U?]-ȿi )V6Q)o Ơ'n`b,̓a7*q|i3+b9IݷQv=x˃~<Ӊ0#UEX3r&e>ט]=TGw  VnZN Zĵb!v\5/qkb\LU|FIǫQj0k|&^MN$.^z_r#5׋W cn1mӬ#d hJ]{"{q}kưh#cI}*O'rra65S;%~SOve*3QPzSx>̘f/Hz`iK/-p< Hz_KKYt? HoEldnb y}eʏ4kpmq =Eendstream endobj 357 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 358 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-plots4.pdf) /PTEX.InfoDict 304 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 306 0 R >> /ExtGState << >> /Font << /F2 305 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 524 >> stream xMkA +tUFҌfq mBjC!z鏯^,ZH̀` dAhxy p!bU8̎\jp̌@b(xX,çj x~ߖ -D3aKd`"d@ OU`Kʨ[#V"ƒ+J9|v:ݿnƿwX!N. IBB0wÂB#۷L4,o6O>yIT%eÅ=Ona1kx(aMJ>8lWѷŠ^ptyEqJNXՠA"ZV{z ZVSJz:@+FuLA-CJ>PZߔ!Hw&y6(CZwZ9)vhKcq_!aΣcw!$L2Ng q0w ?W=CqK6Pٟ@8@| |6 _ VWTM?h{endstream endobj 359 0 obj << /Filter /FlateDecode /Length 257 >> stream x}MO 92`ŸMzкX~wZl`̼/  LӢnZ !oy"D}9Q]PaHcЁ nȣJ*SuYYk !^[$I0 ½f-&Nbc' 'G]T:K$DEܼ͞c6~ dn[auY0,\ _3-(X哴KonU~iendstream endobj 360 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 361 0 obj << /BBox [ 0 0 504 324 ] /Filter /FlateDecode /FormType 1 /PTEX.FileName (/local1/tmp/Rtmpo2eFEj/Rbuild56b12eb2b537/rpart/vignettes/longintro-plots5.pdf) /PTEX.InfoDict 311 0 R /PTEX.PageNumber 1 /Resources << /ColorSpace << /sRGB 313 0 R >> /ExtGState << >> /Font << /F2 312 0 R >> /ProcSet [ /PDF /Text ] >> /Subtype /Form /Type /XObject /Length 1951 >> stream xXͪ7OK{Q$u ,f d|!$v0b6yRI 0_nS%e{n=jcT?~>^>ܾ^n~=???#\> fG[<[ٟϷwo_?o[d{nHܫl1x!%!N%oo1=˴UdJ$^b t]~xS's"A` =98]d?5:דޣLQTҹKgl=?y{xE6߲p4_#.x].U Ww 9 9L#)3DywBJVF:39=2$uSH'6cGKI;S\! -E[6XqPr2_,af {y)-9BJmD R:sLZ`?0\(ew$3P ļHU&>U9&~aF &kЎ:/m{Msg7}sou}>?~џ}&6KƎH[e@X!2 @|ST2FDL!id6v#q B $e/͟x`] QSTlDp=#c|í|)LaWivCL5 ͶpS0 f7òy 3<|{vZfhPfmgi㥟Cc NH8PHWA& VrfCސxLy- È-:$t.DҶ܄0כPҌoBu!PGq]ȣ.Mo\olo{oAh}uOizr0q(kH1\.1-wji j0ѩ_ͥ孙~͡ ܛCQ1G!ko-S1[޺O#Izfė6Klf`9 Gs3t"6Grovs:?]xtCQ=P\o(?w|FGtFt|GGuGu~FGvFv~GGwMsg7}soggk57_vtewC5v8~%n(Ճ۾y@MaavF;d43xom N>3s~χO~.k3Rq`^vu9v]YF]b ={E \R;fީ/8^^ϏsWLpy rhlwSlq~+&l>K;a~{_+8endstream endobj 362 0 obj << /Filter /FlateDecode /Length 1287 >> stream xWIDWXi\ڼ 1-5 hN$8qHi󶲝t4B]m:JOGElLie< m*+lF+s4xxk}~@MDY2buʴb4ʹ*|XGŏs7^N'Xg_,P WP}BvQTԃr/YNqnx@nDe%Gpl%| ug6Y0i9OLqI|a1] .8_+F@t2w^wa~F,*B9q@R@*UґGMm7_뜠8A#; h-$8`E:l2oNR D um[T"[+dq{D59@J瞜Z֣Jb0_+%.Z2JQ;<>E;-: ?N9B}S:<&ovlL|KЯ8&;1h3~QJk2n-"Ͽl{j.ok q(uR`>6tA{-t\{i@1xKqPsb# '^ŏ u5QBvV2y(=1B"+ Vgݢ Pb@K `:)U/ޣ6sCi"Z|<3s]+-Ht|BNg&w;2y)E- gyPr( 5a6y;m܄R':)iL( S^2; R = ݀!HZAJfpA Ev3 Xk|)tRD_l;Y]O;fR'Yʇ{[{pҐDG9e#Tժ'K67Pwn/4 1&xIr|:ziՁjn&i-w\YP:18wtLrWJU_KE{*"W\t/W:lmd8swC%6}`l{ CB0r5|DWp!4k*#4ju4n7_j݋rUCH~[|_(W.phe+Lᯓ.;vnKJnX sJlH}\35[endstream endobj 363 0 obj << /Alternate /DeviceRGB /Filter /FlateDecode /N 3 /Length 2596 >> stream xwTSϽ7PkhRH H.*1 J"6DTpDQ2(C"QDqpId߼y͛~kg}ֺLX Xňg` lpBF|،l *?Y"1P\8=W%Oɘ4M0J"Y2Vs,[|e92<se'9`2&ctI@o|N6(.sSdl-c(2-yH_/XZ.$&\SM07#1ؙYrfYym";8980m-m(]v^DW~ emi]P`/u}q|^R,g+\Kk)/C_|Rax8t1C^7nfzDp 柇u$/ED˦L L[B@ٹЖX!@~(* {d+} G͋љς}WL$cGD2QZ4 E@@A(q`1D `'u46ptc48.`R0) @Rt CXCP%CBH@Rf[(t CQhz#0 Zl`O828.p|O×X ?:0FBx$ !i@ڐH[EE1PL ⢖V6QP>U(j MFkt,:.FW8c1L&ӎ9ƌaX: rbl1 {{{;}#tp8_\8"Ey.,X%%Gщ1-9ҀKl.oo/O$&'=JvMޞxǥ{=Vs\x ‰N柜>ucKz=s/ol|ϝ?y ^d]ps~:;/;]7|WpQoH!ɻVsnYs}ҽ~4] =>=:`;cܱ'?e~!ańD#G&}'/?^xI֓?+\wx20;5\ӯ_etWf^Qs-mw3+?~O~endstream endobj 364 0 obj << /Filter /FlateDecode /Length 2176 >> stream xڝY[~_*kx(-MAp>d@uڒ#ٻyoB ypf(ͻlJn7e6BYy:ln[5ymӿ}%mHBMN?lwȺ*X5~Uf?! }Vanp_m}NL+}A-'Ds)R"Wv,NpdG Au)QaYwEidvZ|?C|P=씳(NjgE;6 "<:kv'Kmg z_Pisd/am!;ZA[[d1NYzU^Y=Hzt}3 ఎ_1><@={G5zăr#ЦPT!J7;$2dF fvH{%]ݢ([4DR_<ҁJo@lqv>y5h@Ŵ57x69֧F/l~V9i^=G[} )[QzggVW8l3of'@Hb:{`}. ;[?P'tvz1fiJ\1%V%*3F}wUC4=!4!C%3-[:Z\ 6$C;X=Hz|l52at;0xƟN<):D4zsg?c8{5# ΦBp8}O491?<Nj)dNc\Ɛ`=WOq17yNQ3k(Q~1L.-E}3Cb:d.N=M]0UsC@m?tZWb}[R/9.fCI6M0t<kbo{ = p!B.2 pBJ.6U'( l{"Ԭz?zVVgPjaH"!R0jKbn7?y~Rt Ⱦ6oRqf3ܔRq=b diX騳'}/:oƔw*x[#W 7tB9C}4_M )FI6i(H* E!}u.`Is?M &(-DE4;Fu"q2Ibc`8HZ8 XpD V=j&,6>;&k ߄9RWSU0%=$+ t5'Î=8I""'iqp73,RVKbmǾ`g r)o`N\)&|JsHXYrzX*3`bؐPϘjOEWtp]=5i1)=G%K|vFr7rEt-\a,wdJe`e^ +sAX*W3]/SÕ}+/ W2}XJRYrV:(!7XhUz3by&6cQADdnov)8(V|zw㮫Oi1?ݧ~y sxFoC V2 FhWVh]a$T8]q>uVFԵ0daP2qgo_"$rE¦b+Z-<;\! 4Vi}^ޤdu]˧YotM9!]d?ҥk]qot2ebE{"VufE%嫖UȔ|1PYOP%,&UNxNwy!֟#8i^sũ@yŅ`pxC17P]$FBi!ׅfQoendstream endobj 366 0 obj << /Filter /FlateDecode /Length 2457 >> stream xr7qHV쪭=l0(KQNߞntc^%/%U9F_,_K;uY0sV erwI'šH3jf7Y|>5ӣVk{ϪZ%ΞNotK\&x->+ۤ5du3F.mL\LR2/Ɨ"ɎoĮEnP.]0IC#VW?T:/E0 zf, 9_J5-:/%1)yMx-U=ZU@[?k6 x^%T»tyb61?Ϻ,BjM F.Pm$1 3Zx_S~{ZhuCqW[㶢q8"M6Bw> ptg+٩+<ͪ }65kps˛[uJIuqv!3|GDQ-aɴ{)}yԆJ267BG!뺈/=PFJ)T#fVB1%g^D_"ژ l1cV(J)-tڌ9 ]i1-^6Ԗ"B(4f|]6f/5^ Z5C^aN(ݑ.i--E%SJDJ[E #7AA3@e=]65wd1A9v"K(Q7Υ)'t39{U^3i :_yDخ 6 ]i~aߋ~Z\| &! /MKUdV)&Cݢvt5L;?D.qt Q}϶n4xoκY[Վ^FN# QJ^WCH_g$9 o| nEa[9Bc}[r޶:!5)>2#Qe4څ4~mJITұRMIt1ݼaq"I-ƴ[0C& dEIp|Z'45kdS/uc?B8Ed:ݔ"vh~.bU~ v"}<&zY㜃]nG5i;qƏ @RD!zL* 㹒=ӏYoJUAQ`m+ZZ4vrcC\g UDŽ? ȻK00ab￾Sychl| !9J ",Y6kkKtFHIَ44gi. B-gNWOQeɯm|6ʞm-HUd[1'[26f|q\'q^Z~r*{}0ˢ221?jC)u&@㳦.$N?AgL 6G&Y6^xW(z [/GPIHnO[}<[s+yrnUܪ#ETmϨ'2HwBU/J9! T[4p|ki`bNP N դUEskcDN^(:Tٹ;g ]{t{(IJ>0|)Ei3Y.ԥ!̮:ׅB:ryMx̖U|vypW=RBp(Pdiu$aMx))nkyJ=z[VHGɁ?%@Fp 3ZxBkDXhE/O*ywne/]TX\*Wj],:| ޏvtQRms:-t3*zѲ"]%<P |q [\m4ѧkz0j>xL^ִ*_q|4+s$ʡ_P_"h$ qJo!aY=uF 9L(iXc@S6D䆪UnBr(#!"W+-T&$D $1NPNN>0@ #}Z Am ۞ zStS"Hs)hϬH70`  %ψ2K-<,XYE=/Zj) qZw95j6=-=~?)1Dk?H \܀o&W*> stream xZIocWhK}2A9d, d˱^2@~{X)iqg0h4zHINpxM'f"ɜu~Ǘ=Djcه/tu q':vV{ff?^q>G{W-^Z*kL(U[7tnό1JNB:,זǴԅR#,gAsIFYw90ǹ;f<_3F Md`A_v׮IXFv+b^['gN*F bG Sfk`1l=0ǁYm.8tUp90^ w'Wu'MxO=x_31J8@Tmz82pD8MC΃]UMhQɋ-ƺCnb)y.8 %WQ<ģ*6kYqU.\ϞdC`R3 BxBGlT'֝ Ft) )|^Aj Rj$ߌ'ZR3*hM5~1ŗ(@-b];>%GUVic$d6zUqgxu{wdSoQTb,$=y1^xcQVD:1[ jLnm^Sqgm̎h&E_JߊD]ZG~;4EqK~KN_*BB[Q%5 c >}GiiTz!R· x\/"ـҕD9devyq-6ݎvQs"v~ D"7s#]sf`/YzսI%u Y y.faRL:k;ߑuERAJW*{6Xot٢tft76>\(MU\?X!K*,Kކ^OLU Qlq\5 (7 G;ʭFܭ8L|L%HcOǸыJ3[i4ֶi}IY ևz4) :jAfDB8<%oašb`%E|Ӝ-a: yuPTChGe*8*Fct0vxR*lhmY^E9l.*T34&GV--o˓)Q v5'm G/U Q ~aO^Wty;Q>g¸2AS3­0$V/Lgw}|g|19i}vY9gۅJZNp!Ka .ӎYE:PQҟ4_ kZvbV7; P0BKt/g8gq{v>'.u>n*;1⃂^ǯ5yZav)ލf܋QOWqhWҐ-~-]f;];*y +,zX|EѺeP[LOb4 \o%Pt.~Fdg}endstream endobj 368 0 obj << /Filter /FlateDecode /Length 2065 >> stream xڍXKs6WVhjg:=J'[L^Fe%%%g\ )mH`Ƿ:8>HAz4ey(u`l4[Xr ơB[ *r(?籚 PBdzUey118rMT ~݁Hʵ8+kZZ4m$H"gb[k k=px^qTIt} %sP=85l+g G}&:¡g>EZ@Zb~l/?J(e<1g%HUoadɪ0C}Ѝ5o!dܰk@Y]у(l7SލYõGQs vgQ:Q`Q,ɺKJ ^4aC 1ߜm3C<23OL=!݉׳QZ8Kϟn).}վ3Bh]yB,zE=!0,HSm+V[1|\(4rVW $0O~Lt'`=:?h TwrV՞[ PXj 6f}% ۜJtE.9R'5p˒C7mM ]Z `9\7Ƅ&TJ(5Imc;4Xz{,~L;>3hc(IM,e 5 t2=TF%`wCY/vnW 1}CIuo{g"2+{ePO:;Xl9FK< kg[moE+aεM7\{y5Jh@qd_.a"yeIū|5i. P]_?` 1hٵθe 3-jzipw۞ϰ|"b5 AWNFȕוnޝ$:}RЬq&^"הK0`$9C4,p 8y)>fCAÒL'ZkS t8c\ Ts%gb['` Z@ƓGRsKI; ;)2:Juq!!2Rjԋ׳c+2endstream endobj 369 0 obj << /Type /XRef /Length 378 /Filter /FlateDecode /DecodeParms << /Columns 5 /Predictor 12 >> /W [ 1 3 1 ] /Info 87 0 R /Root 86 0 R /Size 370 /ID [<2c4b94fb8b8fdbef3131298e56b5101e>] >> stream x+Da\3 IR YXYL(Ba#Y YRh&+JQb-,~1LC2L" YU9|-IBF;%=(0%}(槰UӫA`A̬)q_%a0 c>GX( ^t:aM~ .l{M9NGtn0+%,9B<@fn;l O~Gnc8 7˝Q^fr*nV1k%O)uMdF+Bۣ^d/N$gv~tF>= options(continue = " ", width = 60) options(SweaveHooks=list(fig=function() par(mar = c(4.1, 4.1, 0.1, 1.1)))) pdf.options(pointsize = 10) par(xpd = NA) #stop clipping library(rpart) @ \section{Introduction} This document is a modification of a technical report from the Mayo Clinic Division of Biostatistics \cite{Therneau97}, which was itself an expansion of an earlier Stanford report \cite{Therneau83}. It is intended to give a short overview of the methods found in the {\rpart} routines, which implement many of the ideas found in the CART (Classification and Regression Trees) book and programs of Breiman, Friedman, Olshen and Stone \cite{Breiman83}. Because CART is the trademarked name of a particular software implementation of these ideas, and \emph{tree} has been used for the {\splus} routines of Clark and Pregibon~\cite{Clark92} a different acronym --- Recursive PARTitioning or rpart --- was chosen. It is somewhat humorous that this label ``rpart'' has now become more common than the original and more descriptive ``cart'', a testament to the influence of freely available software. The {\rpart} programs build classification or regression models of a very general structure using a two stage procedure; the resulting models can be represented as binary trees. An example is some preliminary data gathered at Stanford on revival of cardiac arrest patients by paramedics. The goal is to predict which patients can be successfully revived in the field on the basis of fourteen variables known at or near the time of paramedic arrival, e.g., sex, age, time from attack to first care, etc. Since some patients who are not revived on site are later successfully resuscitated at the hospital, early identification of these ``recalcitrant'' cases is of considerable clinical interest. \begin{figure} \begin{picture}(350, 160)(-40,0) \thicklines \put(120,160){\phantom{2}24 revived} \put(120,150){144 not revived} \put(150,130){\line( 2,-1){89}} \put(150,130){\line(-2,-1){89}} \put(50, 70){$X_1=1$} \put(50, 60){22 / 13} \put(210, 70){$X_1=$2, 3 or 4} \put(220, 60){2 / 131} \put(60, 54) {\line(-2,-1){45}} \put(60, 54) {\line( 2,-1){45}} \put(240, 54){\line( 2,-1){45}} \put(240, 54){\line(-2,-1){45}} \put( 5,10){$X_2=1$} \put( 5, 0){20 / 5} \put( 90,10){$X_2=$2 or 3} \put( 95, 0){2 / 8} \put(185,10){$X_3=$1} \put(185, 0){2 / 31} \put(270,10){$X_3=$2 or 3} \put(275, 0){0 / 100} \end{picture} \caption{Revival data} \label{revival} \end{figure} The resultant model separated the patients into four groups as shown in figure \ref{revival}, where \begin{tabbing} \qquad \qquad \= $X1 $ = \= initial heart rhythm \\ \> \> 1= VF/VT 2=EMD 3=Asystole 4=Other \\ \\ \> $X_2 $ = initial response to defibrillation \\ \> \>1=Improved 2=No change 3=Worse \\ \\ \> $X_3 $ = initial response to drugs \\ \> \> 1=Improved 2=No change 3=Worse \end{tabbing} The other 11 variables did not appear in the final model. This procedure seems to work especially well for variables such as $X_1 $ , where there is a definite ordering, but spacings are not necessarily equal. The tree is built by the following process: first the single variable is found which best splits the data into two groups (`best' will be defined later). The data is separated, and then this process is applied {\em separately} to each sub-group, and so on recursively until the subgroups either reach a minimum size (5 for this data) or until no improvement can be made. The resultant model is, with a certainty, too complex, and the question arises as it does with all stepwise procedures of when to stop. The second stage of the procedure consists of using cross-validation to trim back the full tree. In the medical example above the full tree had ten terminal regions. A cross validated estimate of risk was computed for a nested set of sub trees; this final model was that sub tree with the lowest estimate of risk. \section{Notation} The partitioning method can be applied to many different kinds of data. We will start by looking at the classification problem, which is one of the more instructive cases (but also has the most complex equations). The sample population consists of $n$ observations from $C$ classes. A given model will break these observations into $k$ terminal groups; to each of these groups is assigned a predicted class. In an actual application, most parameters will be estimated from the data, such estimates are given by $\approx$ formulae. \begin{quote} \begin{tabbing} $\pi_i $\qquad\qquad \=$i=1,2,...,C$ \qquad prior probabilities of each class \\ \\ $L(i,j)$ \> $i=1,2,...,C$ \quad Loss matrix for incorrectly classifying \\ \> an $i$ as a $j$. $L(i,i)\equiv 0 $ \\ \\ $A$ \>some node of the tree \\ \> Note that A represents both a set of individuals in \\ \> the sample data, and, via the tree that produced it, \\ \> a classification rule for future data. \\ \\ $\tau(x)$ \> true class of an observation $ x$, where $x$ is the \\ \> vector of predictor variables \\ \\ $\tau( A ) $ \> the class assigned to A, if A were to be taken as a \\ \> final node \\ \\ $n_i, \,n_A$ \> number of observations in the sample that are class $i$, \\ \> number of obs in node $A$ \\ \\ $P(A) $ \>probability of $A$ (for future observations) \\ \>$=\sum_{i=1}^C \pi_i \,P\{ x \in A \mid \tau( x) =i \}$ \\ \>$ \approx \sum_{i=1}^C \pi_i n_{iA} / n_i $ \\ \\ $p(i|A)$ \> $P\{ \tau( x) =i \mid x \in A \} $ (for future observations) \\ \>$= \pi_i P \{ x \in A\mid\tau( x)=i\} /P \{ x \in A\} $ \\ \>$ \approx \pi_i (n_{iA} / n_i) /\sum \pi_i (n_{iA} / n_i$ )\\ \\ $R(A) $ \>risk of $A$ \\ \> $= \sum_{i=1}^C p(i|A) L(i, \tau(A)) $ \\ \> where $\tau(A) $ is chosen to minimize this risk \\ \\ $R(T)$ \>risk of a model (or tree) T \\ \>$ =\sum_{j=1}^k P(A_j) R(A_j) $ \\ \> where $A_j $ are the terminal nodes of the tree \\ \end{tabbing} \end{quote} If $L(i,j)=1$ for all $i \ne j$, and we set the prior probabilities $\pi$ equal to the observed class frequencies in the sample then $p(i|A)= n_{iA}/n_A$ and $R(T)$ is the proportion misclassified. \section{Building the tree} \subsection{Splitting criteria} If we split a node $A$ into two sons $A_L $ and $A_R $ (left and right sons), we will have $$ P(A_L ) r(A_L )+ P(A_R ) r(A_R ) \le P(A) r(A) $$ (this is proven in \cite{Breiman83}). Using this, one obvious way to build a tree is to choose that split which maximizes $\Delta r$, the decrease in risk. There are defects with this, however, as the following example shows: \begin{quote} Suppose losses are equal and that the data is 80\% class 1's, and that some trial split results in $A_L $ being 54\% class 1's and $A_R $ being 100\% class 1's. Since the minimum risk prediction for both the left and right son is $\tau (A_L ) = \tau (A_R ) =1$, this split will have $ \Delta r=0$, yet scientifically this is a very informative division of the sample. In real data with such a majority, the first few splits very often can do no better than this. \end{quote} A more serious defect is that the risk reduction is essentially linear. If there were two competing splits, one separating the data into groups of 85\% and 50\% purity respectively, and the other into 70\%-70\%, we would usually prefer the former, if for no other reason than because it better sets things up for the next splits. One way around both of these problems is to use look-ahead rules; but these are computationally very expensive. Instead {\rpart} uses one of several measures of impurity, or diversity, of a node. Let $f$ be some impurity function and define the impurity of a node A as $$ I(A)= \sum_{i=1}^C f(p_{iA} ) $$ where $p_{iA} $ is the proportion of those in $A$ that belong to class $i$ for future samples. Since we would like $I(A)$ =0 when $A$ is pure, $f$ must be concave with $f(0)=f(1)=0$. Two candidates for $f$ are the information index $f(p)=-p\log(p)$ and the Gini index $f(p)=p(1-p)$. We then use that split with maximal impurity reduction $$ \Delta I =p(A)I(A)-p(A_L )I(A_L )-p(A_R )I(A_R ) $$ The two impurity functions are plotted in figure (\ref{ginip}), along with a rescaled version of the Gini measure. For the two class problem the measures differ only slightly, and will nearly always choose the same split point. \begin{figure} \myfig{longintro-impurity} \caption{Comparison of Gini and Information impurity for two groups.} \label{ginip} \end{figure} <>= ptemp <- seq(0, 1, length = 101)[2:100] gini <- 2* ptemp *(1-ptemp) inform <- -(ptemp*log(ptemp) + (1-ptemp)*log(1-ptemp)) sgini <- gini *max(inform)/max(gini) matplot(ptemp, cbind(gini, inform, sgini), type = 'l', lty = 1:3, xlab = "P", ylab = "Impurity", col = 1) legend(.3, .2, c("Gini", "Information", "rescaled Gini"), lty = 1:3, col = 1, bty = 'n') @ Another convex criteria not quite of the above class is twoing for which $$ I(A)=\min_{C_1C_2} [f(p_{C_1} )+f(p_{C_2} )] $$ where $C_1 $,$C_2 $ is some partition of the $C$ classes into two disjoint sets. If $C=2$ twoing is equivalent to the usual impurity index for $f$. Surprisingly, twoing can be calculated almost as efficiently as the usual impurity index. One potential advantage of twoing is that the output may give the user additional insight concerning the structure of the data. It can be viewed as the partition of $C$ into two superclasses which are in some sense the most dissimilar for those observations in $A$. For certain problems there may be a natural ordering of the response categories (e.g. level of education), in which case ordered twoing can be naturally defined, by restricting $C_1$ to be an interval $[1,2,\ldots,k]$ of classes. Twoing is not part of {\rpart}. \subsection{Incorporating losses} One salutatory aspect of the risk reduction criteria not found in the impurity measures is inclusion of the loss function. Two different ways of extending the impurity criteria to also include losses are implemented in CART, the generalized Gini index and altered priors. The {\rpart} software implements only the altered priors method. \subsubsection{Generalized Gini index} The Gini index has the following interesting interpretation. Suppose an object is selected at random from one of C classes according to the probabilities $(p_1 ,p_2 ,...,p_C ) $ and is randomly assigned to a class using the same distribution. The probability of misclassification is $$ \sum_ i \sum_ {j \ne i} p_i p_j = \sum_ i \sum_ j p_i p_j - \sum_ i p_i^2 = \sum_ i 1- p_i^2 = \hbox{Gini index for $p$} $$ Let $L(i,j)$ be the loss of assigning class $j$ to an object which actually belongs to class $i$. The expected cost of misclassification is $\sum \sum L(i,j)p_i p_j $. This suggests defining a {\em generalized Gini} index of impurity by $$ G( p) = \sum_ i \sum_ j L(i,j)p_i p_j $$ The corresponding splitting criterion appears to be promising for applications involving variable misclassification costs. But there are several reasonable objections to it. First, $G( p) $ is not necessarily a concave function of $ p$, which was the motivating factor behind impurity measures. More seriously, $G$ symmetrizes the loss matrix before using it. To see this note that $$ G( p) = (1/2) \sum \sum [L(i,j)+L(j,i)] \, p_i p_j $$ In particular, for two-class problems, $G$ in effect ignores the loss matrix. \subsubsection{Altered priors} Remember the definition of $R(A)$ \begin{eqnarray*} R(A) &\equiv& \sum_{i=1}^C p_{iA}L(i, \tau (A)) \\ &=& \sum_{i=1}^C \pi_i L(i, \tau (A)) (n_{iA} / n_i )( n / n_A ) \end{eqnarray*} Assume there exists $\tilde \pi $ and $\tilde L $ be such that $$ \tilde \pi_i \tilde L (i,j) = \pi_i L(i,j)\qquad \forall i,j \in C $$ Then $R(A)$ is unchanged under the new losses and priors. If $\tilde L$ is proportional to the zero-one loss matrix then the priors $\tilde \pi$ should be used in the splitting criteria. This is possible only if $L$ is of the form $$ L(i,j) = \left\{ \begin{array}{ll} L_i & i \ne j \\ 0 & i=j \end{array} \right . $$ in which case $$ \tilde \pi_i = \frac{\pi_i L_i } { \sum_j \pi_j L_j } $$ This is always possible when $C=2$, and hence altered priors are exact for the two class problem. For arbitrary loss matrix of dimension $C> 2$, {\rpart} uses the above formula with $L_i = \sum_ j L(i,j)$. A second justification for altered priors is this. An impurity index $I(A) = \sum f(p_i )$ has its maximum at $p_1= p_2 =\ldots = p_C = 1/C$. If a problem had, for instance, a misclassification loss for class 1 which was twice the loss for a class 2 or 3 observation, one would wish I(A) to have its maximum at $p_1 =$1/5, $p_2 = p_3 =$2/5, since this is the worst possible set of proportions on which to decide a node's class. The altered priors technique does exactly this, by shifting the $p_i $. Two final notes \begin{itemize} \item When altered priors are used, they affect only the choice of split. The ordinary losses and priors are used to compute the risk of the node. The altered priors simply help the impurity rule choose splits that are likely to be ``good'' in terms of the risk. \item The argument for altered priors is valid for both the Gini and information splitting rules. \end{itemize} \subsection{Example: Stage C prostate cancer (\Co{class} method)} \begin{figure} \myfig{longintro-gini1} \caption{Classification tree for the Stage C data} \label{fgini1} \end{figure} This first example is based on a data set of 146 stage C prostate cancer patients \cite{Nativ88}. The main clinical endpoint of interest is whether the disease recurs after initial surgical removal of the prostate, and the time interval to that progression (if any). The endpoint in this example is \Co{status}, which takes on the value 1 if the disease has progressed and 0 if not. Later we'll analyze the data using the \Co{exp} method, which will take into account time to progression. A short description of each of the variables is listed below. The main predictor variable of interest in this study was DNA ploidy, as determined by flow cytometry. For diploid and tetraploid tumors, the flow cytometry method was also able to estimate the percent of tumor cells in a $G_2$ (growth) stage of their cell cycle; $G_2$\% is systematically missing for most aneuploid tumors. The variables in the data set are \begin{center} \begin{tabular}{ll} pgtime & time to progression, or last follow-up free of progression \\ pgstat & status at last follow-up (1=progressed, 0=censored)\\ age & age at diagnosis \\ eet & early endocrine therapy (1=no, 0=yes) \\ ploidy & diploid/tetraploid/aneuploid DNA pattern \\ g2 & \% of cells in $G_2$ phase \\ grade & tumor grade (1-4) \\ gleason & Gleason grade (3-10) \\ \end{tabular} \end{center} The model is fit by using the {\rpart} function. The first argument of the function is a model formula, with the $\sim$ symbol standing for ``is modeled as''. The \Co{print} function gives an abbreviated output, as for other R models. The \Co{plot} and \Co{text} command plot the tree and then label the plot, the result is shown in figure \ref{fgini1}. <>= progstat <- factor(stagec$pgstat, levels = 0:1, labels = c("No", "Prog")) cfit <- rpart(progstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = 'class') print(cfit) par(mar = rep(0.1, 4)) plot(cfit) text(cfit) @ \begin{itemize} \item The creation of a labeled factor variable as the response improves the labeling of the printout. \item We have explicitly directed the routine to treat \Co{progstat} as a categorical variable by asking for \Co{method='class'}. (Since \Co{progstat} is a factor this would have been the default choice). Since no optional classification parameters are specified the routine will use the Gini rule for splitting, prior probabilities that are proportional to the observed data frequencies, and 0/1 losses. \item The child nodes of node $x$ are always $2x$ and $2x+1$, to help in navigating the printout (compare the printout to figure \ref{fgini1}). \item Other items in the list are the definition of the split used to create a node, the number of subjects at the node, the loss or error at the node (for this example, with proportional priors and unit losses this will be the number misclassified), and the predicted class for the node. \item * indicates that the node is terminal. \item Grades 1 and 2 go to the left, grades 3 and 4 go to the right. The tree is arranged so that the branches with the largest ``average class'' go to the right. \end{itemize} \subsection{Variable importance} The long form of the printout for the stage C data, obtained with the summary function, contains further information on the surrogates. The \texttt{cp} option of the summary function instructs it to prune the printout, but it does not prune the tree. <>= @ For each node up to 5 surrogate splits (default) will be printed, but only those whose utility is greater than the baseline ``go with the majority'' surrogate. The first surrogate for the first split is based on the following table: <<>>= temp <- with(stagec, table(cut(grade, c(0, 2.5, 4)), cut(gleason, c(2, 5.5, 10)), exclude = NULL)) temp @ The surrogate sends \Sexpr{sum(diag(temp))} of the \Sexpr{sum(temp)} observations the correct direction for an agreement of \Sexpr{round(sum(diag(temp))/sum(temp), 3)}. The majority rule gets \Sexpr{zz <-max(cfit$frame$n[2:3]); zz} correct, and the adjusted agreement is (\Sexpr{sum(diag(temp))} - \Sexpr{zz})/ (\Sexpr{sum(temp)} - \Sexpr{zz}). A variable may appear in the tree many times, either as a primary or a surrogate variable. An overall measure of variable importance is the sum of the goodness of split measures for each split for which it was the primary variable, plus goodness * (adjusted agreement) for all splits in which it was a surrogate. In the printout these are scaled to sum to 100 and the rounded values are shown, omitting any variable whose proportion is less than 1\%. Imagine two variables which were essentially duplicates of each other; if we did not count surrogates they would split the importance with neither showing up as strongly as it should. \section{Pruning the tree} \subsection{Definitions} We have built a complete tree, possibly quite large and/or complex, and must now decide how much of that model to retain. In stepwise regression, for instance, this issue is addressed sequentially and the fit is stopped when the F test fails to achieve some level $\alpha $. Let $T_1$, $T_2$,....,$T_k$ be the terminal nodes of a tree T. Define \begin{quote} $|T|$ = number of terminal nodes \\ risk of $T$ = $R(T)$ = $\sum_{i=1}^k P(T_i )R(T_i )$ \end{quote} In comparison to regression, $|T|$ is analogous to the degrees of freedom and $R(T)$ to the residual sum of squares. Now let $\alpha$ be some number between 0 and $\infty$ which measures the 'cost' of adding another variable to the model; $\alpha$ will be called a complexity parameter. Let $R(T_0)$ be the risk for the zero split tree. Define $$ R_\alpha (T) =R(T) + \alpha |T| \label{cp1} $$ to be the cost for the tree, and define $T_\alpha $ to be that sub tree of the full model which has minimal cost. Obviously $T_0 $ = the full model and $T_\infty $ = the model with no splits at all. The following results are shown in \cite{Breiman83}. \begin{enumerate} \item If $T_1 $ and $T_2 $ are sub trees of $T$ with $R_\alpha (T_1 )= R_\alpha (T_2 ) $, then either $T_1 $ is a sub tree of $T_2 $ or $T_2 $ is a sub tree of $T_1 $; hence either $|T_1| < |T_2|$ or $|T_2| < |T_1|$. \item If $\alpha > \beta$ then either $T_\alpha = T_\beta $ or $T_\alpha $ is a strict sub tree of $T_\beta $. \item Given some set of numbers $\alpha_1 ,\alpha_2 ,\ldots,\alpha_m $; both $T_{\alpha_1} ,\ldots,T_{\alpha_m} $ and $R(T_{\alpha_1} )$, $\ldots$, $R(T_{\alpha_m} )$ can be computed efficiently. \end{enumerate} Using the first result, we can uniquely define $T_\alpha$ as the smallest tree $T$ for which $R_\alpha (T) $ is minimized. Since any sequence of nested trees based on $T$ has at most $|T|$ members, result 2 implies that all possible values of $\alpha$ can be grouped into $m$ intervals, $m \le |T| $ \begin{eqnarray*} I_1 &=& [0, \alpha_1 ] \\ I_2 &=& ( \alpha_1 , \alpha_2 ] \\ \vdots \\ I_m &=& ( \alpha_{m-1} , \infty] \end{eqnarray*} where all $\alpha \in I_i $ share the same minimizing sub tree. \subsection{Cross-validation} Cross-validation is used to choose a best value for $\alpha$ by the following steps: \begin{enumerate} \item \begin{tabbing} \= Fit the full model on the data set \\ \> compute $I_1 ,I_2,...,I_m$ \\ \> set \= $\beta_1=0 $ \\ \> \> $\beta_2=\sqrt {\alpha_1 \alpha_2 } $ \\ \> \> $\beta_3=\sqrt {\alpha_2 \alpha_3 } $ \\ \> \> $\vdots $ \\ \> \> $\beta_{m-1} = \sqrt {\alpha_{m-2} \alpha_{m-1} } $ \\ \> \> $\beta_m=\infty$ \\ \> each $\beta_i $ is a `typical value' for its $I_i $ \\ \end{tabbing} \item Divide the data set into $s$ groups $G_1 ,G_2 ,...,G_s $ each of size $s/n$, and for each group separately: \begin{itemize} \item fit a full model on the data set `everyone except $G_i $' and determine $T_{\beta_1} , T_{\beta_2} ,...,T_{\beta_m} $ for this reduced data set, \item compute the predicted class for each observation in $G_i$, under each of the models $T_{\beta_j}$ for $1 \le j \le m$, \item from this compute the risk for each subject. \end{itemize} \item Sum over the $G_i $ to get an estimate of risk for each $\beta_j $. For that $\beta$ (complexity parameter) with smallest risk compute $T_\beta $ for the full data set, this is chosen as the best trimmed tree. \end{enumerate} In actual practice, we may use instead the 1-SE rule. A plot of $\beta$ versus risk often has an initial sharp drop followed by a relatively flat plateau and then a slow rise. The choice of $\beta$ among those models on the plateau can be essentially random. To avoid this, both an estimate of the risk and its standard error are computed during the cross-validation. Any risk within one standard error of the achieved minimum is marked as being equivalent to the minimum (i.e. considered to be part of the flat plateau). Then the simplest model, among all those ``tied'' on the plateau, is chosen. In the usual definition of cross-validation we would have taken $s=n$ above, i.e., each of the $G_i $ would contain exactly one observation, but for moderate $n$ this is computationally prohibitive. A value of $s = 10$ has been found to be sufficient, but users can vary this if they wish. In Monte-Carlo trials, this method of pruning has proven very reliable for screening out `pure noise' variables in the data set. \subsection{Example: The Stochastic Digit Recognition Problem} This example is found in section 2.6 of \cite{Breiman83}, and used as a running example throughout much of their book. Consider the segments of an unreliable digital readout \begin{center} \begin{picture}(350,160)(-100,0) \put(27,120){1} \put(10,115){\line(1,0){40}} \put(10, 75){\line(1,0){40}} \put(10, 35){\line(1,0){40}} \put(10, 35){\line(0,1){80}} \put(50, 35){\line(0,1){80}} \put(27, 23){7} \put(27, 80){4} \put(0 , 50){5} \put(0, 90){2} \put(60, 90){3} \put(60, 50){6} \end{picture} \end{center} where each light is correct with probability 0.9, e.g., if the true digit is a 2, the lights 1, 3, 4, 5, and 7 are on with probability 0.9 and lights 2 and 6 are on with probability 0.1. Construct test data where $Y\in \{0,1,...,9\}$, each with proportion 1/10 and the $X_i$, $i=1,\ldots,7$ are i.i.d. Bernoulli variables with parameter depending on Y. $X_8 - X_{24} $ are generated as i.i.d Bernoulli $P\{X_i =1\} =.5 $, and are independent of Y. They correspond to embedding the readout in a larger rectangle of random lights. \begin{figure} \myfig{longintro-dig1} \caption{Optimally pruned tree for the stochastic digit recognition data} \label{figdig} \end{figure} A sample of size 200 was generated accordingly and the procedure applied using the Gini index (see 3.2.1) to build the tree. The R code to compute the simulated data and the fit are shown below. <>= set.seed(1953) # An auspicious year n <- 200 y <- rep(0:9, length = 200) temp <- c(1,1,1,0,1,1,1, 0,0,1,0,0,1,0, 1,0,1,1,1,0,1, 1,0,1,1,0,1,1, 0,1,1,1,0,1,0, 1,1,0,1,0,1,1, 0,1,0,1,1,1,1, 1,0,1,0,0,1,0, 1,1,1,1,1,1,1, 1,1,1,1,0,1,0) lights <- matrix(temp, 10, 7, byrow = TRUE) # The true light pattern 0-9 temp1 <- matrix(rbinom(n*7, 1, 0.9), n, 7) # Noisy lights temp1 <- ifelse(lights[y+1, ] == 1, temp1, 1-temp1) temp2 <- matrix(rbinom(n*17, 1, 0.5), n, 17) # Random lights x <- cbind(temp1, temp2) dfit <- rpart(y ~ x, method='class', control = rpart.control(xval = 10, minbucket = 2, cp = 0)) printcp(dfit) fit9 <- prune(dfit, cp = 0.02) par(mar = rep(0.1, 4)) plot(fit9, branch = 0.3, compress = TRUE) text(fit9) @ This table differs from that in section 3.5 of \cite{Breiman83} in several ways, the last two of which are substantive. \begin{itemize} \item The actual values are different, of course, because of different random number generators in the two runs. \item The complexity table is printed from the smallest tree (no splits) to the largest one (28 splits). We find it easier to compare one tree to another when they start at the same place. \item The number of splits is listed, rather than the number of nodes. The number of nodes is always 1 + the number of splits. \item For easier reading, the error columns have been scaled so that the first node has an error of 1. Since in this example the model with no splits must make 180/200 misclassifications, multiply columns 3-5 by 180 to get a result in terms of absolute error. (Computations are done on the absolute error scale, and printed on relative scale). \item The complexity parameter column has been similarly scaled. \end{itemize} Looking at the table, we see that the best tree has 10 terminal nodes (9 splits), based on cross-validation. This sub tree is extracted with a call to \Co{prune} and saved in \Co{fit9}. The pruned tree is shown in figure \ref{figdig}. Two options have been used in the plot. The \Co{compress} option tries to narrow the printout by vertically overlapping portions of the plot. The \Co{branch} option controls the shape of the branches that connect a node to its children. The largest tree, with 35 terminal nodes, correctly classifies 170/200 = 85\% of the observations, but uses several of the random predictors in doing so and seriously over fits the data. If the number of observations per terminal node (minbucket) had been set to 1 instead of 2, then every observation would be classified correctly in the final model, many in terminal nodes of size 1. \section{Missing data} \subsection{Choosing the split} Missing values are one of the curses of statistical models and analysis. Most procedures deal with them by refusing to deal with them -- incomplete observations are tossed out. \texttt{Rpart} is somewhat more ambitious. Any observation with values for the dependent variable and at least one independent variable will participate in the modeling. The quantity to be maximized is still $$ \Delta I = p(A)I(A)-p(A_L )I(A_L ) - p(A_R ) I(A_R) $$ The leading term is the same for all variables and splits irrespective of missing data, but the right two terms are somewhat modified. Firstly, the impurity indices $I(A_R )$ and $I (A_L )$ are calculated only over the observations which are not missing a particular predictor. Secondly, the two probabilities $p(A_L )$ and $p(A_R )$ are also calculated only over the relevant observations, but they are then adjusted so that they sum to $p(A)$. This entails some extra bookkeeping as the tree is built, but ensures that the terminal node probabilities sum to 1. In the extreme case of a variable for which only 2 observations are non-missing, the impurity of the two sons will both be zero when splitting on that variable. Hence $\Delta I $ will be maximal, and this `almost all missing' coordinate is guaranteed to be chosen as best; the method is certainly flawed in this extreme case. It is difficult to say whether this bias toward missing coordinates carries through to the non-extreme cases, however, since a more complete variable also affords for itself more possible values at which to split. \subsection{Surrogate variables} Once a splitting variable and a split point for it have been decided, what {\em is} to be done with observations missing that variable? One approach is to estimate the missing datum using the other independent variables; {\rpart} uses a variation of this to define {\em surrogate} variables. As an example, assume that the split (age $<$40, age $\ge $40) has been chosen. The surrogate variables are found by re-applying the partitioning algorithm (without recursion) to predict the two categories `age $<$40' vs. `age $\ge $40' using the other independent variables. %$$ %\begin{tabular}{l|r|r|} % & & \multicolumn{2}{c}{Age $<$ 40} \\ % & & True & False \\ \hline % Other X $<$ cutpoint & True & True Positive & False Positive \\ \cline{3-4} % & False & False Negative & True Negative \\ \hline %\end{tabular} %$$ For each predictor an optimal split point and a misclassification error are computed. (Losses and priors do not enter in --- none are defined for the age groups --- so the risk is simply \#misclassified / n.) Also evaluated is the blind rule `go with the majority' which has misclassification error $\min(p, 1-p)$ where \begin{center} $p$ = (\# in A with age $<$ 40) / $n_A $. \end{center} The surrogates are ranked, and any variables which do no better than the blind rule are discarded from the list. Assume that the majority of subjects have age $\le$ 40 and that there is another variable $x$ which is uncorrelated to age; however, the subject with the largest value of $x$ is also over 40 years of age. Then the surrogate variable $x < \max$ versus $x \ge \max$ will have one less error that the blind rule, sending 1 subject to the right and $n-1$ to the left. A continuous variable that is completely unrelated to age has probability $1-p^2$ of generating such a trim-one-end surrogate by chance alone. For this reason the {\rpart} routines impose one more constraint during the construction of the surrogates: a candidate split must send at least 2 observations to the left and at least 2 to the right. Any observation which is missing the split variable is then classified using the first surrogate variable, or if missing that, the second surrogate is used, and etc. If an observation is missing all the surrogates the blind rule is used. Other strategies for these `missing everything' observations can be convincingly argued, but there should be few or no observations of this type (we hope). \subsection{Example: Stage C prostate cancer (cont.)} Let us return to the stage C prostate cancer data of the earlier example. For a more detailed listing of the rpart object, we use the \Co{summary} function. It includes the information from the CP table (not repeated below), plus information about each node. It is easy to print a sub tree based on a different cp value using the \Co{cp} option. Any value between 0.0555 and 0.1049 would produce the same result as is listed below, that is, the tree with 3 splits. Because the printout is long, the \Co{file} option of \Co{summary.rpart} is often useful. <<>>= printcp(cfit) summary(cfit, cp = 0.06) @ \begin{itemize} \item There are 54 progressions (class 1) and 94 non-progressions, so the first node has an expected loss of $54/146 \approx 0.37$. (The computation is this simple only for the default priors and losses). \item Grades 1 and 2 go to the left, grades 3 and 4 to the right. The tree is arranged so that the ``more severe'' nodes go to the right. \item The improvement is $n$ times the change in impurity index. In this instance, the largest improvement is for the variable \Co{grade}, with an improvement of 10.36. The next best choice is Gleason score, with an improvement of 8.4. The actual values of the improvement are not so important, but their relative size gives an indication of the comparative utility of the variables. \item Ploidy is a categorical variable, with values of diploid, tetraploid, and aneuploid, in that order. (To check the order, type \Co{table(stagec\$ploidy)}). All three possible splits were attempted: aneuploid+diploid vs. tetraploid, aneuploid+tetraploid vs. diploid, and aneuploid vs. diploid + tetraploid. The best split sends diploid to the right and the others to the left. \item The 2 by 2 table of diploid/non-diploid vs grade= 1-2/3-4 has 64\% of the observations on the diagonal. \\ $$ \begin{tabular}{r|rr} & 1-2 & 3-4 \\ \hline diploid & 38 & 29 \\ tetraploid & 22 & 46 \\ aneuploid & 1 & 10 \end{tabular} $$ \item For node 3, the primary split variable is missing on 6 subjects. All 6 are split based on the first surrogate, ploidy. Diploid and aneuploid tumors are sent to the left, tetraploid to the right. As a surrogate, eet was no better than 45/85 (go with the majority), and was not retained. $$ \begin{tabular}{l|c|c|} & g2 $<$ 13.2 & g2 $>$ 13.2 \\ \hline Diploid/aneuploid & 71 & 1 \\ Tetraploid & 3 & 64 \\ \end{tabular} $$ \end{itemize} \section{Further options} \subsection{Program options} The central fitting function is {\rpart}, whose main arguments are \begin{itemize} \item \Co{formula}: the model formula, as in \Co{lm} and other R model fitting functions. The right hand side may contain both continuous and categorical (factor) terms. If the outcome $y$ has more than two levels, then categorical predictors must be fit by exhaustive enumeration, which can take a very long time. \item \Co{data, weights, subset}: as for other R models. \item \Co{method}: the type of splitting rule to use. Options at this point are classification, anova, Poisson, and exponential. \item \Co{parms}: a list of method specific optional parameters. For classification, the list can contain any of: the vector of prior probabilities (component \Co{prior}), the loss matrix (component \Co{loss}) or the splitting index (component \Co{split}). The priors must be positive and sum to 1. The loss matrix must have zeros on the diagonal and positive off-diagonal elements. The splitting index can be \Co{"gini"} or \Co{"information"}. \item \Co{na.action}: the action for missing values. The default action for rpart is \Co{na.rpart}, this default is not overridden by the \Co{options(na.action)} global option. The default action removes only those rows for which either the response $y$ or \emph{all} of the predictors are missing. This ability to retain partially missing observations is perhaps the single most useful feature of {\rpart} models. \item \Co{control}: a list of control parameters, usually the result of the \Co{rpart.control} function. The list must contain \begin{itemize} \item \Co{minsplit}: The minimum number of observations in a node for which the routine will even try to compute a split. The default is 20. This parameter can save computation time, since smaller nodes are almost always pruned away by cross-validation. \item \Co{minbucket}: The minimum number of observations in a terminal node. This defaults to \Co{minsplit/3}. \item \Co{maxcompete}: It is often useful in the printout to see not only the variable that gave the best split at a node, but also the second, third, etc best. This parameter controls the number that will be printed. It has no effect on computational time, and a small effect on the amount of memory used. The default is 4. \item \Co{xval}: The number of cross-validations to be done. Usually set to zero during exploratory phases of the analysis. A value of 10, for instance, increases the compute time to 11-fold over a value of 0. \item \Co{maxsurrogate}: The maximum number of surrogate variables to retain at each node. (No surrogate that does worse than ``go with the majority'' is printed or used). Setting this to zero will cut the computation time in half, and set \Co{usesurrogate} to zero. The default is 5. Surrogates give different information than competitor splits. The competitor list asks ``which other splits would have as many correct classifications'', surrogates ask ``which other splits would classify the same subjects in the same way'', which is a harsher criteria. \item \Co{usesurrogate}: A value of usesurrogate=2, the default, splits subjects in the way described previously. This is similar to CART. If the value is 0, then a subject who is missing the primary split variable does not progress further down the tree. A value of 1 is intermediate: all surrogate variables except ``go with the majority'' are used to send a case further down the tree. \item \Co{cp}: The threshold complexity parameter. \end{itemize} \end{itemize} The complexity parameter \Co{cp} is, like \Co{minsplit}, an advisory parameter, but is considerably more useful. It is specified according to the formula $$ R_{cp}(T) \equiv R(T) + cp* |T| * R(T_1) $$ where $T_1$ is the tree with no splits, $|T|$ is the number of splits for a tree, and $R$ is the risk. This scaled version is much more user friendly than the original CART formula (\ref{cp1}) since it is unit less. A value of \Co{cp = 1} will always result in a tree with no splits. For regression models (see next section) the scaled cp has a very direct interpretation: if any split does not increase the overall ${\rm R}^2$ of the model by at least $cp$ (where ${\rm R}^2$ is the usual linear-models definition) then that split is decreed to be, a priori, not worth pursuing. The program does not split said branch any further, and saves considerable computational effort. The default value of .01 has been reasonably successful at `pre-pruning' trees so that the cross-validation step need only remove 1 or 2 layers, but it sometimes over prunes, particularly for large data sets. \subsection{Example: Consumer Report Auto Data} A second example using the \Co{class} method demonstrates the outcome for a response with multiple ($>2$) categories. We also explore the difference between Gini and information splitting rules. The dataset cu.summary contains a collection of variables from the April, 1990 Consumer Reports summary on 117 cars. For our purposes, car Reliability will be treated as the response. The variables are: $$ \begin{tabular}{ll} Reliability & an ordered factor (contains NAs): \\ & Much worse $<$ worse $<$ average $<$ better $<$ Much Better \\ Price & numeric: list price in dollars, with standard equipment\\ Country & factor: country where car manufactured \\ Mileage & numeric: gas mileage in miles/gallon, contains NAs \\ Type & factor: Small, Sporty, Compact, Medium, Large, Van \\ \end{tabular} $$ In the analysis we are treating reliability as an unordered outcome. Nodes potentially can be classified as Much worse, worse, average, better, or Much better, though there are none that are labeled as just ``better''. The 32 cars with missing response (listed as NA) were not used in the analysis. Two fits are made, one using the Gini index and the other the information index. \begin{figure}[tb] \myfig{longintro-cars} \caption{Displays the rpart-based model relating automobile Reliability to car type, price, and country of origin. The figure on the left uses the \texttt{gini} splitting index and the figure on the right uses the \texttt{information} splitting index.} \label{ginifig5} \end{figure} <>= fit1 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'gini')) fit2 <- rpart(Reliability ~ Price + Country + Mileage + Type, data = cu.summary, parms = list(split = 'information')) par(mfrow = c(1,2), mar = rep(0.1, 4)) plot(fit1, margin = 0.05); text(fit1, use.n = TRUE, cex = 0.8) plot(fit2, margin = 0.05); text(fit2, use.n = TRUE, cex = 0.8) @ Due to the wide labels at the bottom, we had to increase the figure space slightly and decrease the character size in order to avoid truncation at the left and right edges. Details for the first two splits in the Gini tree are <<>>= summary(fit1, cp = 0.06) @ And for the information splitting the first split is <<>>= fit3 <- rpart(Reliability ~ Price + Country + Mileage + Type, data=cu.summary, parms=list(split='information'), maxdepth=2) summary(fit3) @ The first 3 countries (Brazil, England, France) had only one or two cars in the listing, all of which were missing the reliability variable. There are no entries for these countries in the first node, leading to the $-$ symbol for the rule. The information measure has larger ``improvements'', consistent with the difference in scaling between the information and Gini criteria shown in figure 2, but the relative merits of different splits are fairly stable. The two rules do not choose the same primary split at node 2. The data at this point are \begin{center} \begin{tabular}{rcccccc} &Compact & Large & Medium &Small & Sporty & Van \\ Much worse & 2 & 2 & 4 & 2 & 7 & 1 \\ worse & 5 & 0 & 4 & 3 & 0 & 0 \\ average & 3 & 5 & 8 & 2 & 2 & 3 \\ better & 2 & 0 & 0 & 3 & 0 & 0 \\ Much better & 0 & 0 & 0 & 0 & 0 & 0 \end{tabular} \end{center} Since there are 6 different categories, all $2^5 = 32$ different combinations were explored, and as it turns out there are several with a nearly identical improvement. The Gini and information criteria make different ``random'' choices from this set of near ties. For the Gini index, \emph{Sporty vs others} and \emph{Compact/Small vs others} have improvements of 3.19 and 3.12, respectively. For the information index, the improvements are 6.21 versus 9.28. Thus the Gini index picks the first rule and information the second. Interestingly, the two splitting criteria arrive at exactly the same final nodes, for the full tree, although by different paths. (Compare the class counts of the terminal nodes). We have said that for a categorical predictor with $m$ levels, all $2^{m-1}$ different possible splits are tested.. When there are a large number of categories for the predictor, the computational burden of evaluating all of these subsets can become large. For instance, the call \Co{rpart(Reliability ~ ., data=car90)} does not return for a \emph{long,} long time: one of the predictors in that data set is an unordered factor with 30 levels! Luckily, for any ordered outcome there is a computational shortcut that allows the program to find the best split using only $m-1$ comparisons. This includes the classification method when there are only two categories, along with the anova and Poisson methods to be introduced later. \subsection{Example: Kyphosis data} A third \Co{class} method example explores the parameters \Co{prior} and \Co{loss}. The dataset kyphosis has 81 rows representing data on 81 children who have had corrective spinal surgery. The variables are: $$ \begin{tabular}{ll} Kyphosis & factor: postoperative deformity is present/absent \\ Age & numeric: age of child in months \\ Number & numeric: number of vertebrae involved in operation \\ Start & numeric: beginning of the range of vertebrae involved \\ \end{tabular} $$ \begin{figure} \myfig{longintro-kyphos} \caption{Displays the rpart-based models for the presence/absence of kyphosis. The figure on the left uses the default {prior} (0.79,0.21) and {loss}; the middle figure uses the user-defined {prior} (0.65,0.35) and default {loss}; and the third figure uses the default {prior} and the user-defined {loss} $L(1,2)=3,\, L(2,1)=2$).} \label{kyphfig} \end{figure} <>= lmat <- matrix(c(0,3, 4,0), nrow = 2, ncol = 2, byrow = FALSE) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(prior = c(0.65, 0.35))) fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, parms = list(loss = lmat)) par(mfrow = c(1, 3), mar = rep(0.1, 4)) plot(fit1); text(fit1, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit2); text(fit2, use.n = TRUE, all = TRUE, cex = 0.8) plot(fit3); text(fit3, use.n = TRUE, all = TRUE, cex = 0.8) @ This example shows how even the initial split changes depending on the prior and loss that are specified. The first and third fits have the same initial split (Start $< 8.5$), but the improvement differs. The second fit splits Start at 12.5 which moves 46 people to the left instead of 62. Looking at the leftmost tree, we see that the sequence of splits on the left hand branch yields only a single node classified as {\em present}. For any loss greater than 4 to 3, the routine will instead classify this node as {\em absent}, and the entire left side of the tree collapses, as seen in the right hand figure. This is not unusual --- the most common effect of alternate loss matrices is to change the amount of pruning in the tree, more pruning in some branches and less in others, rather than to change the choice of splits. The first node from the default tree is \begin{verbatim} Node number 1: 81 observations, complexity param=0.1765 predicted class= absent expected loss= 0.2099 class counts: 64 17 probabilities: 0.7901 0.2099 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=6.762, (0 missing) Number < 5.5 to the left, improve=2.867, (0 missing) Age < 39.5 to the left, improve=2.250, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.8025, (0 split) \end{verbatim} The fit using the prior (0.65,0.35) is \begin{Verbatim} Node number 1: 81 observations, complexity param=0.302 predicted class= absent expected loss= 0.35 class counts: 64 17 probabilities: 0.65 0.35 left son=2 (46 obs) right son=3 (35 obs) Primary splits: Start < 12.5 to the right, improve=10.900, (0 missing) Number < 4.5 to the left, improve= 5.087, (0 missing) Age < 39.5 to the left, improve= 4.635, (0 missing) Surrogate splits: Number < 3.5 to the left, agree=0.6667, (0 split) \end{Verbatim} And first split under 4/3 losses is \begin{Verbatim} Node number 1: 81 observations, complexity param=0.01961 predicted class= absent expected loss= 0.6296 class counts: 64 17 probabilities: 0.7901 0.2099 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=5.077, (0 missing) Number < 5.5 to the left, improve=2.165, (0 missing) Age < 39.5 to the left, improve=1.535, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.8025, (0 split) \end{Verbatim} \section{Regression} \label{method} \subsection{Definition} Up to this point the classification problem has been used to define and motivate our formulae. However, the partitioning procedure is quite general and can be extended by specifying 5 ``ingredients'': \begin{itemize} \item A splitting criterion, which is used to decide which variable gives the best split. For classification this was either the Gini or log-likelihood function. In the \Co{anova} method the splitting criteria is $SS_T - (SS_L + SS_R)$, where $SS_T = \sum(y_i - \bar y)^2$ is the sum of squares for the node, and $SS_R$, $SS_L$ are the sums of squares for the right and left son, respectively. This is equivalent to choosing the split to maximize the between-groups sum-of-squares in a simple analysis of variance. This rule is identical to the regression option for {\tree}. \item A summary statistic or vector, which is used to describe a node. The first element of the vector is considered to be the fitted value. For the anova method this is the mean of the node; for classification the response is the predicted class followed by the vector of class probabilities. \item The error of a node. This will be the variance of $y$ for anova, and the predicted loss for classification. \item The prediction error for a new observation, assigned to the node. For anova this is $(y_{new} - \bar y)$. \item Any necessary initialization. \end{itemize} The \Co{anova} method leads to regression trees; it is the default method if $y$ a simple numeric vector, i.e., not a factor, matrix, or survival object. \subsection{Example: Consumer Report car data} The dataset \Co{car90} contains a collection of variables from the April, 1990 Consumer Reports; it has 34 variables on 111 cars. We've excluded 3 variables: tire size and model name because they are factors with a very large number of levels whose printout does not fit well in this report's page size, and rim size because it is too good a predictor of price and leads to a less interesting illustration. (Tiny cars are cheaper and have small rims.) <<>>= cars <- car90[, -match(c("Rim", "Tires", "Model2"), names(car90))] carfit <- rpart(Price/1000 ~ ., data=cars) carfit printcp(carfit) @ <>= temp <- carfit$cptable @ \begin{itemize} \item The relative error is $1-{\rm R}^2$, similar to linear regression. The xerror is related to the PRESS statistic. The first split appears to improve the fit the most. The last split adds little improvement to the apparent error, and increases the cross-validated error. \item The 1-SE rule would choose a tree with 3 splits. \item This is a case where the default cp value of .01 may have over pruned the tree, since the cross-validated error is barely at a minimum. A rerun with the cp threshold at .001 gave little change, however. \item For any CP value between Sexpr{round(temp[3,1],2)} and \Sexpr{round(temp[2,1],2)} the best model has one split; for any CP value between \Sexpr{round(temp[4,1],2)} and \Sexpr{round(temp[3,1],2)} the best model is with 2 splits; and so on. \end{itemize} The \Co{print} and \Co{summary} commands also recognizes the \Co{cp} option, which allows the user to look at only the top few splits. <<>>= summary(carfit, cp = 0.1) @ The first split on displacement partitions the \Sexpr{carfit$frame$n[1]} observations into groups of \Sexpr{carfit$frame$n[2]} and \Sexpr{carfit$frame$n[3]} (nodes 2 and 3) with mean prices of \Sexpr{round(carfit$frame$yval[2])} and \Sexpr{round(carfit$frame$yval[3])} \begin{itemize} \item The improvement listed is the percent change in SS for this split, i.e., $1 - (SS_{right} + SS_{left})/SS_{parent}$, which is the gain in $R^2$ for the fit. \item The data set has displacement of the engine in both cubic inches (Disp) and liters (Disp2). The second is a perfect surrogate split for the first, obviously. \item The weight and displacement are very closely related, as shown by the surrogate split agreement of 91\%. \item Not all the countries are represented in node 3, e.g., there are no larger cars from Brazil. This is indicated by a \Co{-} in the list of split directions. \end{itemize} \begin{figure} \myfig{longintro-anova2} \caption{Both plots were obtained using the function \Co{rsq.rpart(fit3)}. The figure on the left shows that the first split offers the most information. The figure on the right suggests that the tree should be pruned to include only 1 or 2 splits.} \label{anovafig2} \end{figure} <>= par(mfrow=c(1,2)) rsq.rpart(carfit) par(mfrow=c(1,1)) @ Other plots can be used to help determine the best cp value for this model. The function \Co{rsq.rpart} plots the jackknifed error versus the number of splits. Of interest is the smallest error, but any number of splits within the ``error bars'' (1-SE rule) are considered a reasonable number of splits (in this case, 1 or 2 splits seem to be sufficient). As is often true with modeling, simpler is often better. Another useful plot is the ${\rm R}^2$ versus number of splits. The (1 - apparent error) and (1 - relative error) show how much is gained with additional splits. This plot highlights the differences between the ${\rm R}^2$ values. \begin{figure} \myfig{longintro-anova3} \caption{This plot shows the (observed-expected) cost of cars versus the predicted cost of cars based on the nodes/leaves in which the cars landed. There appears to be more variability in node 7 than in some of the other leaves.} \label{anovafig3} \end{figure} Finally, it is possible to look at the residuals from this model, just as with a regular linear regression fit, as shown in figure \ref{anovafig3} produced by the following. <>= plot(predict(carfit), jitter(resid(carfit))) temp <- carfit$frame[carfit$frame$var == '',] axis(3, at = temp$yval, as.character(row.names(temp))) mtext('leaf number', side = 3, line = 3) abline(h = 0, lty = 2) @ \subsection{Example: Stage C data (\Co{anova} method)} The stage C prostate cancer data of the earlier section can also be fit using the anova method, by treating the status variable as though it were continuous. <<>>= cfit2 <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) printcp(cfit2) print(cfit2, cp = 0.03) @ If this tree is compared to the earlier results, we see that it has chosen exactly the same variables and split points as before. The only addition is further splitting of node 2, the upper left ``No'' of figure \ref{fgini1}. This is no accident, for the two class case the Gini splitting rule reduces to $2p(1-p)$, which is the variance of a node. The two methods differ in their evaluation and pruning, however. Note that nodes 4 and 5, the two children of node 2, contain 2/40 and 7/21 progressions, respectively. For classification purposes both nodes have the same predicted value (No) and the split will be discarded since the error (\# of misclassifications) with and without the split is identical. In the regression context the two predicted values of .05 and .33 {\em are} different --- the split has identified a nearly pure subgroup of significant size. This setup is known as \emph{odds regression}, and may be a more sensible way to evaluate a split when the emphasis of the model is on understanding/explanation rather than on prediction error per se. Extension of this rule to the multiple class problem is appealing, but has not yet been implemented in {\rpart}. \section{Poisson regression} \subsection{Definition} The Poisson splitting method attempts to extend {{\rpart}} models to event rate data. The model in this case is $$ \lambda = f(x) $$ where $\lambda$ is an event rate and $x$ is some set of predictors. As an example consider hip fracture rates. For each county in the United States we can obtain \begin{itemize} \item number of fractures in patients age 65 or greater (from Medicare files) \item population of the county (US census data) \item potential predictors such as \begin{itemize} \item socio-economic indicators \item number of days below freezing \item ethnic mix \item physicians/1000 population \item etc. \end{itemize} \end{itemize} Such data would usually be approached by using Poisson regression; can we find a tree based analogue? In adding criteria for rates regression to this ensemble, the guiding principle was the following: the between groups sum-of-squares is not a very robust measure, yet tree based regression works fairly well for this data. So do the simplest (statistically valid) thing possible. Let $c_i$ be the observed event count for observation $i$, $t_i$ be the observation time, and $x_{ij}, j=1,\ldots,p$ be the predictors. The $y$ variable for the program will be a 2 column matrix. Splitting criterion: The likelihood ratio test for two Poisson groups $$ D_{\hbox{parent}} - \left( D_{\hbox{left son}} + D_{\hbox{right son}} \right ) $$ Summary statistics: The observed event rate and the number of events. \begin{eqnarray*} \hat\lambda &=& \frac{\hbox{\# events}}{\hbox{total time}} = \frac{\sum c_i}{\sum t_i} \\ \end{eqnarray*} Error of a node: The within node deviance. $$ D = \sum \left[ c_i \log \left(\frac{c_i}{\hat\lambda t_i} \right) - (c_i - \hat\lambda t_i) \right] $$ Prediction error: The deviance contribution for a new observation, using $\hat \lambda$ of the node as the predicted rate. \subsection{Improving the method} There is a problem with the criterion just proposed, however: cross-validation of a model often produces an infinite value for the deviance. The simplest case where this occurs is easy to understand. Assume that some terminal node of the tree has 20 subjects, but only 1 of the 20 has experienced any events. The cross-validated error (deviance) estimate for that node will have one subset --- the one where the subject with an event is left out --- which has $\hat\lambda=0$. When we use the prediction for the 10\% of subjects who were set aside, the deviance contribution of the subject with an event is $$ \ldots + c_i \log(c_i / 0) + \ldots $$ which is infinite since $c_i >0$. The problem is that when $\hat\lambda=0$ the occurrence of an event is infinitely improbable, and, using the deviance measure, the corresponding model is then infinitely bad. One might expect this phenomenon to be fairly rare, but unfortunately it is not so. One given of tree-based modeling is that a right-sized model is arrived at by purposely over-fitting the data and then pruning back the branches. A program that aborts due to a numeric exception during the first stage is uninformative to say the least. Of more concern is that this edge effect does not seem to be limited to the pathological case detailed above. Any near approach to the boundary value $\lambda=0$ leads to large values of the deviance, and the procedure tends to discourage any final node with a small number of events. An ad hoc solution is to use the revised estimate $$ \hat{\hat \lambda} = \max \left(\hat\lambda, \frac{k}{\sum t_i} \right) $$ where $k$ is 1/2 or 1/6. That is, pure nodes are given a partial event. (This is similar to the starting estimates used in the GLM program for a Poisson regression.) This is unsatisfying, however, and we propose instead using a shrinkage estimate. Assume that the true rates $\lambda_j$ for the leaves of the tree are random values from a Gamma$(\mu, \sigma)$ distribution. Set $\mu$ to the observed overall event rate $\sum c_i / \sum t_i$, and let the user choose as a prior the coefficient of variation $k =\sigma / \mu$. A value of $k=0$ represents extreme pessimism (``the leaf nodes will all give the same result''), whereas $k=\infty$ represents extreme optimism. The Bayes estimate of the event rate for a node works out to be $$ \hat \lambda_k = \frac{\alpha + \sum c_i}{\beta + \sum t_i}, $$ where $\alpha= 1/k^2$ and $\beta = \alpha/ \hat\lambda$. This estimate is scale invariant, has a simple interpretation, and shrinks least those nodes with a large amount of information. In practice, a value of $k=10$ does essentially no shrinkage. For \Co{method='poisson'}, the optional parameters list is the single number $k$, with a default value of 1. \subsection{Example: solder.balance data} The solder.balance data frame, as explained in the R help file, is a dataset with 900 observations which are the results of an experiment varying 5 factors relevant to the wave-soldering procedure for mounting components on printed circuit boards. The full version of the data (unbalanced) is available in the \Co{survival} package. The response variable, skips, is a count of how many solder skips appeared to a visual inspection. The other variables are listed below: $$ \begin{tabular}{ll} Opening & factor: amount of clearance around the mounting pad (S $<$ M $<$ L) \\ Solder & factor: amount of solder used (Thin $<$ Thick) \\ Mask & factor: Type of solder mask used (5 possible) \\ PadType & factor: Mounting pad used (10 possible) \\ Panel & factor: panel (1, 2 or 3) on board being counted \\ \end{tabular} $$ In this call, the \Co{rpart.control} options are modified: \Co{maxcompete = 2} means that only 2 other competing splits are listed (default is 4); \Co{cp = .05} means that a smaller tree will be built initially (default is .01). The $y$ variable for Poisson partitioning may be a two column matrix containing the observation time in column 1 and the number of events in column 2, or it may be a vector of event counts alone. <<>>= sfit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, data = solder.balance, method = 'poisson', control = rpart.control(cp = 0.05, maxcompete = 2)) sfit @ \begin{itemize} \item The response value is the expected event rate (with a time variable), or in this case the expected number of skips. The values are shrunk towards the global estimate of 5.53 skips/observation. \item The deviance is the same as the null deviance (sometimes called the residual deviance) that you'd get when calculating a Poisson glm model for the given subset of data. \end{itemize} <<>>= summary(sfit, cp = 0.1) @ \begin{itemize} \item The improvement is ${\rm Deviance_{parent} - (Deviance_{left} + Deviance_{right})}$, which is the likelihood ratio test for comparing two Poisson samples. \item The cross-validated error has been found to be overly pessimistic when describing how much the error is improved by each split. This is likely an effect of the boundary effect mentioned earlier, but more research is needed. \item The variation xstd is not as useful, given the bias of xerror. \end{itemize} \begin{figure} \myfig{longintro-poisson1} \caption{The first figure shows the solder.balance data, fit with the \Co{poisson} method, using a \Co{cp} value of 0.05. The second figure shows the same fit, but with a \Co{cp} value of 0.10. The function \Co{prune.rpart} was used to produce the smaller tree.} \label{poissonfig1} \end{figure} <>= par(mar = rep(0.1, 4)) plot(sfit) text(sfit, use.n = TRUE, min = 3) fit.prune <- prune(sfit, cp = 0.10) plot(fit.prune) text(fit.prune, use.n = TRUE, min = 2) @ The \Co{use.n = TRUE} option specifies that number of events / total N should be listed along with the predicted rate (number of events/person-years). The function \Co{prune} trims the tree \Co{fit} to the \Co{cp} value $0.10$. The same tree could have been created by specifying \Co{cp = 0.10} in the original call to {\rpart}. \subsection{Example: Stage C Prostate cancer, survival method} One special case of the Poisson model is of particular interest for medical consulting (such as the authors do). Assume that we have survival data, i.e., each subject has either 0 or 1 event. Further, assume that the time values have been pre-scaled so as to fit an exponential model. That is, stretch the time axis so that a Kaplan-Meier plot of the data will be a straight line when plotted on the logarithmic scale. An approximate way to do this is <<>>= require(survival) temp <- coxph(Surv(pgtime, pgstat) ~ 1, stagec) newtime <- predict(temp, type = 'expected') @ and then do the analysis using the \Co{newtime} variable. (This replaces each time value by $\Lambda(t)$, where $\Lambda$ is the cumulative hazard function). A slightly more sophisticated version of this which we will call \emph{exponential scaling} gives a straight line curve for log(survival) under a parametric exponential model. The only difference from the approximate scaling above is that a subject who is censored between observed death times will receive ``credit'' for the intervening interval, i.e., we assume the baseline hazard to be linear between observed deaths. If the data is pre-scaled in this way, then the Poisson model above is equivalent to the \emph{local full likelihood} tree model of LeBlanc and Crowley \cite{Leblanc92}. They show that this model is more efficient than the earlier suggestion of Therneau et al. \cite{Therneau90} to use the martingale residuals from a Cox model as input to a regression tree (anova method). Exponential scaling or method='exp' is the default if $y$ is a \Co{Surv} object. Let us again return to the stage C cancer example. Besides the variables explained previously, we will use pgtime, which is time to tumor progression. <>= require(survival) pfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec) print(pfit) pfit2 <- prune(pfit, cp = 0.016) par(mar = rep(0.2, 4)) plot(pfit2, uniform = TRUE, branch = 0.4, compress = TRUE) text(pfit2, use.n = TRUE) @ Note that the primary split on grade is the same as when status was used as a dichotomous endpoint, but that the splits thereafter differ. Suppose that we wish to simplify this tree, so that only four splits remain. Looking at the table of complexity parameters, we see that \Co{prune(fit, cp = 0.016)} would give the desired result, which is shown in figure \ref{expfig3}. From the figure node 4 (leftmost terminal) has only 1 event for 33 subjects, a relative death rate of .133 times the overall rate, and is defined by grade = 1--2 and g2 $<$ 11.36. \begin{figure} \myfig{longintro-exp3} \caption{Survival fit to the stage C prostate data.} \label{expfig3} \end{figure} For a final summary of the model, it can be helpful to plot the probability of survival based on the final bins in which the subjects landed. To create new variables based on the rpart groupings, using the \Co{where} component of the fit, as shown in figure \ref{expfig4}. We'll further prune the tree down to four nodes by removing the split at node 6. \begin{figure} \myfig{longintro-exp4} \caption{Survival plot based on snipped rpart object. The probability of tumor progression is greatest in node 8, which has patients who are older and have a higher initial tumor grade. } \label{expfig4} \end{figure} <>= temp <- snip.rpart(pfit2, 6) km <- survfit(Surv(pgtime, pgstat) ~ temp$where, stagec) plot(km, lty = 1:4, mark.time = FALSE, xlab = "Years", ylab = "Progression") legend(10, 0.3, paste('node', c(4,5,6,7)), lty = 1:4) @ \subsection{Open issues} The default value of the shrinkage parameter $k$ is 1. This corresponds to prior coefficient of variation of 1 for the estimated $\lambda_j$. We have not nearly enough experience to decide if this is a good value. (It does stop the $\log(0)$ message though). Cross-validation does not work very well. The procedure gives very conservative results, and quite often declares the no-split tree to be the best. This may be another artifact of the edge effect. \section{Plotting options} \label{plotsect} This section examines the various options that are available when plotting an rpart object. For simplicity, the same model (data from Example 1) will be used throughout. You have doubtless already noticed the use of \texttt{par(mar =)} in the examples. The plot function for rpart uses the general \texttt{plot} function to set up the plot region. By default, this leaves space for axes, legends or titles on the bottom, left, and top. Room for axes is not needed in general for rpart plots, and for this report we also do not have top titles. For the small plots in this report it was important to use all of the page, so we reset these for each plot. (Due to the way that Sweave works each plot is a separate environment, so the par() parameters do not endure from plot to plot.) The simplest labeled plot is called by using \Co{plot} and \Co{text} without changing any of the defaults. This is useful for a first look, but sometimes you'll want more information about each of the nodes. \begin{figure} \myfig{longintro-plots1} \caption{\Co {plot(fit); text(fit)}} \label{plotfig1} \end{figure} <>= fit <- rpart(pgstat ~ age + eet + g2 + grade + gleason + ploidy, stagec, control = rpart.control(cp = 0.025)) par(mar = rep(0.2, 4)) plot(fit) text(fit) @ \begin{figure} \myfig{longintro-plots2} \caption{\Co {plot(fit, uniform = TRUE); text(fit,use.n = TRUE,all = TRUE)}} \label{plotfig2} \end{figure} The next plot has uniform stem lengths (\Co{uniform = TRUE}), has extra information (\Co{use.n = TRUE}) specifying number of subjects at each node, and has labels on all the nodes, not just the terminal nodes (\Co{all = TRUE}). <>= par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE) text(fit, use.n = TRUE, all = TRUE) @ \begin{figure} \myfig{longintro-plots3} \caption{\Co{plot(fit, branch=0); text(fit,use.n = TRUE)}} \label{plotfig3} \end{figure} Fancier plots can be created by modifying the \Co{branch} option, which controls the shape of branches that connect a node to its children. The default for the plots is to have square shouldered trees (\Co{branch = 1.0}). This can be taken to the other extreme with no shoulders at all (\Co{branch=0}). <>= par(mar = rep(0.2, 4)) plot(fit, branch = 0) text(fit, use.n = TRUE) @ \begin{figure} \myfig{longintro-plots4} \caption{\Co{plot(fit, branch = 0.4, uniform = TRUE, compress = TRUE)}} \label{plotfig4} \end{figure} These options can be combined with others to create the plot that fits your particular needs. The default plot may be inefficient in it's use of space: the terminal nodes will always lie at x-coordinates of 1,2,\ldots. The \Co{compress} option attempts to improve this by overlapping some nodes. It has little effect on figure \ref{plotfig4}, but in figure \ref{figdig} it allows the lowest branch to ``tuck under'' those above. If you want to play around with the spacing with compress, try using \Co{nspace} which regulates the space between a terminal node and a split. <>= par(mar = rep(0.2, 4)) plot(fit, branch = 0.4,uniform = TRUE, compress = TRUE) text(fit, all = TRUE, use.n = TRUE) @ \begin{figure} \myfig{longintro-plots5} \caption{Fancier plot} \label{plotfig5} \end{figure} Several of these options were combined into a function called \Co{post.rpart}, whose default action of creating a .ps file in the current directory is now rather dated. Identical results to the function can be obtained by the collection of options shown below, the result is displayed in figure \ref{plotfig5}. The code is essentially <>= par(mar = rep(0.2, 4)) plot(fit, uniform = TRUE, branch = 0.2, compress = TRUE, margin = 0.1) text(fit, all = TRUE, use.n = TRUE, fancy = TRUE, cex= 0.9) @ The \Co{fancy} option of \Co{text} creates the ellipses and rectangles, and moves the splitting rule to the midpoints of the branches. \Co{Margin} shrinks the plotting region slightly so that the \Co{text} boxes don't run over the edge of the plot. The \Co{branch} option makes the lines exit the ellipse at a ``good'' angle. A separate package \texttt{rpart.plot} carries these ideas much further. \section{Other functions} A more general approach to cross-validation can be gained using the \Co{xpred.rpart} function. Given an rpart fit, a vector of $k$ complexity parameters, and the desired number of cross-validation groups, this function returns an $n$ by $k$ matrix containing the predicted value $\hat y_{(-i)}$ for each subject, from the model that was fit without that subject. The $cp$ vector defaults to the geometric mean of the $cp$ sequence for the pruned tree on the full data set. Here is an example that uses the mean absolute deviation for continuous data rather than the usual mean square error. <<>>= carfit <- rpart(Price/1000 ~ ., cars) carfit$cptable price2 <- cars$Price[!is.na(cars$Price)]/1000 temp <- xpred.rpart(carfit) errmat <- price2 - temp abserr <- colMeans(abs(errmat)) rbind(abserr, relative=abserr/mean(abs(price2-mean(price2)))) @ We see that on the absolute error scale the relative error improvement is not quite so large, though this could be expected given that the optimal split was not chosen to minimize absolute error. \section{Test Cases} \subsection{Classification} The definitions for classification trees can get the most complex, especially with respect to priors and loss matrices. In this section we lay out a simple example, in great detail. (This was done to debug the R functions.) \begin{table} \centering \begin{tabular} {r|rrrrrrrr} y & 1& 2 & 3 & 1 & 2 &3 & 1 & 2 \\ x1& 1 &2 & 3 & 4 & 5& 6 & 7 & 8 \\ x2& 1 &2 & 3 & 4 & 5& 6 & 1 & 2 \\ x3&NA &22& 38& 12&NA& 48& 14& 32 \\ \multicolumn{2}{c}{} \\ % tricky way to get a blank line with no vertical bar y& 3 & 1 & 2 & 3 & 1 & 2 & 1 \\ x1& 9 & 10 & 11 & 12 & 13 & 14 & 15 \\ x2& 3 & 4 & 5 & 6 & 1 & 2 & 3 \\ x3& 40& NA & 30& 46 & 28 & 34 & 48 \\ \end{tabular} \caption{Data set for the classification test case} \label{datatab} \end{table} Let $n=15$, and the data be as given in table \ref{datatab}. The loss matrix is defined as $$ L = \begin{array}{ccc} 0 & 2 & 2 \\ 2 & 0 & 6 \\ 1 & 1 & 0 \\ \end{array} $$ where rows represent the true class and columns the assigned class. Thus the error in mistakenly calling a class 2 observation a 3 is quite large in this data set. The prior probabilities for the study are assumed to be $\pi = .2, .3, .5$, so class 1 is most prevalent in the input data ($n_i$=6, 5, and 4 observations, respectively), but class 3 the most prevalent in the external population. Splits are chosen using the Gini index with altered priors, as defined in equation (4.15) of Breiman et al \cite{Breiman83}. \begin{eqnarray*} \tilde\pi_1 &=& \pi_1(0+2+2) / \sum \tilde \pi_i = 4/21 \\ \tilde\pi_2 &=& \pi_2(2+0+6) / \sum \tilde \pi_i = 12/21 \\ \tilde\pi_3 &=& \pi_3(1+1+0) / \sum \tilde \pi_i = 5/21\\ \end{eqnarray*} For a given node $T$, the Gini impurity will be $\sum_j p(j|T)[1-p(j|T)] = 1- \sum p(j|T)^2$, where $p(j|T)$ is the expected proportion of class $j$ in the node: $$ p(j|T) = \tilde\pi_j [n_i(T)/n_i ]/ \sum p(i|T) $$. Starting with the top node, for each possible predicted class we have the following loss $$ \begin{tabular}{cc} predicted class & E(loss)\\ 1 & .2*0 + .3*2 + .5*1 = 1.1 \\ 2 & .2*2 + .3*0 + .5*1 = 0.9 \\ 3 & .2*2 + .3*6 + .5*0 = 2.2 \\ \end{tabular} $$ The best choice is class 2, with an expected loss of 0.9. The Gini impurity for the node, using altered priors, is $G = 1 - (16+144+25)/21^2 = 256/441 \approx .5805$. Assume that variable $x1$ is split at 12.5, which is, as it turns out, the optimal split point for that variable under the constraint that at least 2 observations are in each terminal node. Then the right node will have class counts of (4,4,4) and the left node of (2,1,0). For the right node (node 3 in the tree) \\ \begin{tabular}{rcl} $P(R)$ &=&.2(4/6) + .3(4/5) + .5(4/4)= 131/150 \\ &=& \mbox{probability of the node (in the population)} \\ $p(i|R)$ &=& (.2(4/6), .3(4/5), .5(4/4))/$P(R)$ \\ $\widetilde P(R)$ &=& (4/21)(4/6) + (12/21)(4/5) + (5/21)(4/4) = 259/315=37/45 \\ $\tilde p(i|R)$&=& [(4/21)(4/6), (12/21)(4/5), (5/21)(4/4)] (45/37) \\ $G(R)$&=& $1 - \sum \tilde p(i|R)^2 \approx .5832$ \end{tabular} For the left node (node 2) \\ \begin{tabular}{rcl} $P(L)$ &=&.2(2/6) + .3(1/5) + .5(0/4)= 19/150 \\ $p(i|L)$ &=& (.4/3, .3/5, 0)/ $P(L)$ = (10/19, 9/19, 0) \\ $\widetilde P(L)$ &=& $1- \widetilde P(R) =8/45$ \\ $\tilde p(i|L)$ &=& [(4/21)(2/6), (12/21)(1/5), (5/21)(0/4)]/ $\widetilde P(L)$\\ $G(L)$ &=&$ 1 - \sum \tilde p(i|L)^2 \approx .459$ \\ \end{tabular} The total improvement for the split involves the change in impurity between the parent and the two child nodes $$ n(G - [\widetilde P(L)* G(L) + \widetilde P(R)* G(R)] ) \approx .2905 $$ where $n=15$ is the total sample size. For variable $x2$ the best split occurs at 5.5, splitting the data into left and right nodes with class counts of (2,2,1) and (4,3,3), respectively. Computations just exactly like the above give an improvement of 1.912. For variable $x3$ there are 3 missing values, and the computations are similar to what would be found for a node further down the tree with only 12/15 observations. The best split point is at 3.6, giving class counts of (3,4,0) and (1,0,4) in the left and right nodes, respectively. For the right node (node 3 in the tree)\\ \begin{tabular}{rcl} $\widetilde P(R)$ &=& (4/21)(3/6) + (12/21)(4/5) + (5/21)(0/4) = 174/315\\ $\tilde p(i|R)$&=& [(4/21)(3/6), (12/21)(4/5), (5/21)(0/4)] (315/174) \\ &=& (5/29, 24/29, 0) \\ $G(R)$&=& $1 - (25+576)/29^2 = 240/841 approx .2854$ \end{tabular} For the left node (node 2) \\ \begin{tabular}{rcl} $\widetilde P(L)$ &=& (4/21)(1/6) +(12/21)(0/5) + (5/21)(4/4)= 85/315\\ $\tilde p(i|L)$ &=& [(4/21)(1/6), (12/21)(0/5), (5/21)(4/4)] (315/85) \\ &=& (2/17, 0, 15/17)\\ $G(L)$ &=&$ 1 - (4 + 225)/17^2 = 60/289 \approx .2076$ \\ \end{tabular} The overall impurity for the node involves only 12 of the 15 observations, giving the following values for the top node:\\ \begin{tabular}{rcl} $\widetilde P(T)$ &=& 174/315 + 85/315 = 259/315\\ $\tilde p(i|T)$ &=& [(4/21)(4/6), (12/21)(4/5), (5/21)(4/4)] (315/259) \\ &=& (40/259, 144/259, 75/259) \\ $G(T)$& =& $1- (40^2 + 144^2 + 75^2)/259^2 = 39120/67081$ \end{tabular} The total improvement for the split involves the impurity $G$ of all three nodes, weighted by the probabilities of the nodes under the alternate priors. $$ 15* \{(259/315)(39120/67081) - [(174/315)(240/841) + (85/315)(60/289)]\} \approx 3.9876 $$ As is true in general with the rpart routines, variables with missing values are penalized with respect to choosing a split -- a factor of 259/315 or about 12/15 in the case of $x3$ at the top node. Table \ref{tab:cutpoint} shows the statistics for all of the cutpoints of $x3$. \begin{table} \centering \begin{tabular}{c | rrrrr} Cutpoint& $P(L)$ & $P(R)$ & $G(L)$ & $G(R)$ & $\Delta I$\\ \hline 1.3 & 0.03 & 0.97 & 0.00 & 0.56 & 0.55\\ 1.8 & 0.06 & 0.94 & 0.00 & 0.53 & 1.14\\ 2.5 & 0.18 & 0.82 & 0.46 & 0.57 & 0.45\\ 2.9 & 0.21 & 0.79 & 0.50 & 0.53 & 0.73\\ 3.1 & 0.32 & 0.68 & 0.42 & 0.56 & 1.01\\ 3.3 & 0.44 & 0.56 & 0.34 & 0.52 & 1.96\\ 3.6 & 0.55 & 0.45 & 0.29 & 0.21 & 3.99\\ 3.9 & 0.61 & 0.39 & 0.41 & 0.26 & 2.64\\ 4.3 & 0.67 & 0.33 & 0.48 & 0.33 & 1.56\\ 4.7 & 0.73 & 0.27 & 0.53 & 0.45 & 0.74\\ 4.8 & 0.79 & 0.21 & 0.56 & 0.00 & 0.55\\ \end{tabular} \caption{Cut points and statistics for variable $x3$, top node} \label{tab:cutpoint} \end{table} Because $x3$ has missing values, the next step is choice of a surrogate split. Priors and losses currently play no role in the computations for selecting surrogates. For all the prior computations, the effect of priors is identical to that of adding case weights to the observations such that the apparent frequencies are equal to the chosen priors; since surrogate computations do account for case weights, one could argue that they should also then make use of priors. The argument has not yet been found compelling enough to add this to the code. Note to me: the cp is not correct for usesurrogate=0. The error after a split is not (left error + right error) -- it also needs to have a term (parent error for those obs that weren't split). \bibliographystyle{plain} \bibliography{refer} \end{document} rpart/inst/doc/usercode.Rnw0000644000176200001440000005643213312732155015441 0ustar liggesusers\documentclass{article} \usepackage[pdftex]{graphicx} \usepackage{Sweave} \usepackage{amsmath} \addtolength{\textwidth}{1in} \addtolength{\oddsidemargin}{-.5in} \setlength{\evensidemargin}{\oddsidemargin} \SweaveOpts{keep.source=TRUE, fig=FALSE} %\VignetteIndexEntry{User Written Split Functions} %\VignetteDepends{rpart} % Ross Ihaka suggestions \DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em} \DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em} \DefineVerbatimEnvironment{Scode}{Verbatim}{xleftmargin=2em} \fvset{listparameters={\setlength{\topsep}{0pt}}} \renewenvironment{Schunk}{\vspace{\topsep}}{\vspace{\topsep}} \newcommand{\myfig}[1]{\resizebox{\textwidth}{!} {\includegraphics{#1.pdf}}} \title{User written splitting functions for RPART} \author{Terry Therneau \\Mayo Clinic} \begin{document} \maketitle <>= options(continue=" ", width=60) options(SweaveHooks=list(fig=function() par(mar=c(5.1, 4.1, .3, 1.1)))) @ \section{Splitting functions} The rpart code was written in a modular fashion with the idea that the C code would be extended to include more splitting functions. As a consequence all of the splitting functions are coordinated through a single structure in the file \texttt{func\_table.h}, shown below: \begin{verbatim} static struct { int (*init_split)(); void (*choose_split)(); void (*eval)(); double (*error)(); } func_table [] = { {anovainit, anova, anovass, anovapred}, {poissoninit, poisson, poissondev, poissonpred}, {giniinit, gini, ginidev, ginipred}, {usersplit_init, usersplit, usersplit_eval, usersplit_pred} }; #define NUM_METHODS 4 /*size of the above structure */ \end{verbatim} Adding a new splitting method requires the definition of four functions which initialize, choose a split, compute the predicted value or values for a node, and compute a prediction error for a new observation assigned to the node. The last of these is used only in cross-validation. To add new splitting rules to the main routine four new C functions need to be defined, the \texttt{func\_table.h} file expanded, the R function \texttt{rpart} updated to recognize the new option (it calls the C routine with the row number of func\_table), and finally an initialization function written. See the \texttt{rpart.class}, \texttt{rpart.anova}, and \texttt{rpart.exp} functions for examples of the latter. The lion's share of the code, which deals with all the necessary bookkeeping, remains unchanged. An easier route is to add a user defined splitting rules as a set of R functions. The resulting code will be considerably slower than the built-in functions; nevertheless this allows an easy way to extend \texttt{rpart}, and to test out new ideas with less effort than additions to the C base. For user defined splits only the first three functions are defined, and cross-validation does not happen automatically. (User defined methods are many times slower than the built in ones, so it may be preferable to skip cross-validation during the initial evaluation of a model.) \section{Anova function} As the first illustration we show how to add anova splitting as a user-written addition. This method is also one of those built into the C code, so we can also check the correctness of the results. \subsection{Initialization function} <<>>= itemp <- function(y, offset, parms, wt) { if (is.matrix(y) && ncol(y) > 1) stop("Matrix response not allowed") if (!missing(parms) && length(parms) > 0) warning("parameter argument ignored") if (length(offset)) y <- y - offset sfun <- function(yval, dev, wt, ylevel, digits ) { paste(" mean=", format(signif(yval, digits)), ", MSE=" , format(signif(dev/wt, digits)), sep = '') } environment(sfun) <- .GlobalEnv list(y = c(y), parms = NULL, numresp = 1, numy = 1, summary = sfun) } @ On input the function will be called with \begin{description} \item[y] the response value as found in the formula. Note that rpart will normally have removed any observations with a missing response. \item[offset] the offset term, if any, found on the right hand side of the formula \item[parms] the vector or list (if any) supplied by the user as a \texttt{parms} argument to the call. \item[wt] the weight vector from the call, if any \end{description} The last two arguments are optional. The initialization function needs to perform any data checks, deal with the offset vector if present, and return a list containing \begin{description} \item[y] the value of the response, possibly updated \item[numy] the number of columns of y \item[numresp] the length of the prediction vector for each node \item[summary] optional: a function which will produce a 1--3 line summary for the node, to be used by \texttt{summary.rpart}. \item[print] optional: a function which will produce a one line summary for the \texttt{print} function. \item[text] optional: a function which will produce a short label for the node, used by the \texttt{plot} function. \end{description} The parameters vector can contain whatever might be appropriate for the method, e.g. the variance of a prior distribution. The vector of parameters passed forward need not be he same as the set passed into the routine. In anova splitting there are no extra parameters. The summary function will be called with arguments which are \begin{itemize} \item yval= the response value for the node \item dev = the deviance for the node \item wt = the sum of weights at the node (number of observations) \item ylevel = the levels of y, if y is categorical \item digits = the current setting for digits \end{itemize} It should return a character vector. The text function will be called with these arguments plus two more \begin{itemize} \item n= the number of observations in the node \item use.n = TRUE/FALSE, see the help page for \texttt{text.rpart} \end{itemize} The print function is called only with yval, ylevels, and digits. The only puzzling line may be \texttt{environment(sfun) <- .GlobalEnv}. R ensures that any function can access variables that are \emph{not} passed in as arguments via a mechanism called environments. As a trivial example <<>>= temp <- 4 fun1 <- function(x) { q <- 15 z <- 10 fun2 <- function(y) y + z + temp fun2(x^2) } fun1(5) @ The definition of fun2 essentially contains a copy of \texttt{z} (and \texttt{q} as well) to ensure that this works. The exception to this is objects at the top level such as \texttt{temp} above; the user is responsible for the retention of those via their answer to the ``save'' question at the end of an R session. The consequence of this is that the summary function created by a call to itemp will by default have copies of all of the external variables that it \emph{might} make use of, in this case all of the input arguments. The summary function is in fact self-contained and makes reference only to its input arguments (doing otherwise is bad programming, in my opinion) and so needs none of these. Setting the environment of the function to \texttt{.GlobalEnv} in essence tells R to treat the function as though it had been defined at top level, i.e., the input prompt, and thus not attach these extraneous copies. I first became aware of this issue when using a huge data set, and found that the saved output of the fit took up an inordinate amount of disk space due to data copies attached to the summary function. Do not take this as a critique of R environments in general. The rules governing them need to be responsive to a large ensemble of conditions; in this particular case the results are not ideal but in the main they are the best compromise possible. \subsection{Evaluation function} The evaluation function is called once per node. It needs to produce a deviance for the node along with a vector to be used as a label for the node. <<>>= etemp <- function(y, wt, parms) { wmean <- sum(y*wt)/sum(wt) rss <- sum(wt*(y-wmean)^2) list(label = wmean, deviance = rss) } @ As an example of a longer label, the gini splitting method for categorical outcomes returns both the chosen group and the full vector of estimated group probabilities. The deviance value that is returned does not need to be an actual deviance associated with a log-likelihood, any impurity measure for the node will work. However, the pruning algorithm used during tree construction will be most efficient if the value 0 corresponds to a perfectly pure node. (The pruning code decides when a branch would be futile and further computations on it can thus be avoided.) \subsection{Splitting function} The splitting function is where the work lies. It will be called once for every covariate at each potential split. The input arguments are \begin{description} \item[y] vector or matrix of response values \item[wt] vector of weights \item[x] vector of x values \item[parms] vector of user parameters, passed forward \item[continuous] if TRUE the x variable should be treated as continuous \end{description} The data will have been subset to include only the non-missing subset of x and y at the node, and if x is continuous all values will be in the sorted order of the x variable. If x is continuous the routine should return two vectors each of length $n-1$, where $n$ is the length of x: \begin{description} \item[goodness] the utility of the split, where larger numbers are better. A value of 0 signifies that no worthwhile split could be found (for instance if y were a constant). The $i$th value of goodness compares a split of observations 1 to $i$ versus $i+1$ to $n$. \item[direction] A vector of the same length with values of -1 and +1, where -1 suggests that values with y $<$ cutpoint be sent to the left side of the tree, and a value of +1 that values with y $<$ cutpoint be sent to the right. This is not critical, but sending larger values of y to the right, as is done in the code below, seems to make the final tree easier to read. \end{description} The reason for returning an entire vector of goodness values is that the parent code is responsible for handling the minimum node size constraint, and also for dealing with ties. When x is continuous the split routine actually has no reason to look at x. <<>>= stemp <- function(y, wt, x, parms, continuous) { # Center y n <- length(y) y <- y- sum(y*wt)/sum(wt) if (continuous) { # continuous x variable temp <- cumsum(y*wt)[-n] left.wt <- cumsum(wt)[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt goodness <- (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) list(goodness = goodness, direction = sign(lmean)) } else { # Categorical X variable ux <- sort(unique(x)) wtsum <- tapply(wt, x, sum) ysum <- tapply(y*wt, x, sum) means <- ysum/wtsum # For anova splits, we can order the categories by their means # then use the same code as for a non-categorical ord <- order(means) n <- length(ord) temp <- cumsum(ysum[ord])[-n] left.wt <- cumsum(wtsum[ord])[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt list(goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2), direction = ux[ord]) } } @ The code above does the computations for all the split points at once by making use of two tricks. The first is to center the y values at zero (so the grand mean is zero), and the second takes advantage of the many ways to write the ``effect'' sum of squares for a simple two group anova. The key identity is \begin{equation} \sum (y_i - c)^2 = \sum (y_i - \overline y)^2 + n(c - \overline y)^2 \end{equation} If you have an old enough statistics book, this is used to show that for a 1-way anova the between groups sum of squares $SS_B$ is \begin{equation} SS_B = n_l(\overline y_l - \overline y)^2 + n_r(\overline y_r - \overline y)^2 \label{ssb} \end{equation} where $n_l$ is the number of observations in the left group, $\overline y_l$ the mean of $y$ in the left group, $\overline y$ the overall mean, and $n_r$ $\overline y_r$ the corresponding terms for the right hand group. Centering at zero makes $\overline y$ zero in \eqref{ssb}, and the terms then can be computed for all splits at once using the cumsum function. Extension of the formulas to case weights is left as an exercise for the reader. If the predictor variable x is categorical with $k$ classes then there are potentially $2^{k-1} -1$ different ways to split the node. However, for most splitting rules the optimal rule can be found by first ordering the groups by their average y value and then using the usual splitting rule on this ordered variable. For user mode rules this is assumed to be the case. The variable x is supplied as integer values 1, 2, \ldots, k. On return the direction vector should have $k$ values giving the ordering of the groups, and the goodness vector $k-1$ values giving the utility of the splits. \subsection{Test} We can test the above code to make sure that it gives the same answer as the built-in anova splitting method. <<>>= library(rpart) mystate <- data.frame(state.x77, region=state.region) names(mystate) <- casefold(names(mystate)) #remove mixed case ulist <- list(eval = etemp, split = stemp, init = itemp) fit1 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = ulist, minsplit = 10) fit2 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = 0) all.equal(fit1$frame, fit2$frame) all.equal(fit1$splits, fit2$splits) all.equal(fit1$csplit, fit2$csplit) all.equal(fit1$where, fit2$where) all.equal(fit1$cptable, fit2$cptable) @ The all.equal test can't be done on fit1 vs fit2 as a whole since their \texttt{call} component will differ. \section{Cross validation} To do cross-validation on user written rules one needs to use the \texttt{xpred.rpart} routine. This routine returns the predicted value(s) for each observation, predicted from a fit that did not include that observation. The result is a matrix with one row per subject and one column for each complexity parameter value. As an example we will replicate the cross-validation results for the anova model above. In order to get the same groupings we fix the xval group membership in advance. <<>>= xgroup <- rep(1:10, length = nrow(mystate)) xfit <- xpred.rpart(fit1, xgroup) xerror <- colMeans((xfit - mystate$murder)^2) fit2b <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = xgroup) topnode.error <- (fit2b$frame$dev/fit2b$frame$wt)[1] xerror.relative <- xerror/topnode.error all.equal(xerror.relative, fit2b$cptable[, 4], check.attributes = FALSE) @ \begin{figure} \myfig{usercode-fig1} \caption{Goodness of split for predicting income from illiteracy, using the state data.} \label{fig:state} \end{figure} <>= tdata <- mystate[order(mystate$illiteracy), ] n <- nrow(tdata) temp <- stemp(tdata$income, wt = rep(1, n), tdata$illiteracy, parms = NULL, continuous = TRUE) xx <- (tdata$illiteracy[-1] + tdata$illiteracy[-n])/2 plot(xx, temp$goodness, xlab = "Illiteracy cutpoint", ylab = "Goodness of split") lines(smooth.spline(xx, temp$goodness, df = 4), lwd = 2, lty = 2) @ \subsection{Smoothed anova} For any particular covariate consider a plot of x= split point vs y= goodness of split; figure \ref{fig:state} shows an example for the state data set, along with a smoothed curve. The plot points are very erratic. At one time we entertained the idea that a more stable split point would be found by finding the maximum value for a smoothed version of the plot. Exactly how to smooth is of course a major issue in such an endeavor. Modification of the anova splitting routine to test this is quite easy --- simply add a few lines to the stemp routine: \begin{verbatim} ... goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) rx <- rank(x[-1]) #use only the ranks of x, to preserve invariance fit <- smooth.spline(rx, goodness, df=4) list(goodness= predict(fit, rx)$y, direction=sign(lmean)) } else { ... \end{verbatim} \section{Alternating logistic regression} Chen \cite{Chen07} used a mixed logistic regression model to fit clinical and genetic marker data. \begin{equation} E(y) = \frac{e^{\eta_1 + \eta_2}}{1+e^{\eta_1 + \eta_2}} \end{equation} where $\eta_1 = X\beta$ is a standard linear predictor based on clinical variables $X$ and $\eta_2$ is based on a tree model using a set of genetic markers $Z$. The solution was computed using alternate steps of an ordinary logistic regression on $X$ treating $\eta_2$ as an offset, and an rpart fit for $Z$ treating $\eta_1$ as an offset. For many splitting rules the initialization function can take care of offset terms once and for all by modifying the y vector, but this is not the case for logistic regression. In order to make the offset visible to the splitting function we create a 2 column ``response'' consisting of the original y vector in the first column and the offset in the second. <<>>= loginit <- function(y, offset, parms, wt) { if (is.null(offset)) offset <- 0 if (any(y != 0 & y != 1)) stop ('response must be 0/1') sfun <- function(yval, dev, wt, ylevel, digits ) { paste("events=", round(yval[,1]), ", coef= ", format(signif(yval[,2], digits)), ", deviance=" , format(signif(dev, digits)), sep = '')} environment(sfun) <- .GlobalEnv list(y = cbind(y, offset), parms = 0, numresp = 2, numy = 2, summary = sfun) } logeval <- function(y, wt, parms) { tfit <- glm(y[,1] ~ offset(y[,2]), binomial, weight = wt) list(label= c(sum(y[,1]), tfit$coef), deviance = tfit$deviance) } @ The evaluation function returns the number of positive responses along with the fitted coefficient. The splitting function attempts every possible logistic regression. A much faster version could almost certainly be written based on a score test, however. <<>>= logsplit <- function(y, wt, x, parms, continuous) { if (continuous) { # continuous x variable: do all the logistic regressions n <- nrow(y) goodness <- double(n-1) direction <- goodness temp <- rep(0, n) for (i in 1:(n-1)) { temp[i] <- 1 if (x[i] != x[i+1]) { tfit <- glm(y[,1] ~ temp + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance direction[i] <- sign(tfit$coef[2]) } } } else { # Categorical X variable # First, find out what order to put the categories in, which # will be the order of the coefficients in this model tfit <- glm(y[,1] ~ factor(x) + offset(y[,2]) - 1, binomial, weight = wt) ngrp <- length(tfit$coef) direction <- rank(rank(tfit$coef) + runif(ngrp, 0, 0.1)) #break ties # breaking ties -- if 2 groups have exactly the same p-hat, it # does not matter which order I consider them in. And the calling # routine wants an ordering vector. # xx <- direction[match(x, sort(unique(x)))] #relabel from small to large goodness <- double(length(direction) - 1) for (i in 1:length(goodness)) { tfit <- glm(y[,1] ~ I(xx > i) + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance } } list(goodness=goodness, direction=direction) } @ \section{Categorical splits} A common question from users concerns the splitting rules for a categorical predictor. If a categorical predictor has 5 levels, why don't we need to evaluate all $2^4 = 16$ possible ways of splitting this into two groups? The result is based on a fairly simple observation. Think of the choice of a split as two problems: selection of a pair of predicted values $p1$ and $p2$, and selection of the observations into two groups $g1$ and $g2$. Then the problem is to find \begin{equation*} \min_{g1, g2} \left[\min_{p1, p2} \sum_{i \in g1} E(y_i, p1) + \sum_{i \in g2} E(y_i, p2) \right] \end{equation*} where $E$ is our error in prediction function. The inner optimization is trivial for most problems, so we normally don't think about it. For a continuous $y$ variable for instance the error is $E(y,p) = (y=p)^2$ and $p1$ is the mean $y$ value of all subjects in group 1. Now reverse the order of the above equation, and instead think of the ``outer loop'' of the optimization as first a selection of the two predicted values $p1$ and $p2$, followed by finding the optimal grouping for those predicted values. When the predictor $x$ is categorical this reduces to checking whether $\sum E(y, p1)$ or $\sum E(y, p2)$ is smaller, when summed over all the observations having each particular level of $x$, and then assigning that level to group $g1$ or $g2$ accordingly. For squared error loss it is easy to see that this last step will be to assign a subset to group $g1$ if mean($y$), over that subset, is closer to $p1$ than to $p2$. Thus, whatever the values of $p1$ and $p2$, the best split of the data divides the groups according to low versus high values of $\overline y$. If $x$ has $k$ levels, this shows that the only \emph{admissible} splits are the $k-1$ groupings that first order the data according to the within level means: as $p1$ and $p2$ range over the entire real plane these are the only inner loop solutions that will arise. Knowing this, the computer code does not have to try all values of $p1$ and $p2$, it uses the first form of the minimum but can restrict the outer loop to this small set of cases. Each different type of $y$ value and loss function requires it's own version of the paragraph just above. For Poisson loss the optimal ordering turns out to be by the within level event rate, for instance. A similar partition can be shown for many loss functions. For categorical $y$ and the Gini criterion the result is particularly interesting. Assume that the response $y$ has $m$ levels, and summarize each of the distinct groups of observations corresponding to a categorical predictor $x$ by it proportion vector: the proportion with $y=1$, proportion with $y=2$ etc. If $x$ has $k$ levels, these proportions are $k$ points lying on the $m$ dimensional simplex, and the set of admissible splits are all partitions of these points by a plane. For the information criterion the points lie on a curved surface in $m$ space but again the admissible set are all partitions by a plane. When $m=2$ the points lie on a 1-dimensional curve and the problem reduces to ordering the groups by mean($y$). For $m>2$ the total number of admissible partitions of $k$ points can be much smaller than $2^k$ and efficient methods for enumerating them have been described \cite{Sleumer}, but this has not been incorporated into rpart. \begin{thebibliography}{9} \bibitem{Chen07} Chen J, Yu K, Hsing A and Therneau TM. \emph{A partially linear tree-based regression model for assessing complex joint gene-gene and gene-environment effects}, Genet Epidemiol, 2007(3), 238-51. \bibitem{Sleumer} Nora Sleumer, \emph{Hyperplane arrangements: construction visualization and applications}, PhD dissertation, Swiss Federal Institute of Technology, 1969. \end{thebibliography} \end{document} rpart/inst/doc/usercode.R0000644000176200001440000001606213453662152015074 0ustar liggesusers### R code from vignette source 'usercode.Rnw' ################################################### ### code chunk number 1: usercode.Rnw:26-28 ################################################### options(continue=" ", width=60) options(SweaveHooks=list(fig=function() par(mar=c(5.1, 4.1, .3, 1.1)))) ################################################### ### code chunk number 2: usercode.Rnw:85-99 ################################################### itemp <- function(y, offset, parms, wt) { if (is.matrix(y) && ncol(y) > 1) stop("Matrix response not allowed") if (!missing(parms) && length(parms) > 0) warning("parameter argument ignored") if (length(offset)) y <- y - offset sfun <- function(yval, dev, wt, ylevel, digits ) { paste(" mean=", format(signif(yval, digits)), ", MSE=" , format(signif(dev/wt, digits)), sep = '') } environment(sfun) <- .GlobalEnv list(y = c(y), parms = NULL, numresp = 1, numy = 1, summary = sfun) } ################################################### ### code chunk number 3: usercode.Rnw:155-163 ################################################### temp <- 4 fun1 <- function(x) { q <- 15 z <- 10 fun2 <- function(y) y + z + temp fun2(x^2) } fun1(5) ################################################### ### code chunk number 4: usercode.Rnw:194-199 ################################################### etemp <- function(y, wt, parms) { wmean <- sum(y*wt)/sum(wt) rss <- sum(wt*(y-wmean)^2) list(label = wmean, deviance = rss) } ################################################### ### code chunk number 5: usercode.Rnw:249-284 ################################################### stemp <- function(y, wt, x, parms, continuous) { # Center y n <- length(y) y <- y- sum(y*wt)/sum(wt) if (continuous) { # continuous x variable temp <- cumsum(y*wt)[-n] left.wt <- cumsum(wt)[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt goodness <- (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2) list(goodness = goodness, direction = sign(lmean)) } else { # Categorical X variable ux <- sort(unique(x)) wtsum <- tapply(wt, x, sum) ysum <- tapply(y*wt, x, sum) means <- ysum/wtsum # For anova splits, we can order the categories by their means # then use the same code as for a non-categorical ord <- order(means) n <- length(ord) temp <- cumsum(ysum[ord])[-n] left.wt <- cumsum(wtsum[ord])[-n] right.wt <- sum(wt) - left.wt lmean <- temp/left.wt rmean <- -temp/right.wt list(goodness= (left.wt*lmean^2 + right.wt*rmean^2)/sum(wt*y^2), direction = ux[ord]) } } ################################################### ### code chunk number 6: usercode.Rnw:327-342 ################################################### library(rpart) mystate <- data.frame(state.x77, region=state.region) names(mystate) <- casefold(names(mystate)) #remove mixed case ulist <- list(eval = etemp, split = stemp, init = itemp) fit1 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = ulist, minsplit = 10) fit2 <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = 0) all.equal(fit1$frame, fit2$frame) all.equal(fit1$splits, fit2$splits) all.equal(fit1$csplit, fit2$csplit) all.equal(fit1$where, fit2$where) all.equal(fit1$cptable, fit2$cptable) ################################################### ### code chunk number 7: usercode.Rnw:358-369 ################################################### xgroup <- rep(1:10, length = nrow(mystate)) xfit <- xpred.rpart(fit1, xgroup) xerror <- colMeans((xfit - mystate$murder)^2) fit2b <- rpart(murder ~ population + illiteracy + income + life.exp + hs.grad + frost + region, data = mystate, method = 'anova', minsplit = 10, xval = xgroup) topnode.error <- (fit2b$frame$dev/fit2b$frame$wt)[1] xerror.relative <- xerror/topnode.error all.equal(xerror.relative, fit2b$cptable[, 4], check.attributes = FALSE) ################################################### ### code chunk number 8: fig1 ################################################### getOption("SweaveHooks")[["fig"]]() tdata <- mystate[order(mystate$illiteracy), ] n <- nrow(tdata) temp <- stemp(tdata$income, wt = rep(1, n), tdata$illiteracy, parms = NULL, continuous = TRUE) xx <- (tdata$illiteracy[-1] + tdata$illiteracy[-n])/2 plot(xx, temp$goodness, xlab = "Illiteracy cutpoint", ylab = "Goodness of split") lines(smooth.spline(xx, temp$goodness, df = 4), lwd = 2, lty = 2) ################################################### ### code chunk number 9: usercode.Rnw:438-458 ################################################### loginit <- function(y, offset, parms, wt) { if (is.null(offset)) offset <- 0 if (any(y != 0 & y != 1)) stop ('response must be 0/1') sfun <- function(yval, dev, wt, ylevel, digits ) { paste("events=", round(yval[,1]), ", coef= ", format(signif(yval[,2], digits)), ", deviance=" , format(signif(dev, digits)), sep = '')} environment(sfun) <- .GlobalEnv list(y = cbind(y, offset), parms = 0, numresp = 2, numy = 2, summary = sfun) } logeval <- function(y, wt, parms) { tfit <- glm(y[,1] ~ offset(y[,2]), binomial, weight = wt) list(label= c(sum(y[,1]), tfit$coef), deviance = tfit$deviance) } ################################################### ### code chunk number 10: usercode.Rnw:466-502 ################################################### logsplit <- function(y, wt, x, parms, continuous) { if (continuous) { # continuous x variable: do all the logistic regressions n <- nrow(y) goodness <- double(n-1) direction <- goodness temp <- rep(0, n) for (i in 1:(n-1)) { temp[i] <- 1 if (x[i] != x[i+1]) { tfit <- glm(y[,1] ~ temp + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance direction[i] <- sign(tfit$coef[2]) } } } else { # Categorical X variable # First, find out what order to put the categories in, which # will be the order of the coefficients in this model tfit <- glm(y[,1] ~ factor(x) + offset(y[,2]) - 1, binomial, weight = wt) ngrp <- length(tfit$coef) direction <- rank(rank(tfit$coef) + runif(ngrp, 0, 0.1)) #break ties # breaking ties -- if 2 groups have exactly the same p-hat, it # does not matter which order I consider them in. And the calling # routine wants an ordering vector. # xx <- direction[match(x, sort(unique(x)))] #relabel from small to large goodness <- double(length(direction) - 1) for (i in 1:length(goodness)) { tfit <- glm(y[,1] ~ I(xx > i) + offset(y[,2]), binomial, weight = wt) goodness[i] <- tfit$null.deviance - tfit$deviance } } list(goodness=goodness, direction=direction) } rpart/tests/0000755000176200001440000000000013453653560012556 5ustar liggesusersrpart/tests/data.stagec0000644000176200001440000001665013306236017014656 0ustar liggesusers 6.130047 0 64 2 10.26 2 4 1 9.374401 0 62 1 NA 3 8 3 5.240246 1 59 2 9.99 3 7 1 3.162217 1 62 2 3.57 2 4 1 1.908282 1 64 2 22.56 4 8 2 4.848733 0 69 1 6.14 3 7 1 5.790554 0 75 2 13.69 2 NA 2 7.304585 0 71 2 NA 3 7 3 3.655030 1 73 2 11.77 3 6 1 15.87132 0 64 2 27.27 3 7 2 6.299794 0 65 2 19.34 3 7 2 2.910335 1 58 2 14.82 4 8 2 1.527720 1 70 2 10.22 3 8 1 14.46132 0 67 2 15.66 2 6 2 4.238193 1 66 2 17.79 3 7 2 1.738535 1 74 2 11.11 3 8 1 5.004791 0 70 2 11.44 2 5 1 13.17727 0 57 2 14.78 2 4 2 10.87200 0 63 2 54.93 3 8 2 12.98015 0 65 2 24.58 3 7 2 11.37303 0 62 2 27.79 2 5 2 2.647501 1 72 2 14.86 3 6 2 9.812457 0 64 1 10.51 2 5 1 3.411362 1 67 NA 14.22 2 6 2 7.638603 1 64 2 15.28 2 5 2 4.799452 1 70 2 16.91 3 6 2 3.674195 1 58 1 17.87 3 7 2 13.89185 0 57 2 12.13 3 6 1 4.881587 1 54 1 17.25 2 5 2 15.92060 0 61 1 16.53 3 7 2 2.850102 1 68 2 17.49 2 4 2 9.273100 0 64 1 3.85 3 6 3 6.510609 0 70 1 7.88 2 6 1 1.686516 0 64 2 16.64 2 5 2 6.932238 0 66 2 13.19 3 7 2 5.492128 0 61 2 9.42 2 5 1 5.719370 0 70 2 22.79 2 5 2 4.076659 1 63 2 11.37 2 6 1 0.3066393 1 59 2 3.77 3 6 3 1.095140 1 66 1 13.76 3 6 2 7.783710 0 53 2 14.52 2 5 2 2.023271 1 62 2 7.55 3 7 1 7.301847 0 69 2 8.46 2 5 1 13.54688 0 63 2 7.66 3 7 1 11.71800 0 61 2 8.40 2 5 1 8.657084 0 70 1 4.43 1 3 1 3.356605 0 61 2 10.37 3 7 1 6.275154 0 62 2 10.82 2 6 1 10.61738 0 55 2 7.81 2 5 1 9.253935 0 61 2 11.23 2 5 1 7.906913 0 63 2 13.99 3 6 2 4.936345 0 67 2 6.41 2 5 1 13.40725 0 59 2 16.05 2 5 2 17.69199 0 58 2 22.97 3 6 2 1.026694 1 61 1 2.40 4 10 1 0.2546201 1 47 2 11.92 4 10 1 13.07049 0 65 2 NA 3 6 2 16.70088 0 56 2 5.29 1 3 1 4.479124 0 63 2 5.75 2 5 1 3.438740 1 69 1 7.64 3 8 3 2.376454 1 50 1 16.81 3 7 2 6.784394 0 70 2 29.56 2 5 2 2.997946 1 55 1 13.35 3 6 3 10.36276 0 55 2 8.10 2 5 1 11.77002 0 62 1 12.62 2 5 1 8.049281 1 66 2 14.14 2 5 2 5.664613 0 71 1 10.16 2 6 1 6.053388 0 63 2 17.21 2 5 2 5.201916 0 54 2 11.35 2 6 1 6.228610 0 65 2 11.35 2 5 1 11.36481 0 59 2 7.61 2 5 1 6.986995 1 61 2 20.82 3 6 2 6.464065 0 65 1 12.93 3 7 1 0.5366188 1 57 1 21.75 3 7 2 6.067077 0 69 2 8.58 2 6 1 5.111567 1 53 1 14.94 3 7 2 3.660506 1 48 2 17.16 3 7 2 12.16974 0 57 2 23.62 3 8 2 7.707049 1 63 2 16.06 3 9 2 7.028062 0 52 2 7.15 2 7 1 7.230663 1 57 2 13.21 3 8 2 4.350444 1 62 2 11.35 3 6 1 6.694045 0 54 2 8.11 2 4 1 6.765229 1 67 2 11.18 3 7 1 5.185489 1 65 2 24.84 3 7 2 8.662559 0 67 2 7.67 3 6 1 10.79808 0 72 1 6.68 2 NA 1 2.614647 1 66 2 15.23 3 8 2 10.87474 0 72 2 6.80 2 5 1 5.637234 1 60 2 14.58 3 7 2 10.09993 0 70 2 13.17 2 6 2 7.208761 0 63 1 9.76 2 5 1 10.17659 0 64 1 7.61 2 NA 1 7.718001 1 62 2 38.05 3 7 2 2.696783 1 61 1 13.87 3 6 2 1.949349 1 64 2 21.20 3 7 2 3.630390 0 64 1 17.96 3 7 2 8.229979 0 68 2 27.14 3 9 2 9.174537 0 62 1 6.74 2 5 1 6.121834 0 69 2 11.21 3 8 1 8.698151 0 59 2 20.22 3 6 2 7.411362 1 66 1 15.35 3 8 2 1.645448 1 53 1 16.79 3 9 2 8.353182 0 59 2 8.76 2 6 1 4.717317 1 58 2 13.23 2 6 2 5.746748 0 61 2 34.01 2 7 2 3.156741 1 65 NA 14.68 3 8 2 4.944558 0 67 1 17.95 3 8 2 3.449692 1 57 1 23.34 3 8 2 0.9883642 1 55 2 10.25 3 7 3 5.445585 1 57 2 NA 3 8 3 4.654346 0 57 1 15.10 3 7 2 6.264202 0 68 1 26.55 2 6 2 6.967830 0 67 2 7.78 2 6 1 1.522245 1 60 1 NA 4 9 3 7.055441 0 63 2 21.20 3 7 2 6.045174 0 69 2 7.93 3 6 1 3.843942 0 54 2 10.58 3 8 1 6.516084 0 66 2 5.92 2 5 1 3.112936 0 59 2 5.08 3 7 1 6.795345 0 62 2 13.10 3 8 2 6.669404 0 73 1 41.31 3 8 2 5.749486 1 65 2 11.29 3 7 1 1.516769 1 67 2 14.02 3 7 2 5.169062 0 75 2 12.46 3 7 1 1.253935 1 70 2 13.69 3 8 2 6.160164 0 59 2 12.06 2 5 1 6.480492 0 73 2 13.01 3 6 1 1.163586 1 66 2 13.21 2 6 2 5.697467 0 66 2 10.43 3 5 1 3.397672 1 65 2 NA 3 7 3 5.629021 0 66 1 13.33 2 5 2 5.971252 0 66 2 37.49 3 7 2 5.119781 0 59 2 11.69 3 7 1 6.004106 0 52 2 9.90 2 4 1 5.368925 0 68 2 13.01 2 5 1 2.431211 0 63 2 4.81 3 8 1 4.235455 0 67 2 14.71 2 5 2 5.541409 0 59 1 9.01 2 5 1 5.363449 0 57 1 10.90 3 6 1 8.180698 0 62 2 10.72 3 7 1 10.20123 0 63 2 5.14 2 5 1 2.450376 1 73 2 46.92 4 9 2 7.898699 0 68 2 NA 2 5 3 5.634496 0 51 2 9.59 3 6 1 2.058863 1 56 2 9.01 3 7 1 rpart/tests/treble4.R0000644000176200001440000000457113453436420014243 0ustar liggesusers# # Treble test for class trees with 2 outcomes # # fit1 and fit1b failed equality because .7 and .3 are not easily represented # in binary. Thus a complelxity param was 4e-17 (basically 0, but enough # to cause a split where it shouldn't be). Eric Lunde 2005-08-03 library(rpart) control <- rpart.control(maxsurrogate=0, cp=1e-15, xval=0) set.seed(10) fit1 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=control, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) wts <- rep(3, nrow(kyphosis)) fit1b <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=control, weights=wts, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) fit1b$frame$wt <- fit1b$frame$wt/3 fit1b$frame$dev <- fit1b$frame$dev/3 fit1b$frame$yval2[,2:3] <- fit1b$frame$yval2[,2:3]/3 fit1b$splits[,3] <- fit1b$splits[,3]/3 fit1b$variable.importance <- fit1b$variable.importance/3 all.equal(fit1[-3], fit1b[-3]) #all but the "call" # Now for a set of non-equal weights nn <- nrow(kyphosis) pseudo <- double(nn) pseudo[1] <- pi/6 for (i in 2:nn) pseudo[i] <- 4*pseudo[i-1]*(1-pseudo[i-1]) wts <- rep(1:7, length=nn) temp <- rep(1:nn, wts) #row replicates xgrp <- rep(1:10, length=nn)[order(pseudo)] xgrp2<- rep(xgrp, wts) # The cp value stops one last split where the two predictors are # completely equal in importance (perfect surrogates), but the # weighted and unweighted pick a different one due to round off error tempc <- rpart.control(minsplit=2, xval=xgrp2, maxsurrogate=0, cp=.039) # Direct: replicate rows in the data set, and use unweighted fit2 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis[temp,], control=tempc, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) # Weighted tempc <- rpart.control(minsplit=2, xval=xgrp, maxsurrogate=0, cp=.039) fit2b <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, control=tempc, weights=wts, parms=list(prior=c(.7,.3), loss=matrix(c(0,1,2,0),nrow=2,ncol=2))) all.equal(fit2$frame[,-2], fit2b$frame[,-2]) # the "n" component won't match all.equal(fit2$cptable, fit2b$cptable) all.equal(fit2$splits[,-1],fit2b$splits[,-1]) all.equal(fit2$csplit, fit2b$csplit) rpart/tests/testall.R0000644000176200001440000000637613453436345014365 0ustar liggesusers# # This is a set of tests, with printout, that tries # to exercise all of the splitting rules # It's less formal than the others in this directory, but covers # more. # For all of the cross-validations I set xgroups explicitly, so as # to avoid any changes in random number allocation of the groups. library(rpart) require(survival) options(digits=4) #avoid trivial rounding changes across R versions set.seed(10) # # # Survival, using the stagec data # # Time to progression in years # status 1=progressed, 0= censored # age # early endocrine therapy 1=no 2=yes # % of cells in g2 phase, from flow cytometry # tumor grade (Farrow) 1,2,3,4 # Gleason score (competing grading system) # ploidy xgroup <- rep(1:10, length=nrow(stagec)) fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method="poisson", control=rpart.control(usesurrogate=0, cp=0, xval=xgroup)) fit1 summary(fit1) fit2 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, xval=xgroup) fit2 summary(fit2) # # Continuous y variable # Use deterministic xgroups: the first group is the 1st, 11th, 21st, etc # smallest obs, the second is 2, 12, 22, ... mystate <- data.frame(state.x77, region=factor(state.region)) names(mystate) <- c("population","income" , "illiteracy","life" , "murder", "hs.grad", "frost", "area", "region") xvals <- 1:nrow(mystate) xvals[order(mystate$income)] <- rep(1:10, length=nrow(mystate)) fit4 <- rpart(income ~ population + region + illiteracy +life + murder + hs.grad + frost , mystate, control=rpart.control(minsplit=10, xval=xvals)) summary(fit4) # # Check out xpred.rpart # meany <- mean(mystate$income) xpr <- xpred.rpart(fit4, xval=xvals) xpr2 <- (xpr - mystate$income)^2 risk0 <- mean((mystate$income - meany)^2) xpmean <- as.vector(apply(xpr2, 2, mean)) #kill the names all.equal(xpmean/risk0, as.vector(fit4$cptable[,'xerror'])) xpstd <- as.vector(apply((sweep(xpr2, 2, xpmean))^2, 2, sum)) xpstd <- sqrt(xpstd)/(50*risk0) all.equal(xpstd, as.vector(fit4$cptable[,'xstd'])) # # recreate subset #3 of the xval # tfit4 <- rpart(income ~ population + region + illiteracy +life + murder + hs.grad + frost , mystate, subset=(xvals!=3), control=rpart.control(minsplit=10, xval=0)) tpred <- predict(tfit4, mystate[xvals==3,]) all.equal(tpred, xpr[xvals==3,ncol(xpr)]) # How much does this differ from the "real" formula, more complex, # found on page 309 of Breiman et al. ? #xtemp <- (xpr2/outer(rep(1,50),xpmean)) - ((mystate$income - meany)^2)/risk0 #real.se<- xpmean* sqrt(apply(xtemp^2,2,sum))/(risk0*50) # Simple yes/no classification model fit5 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, xval=xgroup) fit5 fit6 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, parm=list(prior=c(.5,.5)), xval=xgroup) summary(fit6) # # Fit a classification model to the car data. # Now, since Reliability is an ordered category, this model doesn't # make a lot of statistical sense, but it does test out some # areas of the code that nothing else does # xcar <- rep(1:8, length=nrow(cu.summary)) carfit <- rpart(Reliability ~ Price + Country + Mileage + Type, method='class', data=cu.summary, xval=xcar) summary(carfit) rpart/tests/cost.Rout.save0000644000176200001440000000321113453452641015330 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > library(rpart) > require(survival) Loading required package: survival > aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) > > set.seed(10) > # > # Check out using costs > # > fit1 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + + meal.cal + wt.loss, data=lung, + maxdepth=1, maxcompete=6, xval=0) > > fit2 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + + meal.cal + wt.loss, data=lung, + maxdepth=1, maxcompete=6, xval=0, cost=(1+ 1:7/10)) > > temp1 <- fit1$splits[1:7,] > temp2 <- fit2$splits[1:7,] > temp3 <- c('age', 'sex', 'ph.ecog', 'ph.karno', 'pat.karno', 'meal.cal', + 'wt.loss') > indx1 <- match(temp3, dimnames(temp1)[[1]]) > indx2 <- match(temp3, dimnames(temp2)[[1]]) > aeq(temp1[indx1,1], temp2[indx2,1]) #same n's ? [1] TRUE > aeq(temp1[indx1,3], temp2[indx2,3]*(1+ 1:7/10)) #scaled importance [1] TRUE > > > > proc.time() user system elapsed 0.693 0.051 0.738 rpart/tests/priors.Rout.save0000644000176200001440000000643213453452643015710 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # A hard-core test of losses and priors > # Simple data set where I know what the answers must be > # > library(rpart) > aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) > > dummy <- c(3,1,4,1,5,9,2,6,5,3,5,8,9,7,9)/5 > pdata <- data.frame(y=factor(rep(1:3, 5)), + x1 = 1:15, + x2 = c(1:6, 1:6, 1:3), + x3 = (rep(1:3, 5) + dummy)*10) > > pdata$x3[c(1,5,10)] <- NA > pdata$y[15] <- 1 # make things unbalanced > > set.seed(10) > pfit <- rpart(y ~ x1 + x2 + x3, pdata, + cp=0, xval=0, minsplit=5, maxdepth=1, + parms=list(prior=c(.2, .3, .5), + loss =matrix(c(0,2,2,2,0,6,1,1,0), 3,3,byrow=T))) > > # > # See section 12.1 of the report for these numbers > # > > ntot <- c(6,5,4) > phat <- c(6,5,4)/15 # observed class probabilities > prior <- c(.2, .3, .5) # priors > aprior <- c(4,12,5)/21 # altered priors > lmat <- matrix(c(0,1,2, 2,0,1, 2,6,0), ncol=3) #loss matrix > > gini <- function(p) 1-sum(p^2) > loss <- function(n, class) sum(n * lmat[,class]) > > phat <- function(n, ntot=c(6,5,4), prior=c(.2, .3, .5)) { + n*prior/ntot + } > > # Are the losses correct? > # Class counts for the two children are (4,4,0) and (2,1,4), when > # using surrogates > aeq(pfit$frame$dev/15, c(loss(prior,2), loss(phat(c(4,4,0)),2), + loss(phat(c(2,1,4)),3))) [1] TRUE > # Node probabilities? > aeq(pfit$frame$yval2[,8] , + c(1, sum(phat(c(4,4,0))), sum(phat(c(2,1,4))))) [1] TRUE > > aeq(pfit$frame$yval2[,5:7] , rbind(prior, + phat(c(4,4,0))/ sum(phat(c(4,4,0))), + phat(c(2,1,4))/ sum(phat(c(2,1,4))))) [1] TRUE > > # Now the node and class probs, under altered priors > phat2 <- function(n, ntot=c(6,5,4), prior=aprior) { + n*prior/ntot + } > > # Use these to create the gini losses, base data, and for the best > # splits on variables 1, 2, 3 > gfun <- function(n) { #The gini loss for a node, given the counts + temp <- phat2(n) + sum(temp) * gini(temp/sum(temp)) + } > > # These are in order x3, x2, x1 (best split to worst) > # Note that for x3, missing values cause the "parent" to be viewed as > # having 12 obs instead of 15. > # Each line is gini(parent) - gini(children) > aeq(pfit$splits[1:3, 3], + 15* c(gfun(c(4,4,4)) - (gfun(c(3,4,0)) + gfun(c(1,0,4))), + gfun(c(6,5,4)) - (gfun(c(6,5,2)) + gfun(c(0,0,2))), + gfun(c(6,5,4)) - (gfun(c(4,4,4)) + gfun(c(2,1,0))))) [1] TRUE > > proc.time() user system elapsed 0.129 0.012 0.135 rpart/tests/backticks.Rout.save0000644000176200001440000000263513453452640016326 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > ## allow backticks in rpart.matrix: see > ## https://stat.ethz.ch/pipermail/r-help/2012-May/314081.html > > set.seed(10) > library(rpart) > Iris <- iris > names(Iris) <- sub(".", " ", names(iris), fixed=TRUE) > rpart(Species ~ `Sepal Length`, data = Iris) n= 150 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 150 100 setosa (0.33333333 0.33333333 0.33333333) 2) Sepal Length< 5.45 52 7 setosa (0.86538462 0.11538462 0.01923077) * 3) Sepal Length>=5.45 98 49 virginica (0.05102041 0.44897959 0.50000000) 6) Sepal Length< 6.15 43 15 versicolor (0.11627907 0.65116279 0.23255814) * 7) Sepal Length>=6.15 55 16 virginica (0.00000000 0.29090909 0.70909091) * > > proc.time() user system elapsed 0.105 0.017 0.116 rpart/tests/xpred2.R0000644000176200001440000000232513453436452014106 0ustar liggesusers# # Test out the "return.all" argument of xpred # The data set has the virtue of continuous, categorical, and missings # library(rpart) require(survival) set.seed(10) fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method='poisson') xgrp <- rep(1:3, length=nrow(stagec)) # explicitly set the xval groups xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) xfit2 <- array(0, dim=dim(xfit1)) cplist <- as.numeric(dimnames(xfit1)[[2]]) for (i in 1:3) { tfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, stagec, method='poisson', subset=(xgrp !=i)) # xvals are actually done on the absolute risk (node's risk /n), not on # the rescaled risk ((node risk)/ (top node risk)) which is the basis # for the printed CP. To get the right answer we need to rescale. cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / (tfit$frame$dev[1] / tfit$frame$n[1]) for (j in 1:length(cp2)) { tfit2 <- prune(tfit, cp=cp2[j]) temp <- predict(tfit2, newdata=stagec[xgrp==i,], type='matrix') xfit2[xgrp==i, j,] <- temp } } all.equal(xfit1, xfit2, check.attributes=FALSE) rpart/tests/xpred1.R0000644000176200001440000000206113453436437014105 0ustar liggesusers# # Test out the "return.all" argument of xpred # this is a very small test case for debugging # library(rpart) set.seed(10) tdata <- data.frame(y=1:12, x1= 12:1, x2=c(1,1,5,5,4,4,9,9,7,7,3,3)) xgrp <- rep(1:3, length=12) fit1 <- rpart(y ~ x1 + x2, tdata, minsplit=6) xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) xfit2 <- array(0, dim=dim(xfit1)) cplist <- as.numeric(dimnames(xfit1)[[2]]) for (i in 1:3) { tfit <- rpart(y ~ x1+x2, tdata, subset=(xgrp !=i), minsplit=6) # xvals are actually done on the absolute risk (node's risk /n), not on # the rescaled risk ((node risk)/ (top node risk)) which is the basis # for the printed CP. To get the right answer we need to rescale. cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / (tfit$frame$dev[1] / tfit$frame$n[1]) for (j in 1:length(cp2)) { tfit2 <- prune(tfit, cp=cp2[j]) temp <- predict(tfit2, newdata=tdata[xgrp==i,], type='matrix') xfit2[xgrp==i, j] <- temp } } all.equal(xfit1, xfit2, check.attributes=FALSE) rpart/tests/xpred2.Rout.save0000644000176200001440000000403413453452650015570 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # Test out the "return.all" argument of xpred > # The data set has the virtue of continuous, categorical, and missings > # > library(rpart) > require(survival) Loading required package: survival > set.seed(10) > > fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method='poisson') > > xgrp <- rep(1:3, length=nrow(stagec)) # explicitly set the xval groups > > xfit1 <- xpred.rpart(fit1, xval=xgrp, return.all=T) > xfit2 <- array(0, dim=dim(xfit1)) > cplist <- as.numeric(dimnames(xfit1)[[2]]) > > for (i in 1:3) { + tfit <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method='poisson', subset=(xgrp !=i)) + # xvals are actually done on the absolute risk (node's risk /n), not on + # the rescaled risk ((node risk)/ (top node risk)) which is the basis + # for the printed CP. To get the right answer we need to rescale. + cp2 <- cplist * (fit1$frame$dev[1] / fit1$frame$n[1]) / + (tfit$frame$dev[1] / tfit$frame$n[1]) + + for (j in 1:length(cp2)) { + tfit2 <- prune(tfit, cp=cp2[j]) + temp <- predict(tfit2, newdata=stagec[xgrp==i,], type='matrix') + xfit2[xgrp==i, j,] <- temp + } + } > > all.equal(xfit1, xfit2, check.attributes=FALSE) [1] TRUE > > proc.time() user system elapsed 0.752 0.035 0.782 rpart/tests/cost.R0000644000176200001440000000151113453436254013646 0ustar liggesuserslibrary(rpart) require(survival) aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) set.seed(10) # # Check out using costs # fit1 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + meal.cal + wt.loss, data=lung, maxdepth=1, maxcompete=6, xval=0) fit2 <- rpart(Surv(time, status) ~ age + sex + ph.ecog + ph.karno + pat.karno + meal.cal + wt.loss, data=lung, maxdepth=1, maxcompete=6, xval=0, cost=(1+ 1:7/10)) temp1 <- fit1$splits[1:7,] temp2 <- fit2$splits[1:7,] temp3 <- c('age', 'sex', 'ph.ecog', 'ph.karno', 'pat.karno', 'meal.cal', 'wt.loss') indx1 <- match(temp3, dimnames(temp1)[[1]]) indx2 <- match(temp3, dimnames(temp2)[[1]]) aeq(temp1[indx1,1], temp2[indx2,1]) #same n's ? aeq(temp1[indx1,3], temp2[indx2,3]*(1+ 1:7/10)) #scaled importance rpart/tests/testall.Rout.save0000644000176200001440000011470713453452644016050 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # > # This is a set of tests, with printout, that tries > # to exercise all of the splitting rules > # It's less formal than the others in this directory, but covers > # more. > # For all of the cross-validations I set xgroups explicitly, so as > # to avoid any changes in random number allocation of the groups. > > library(rpart) > require(survival) Loading required package: survival > options(digits=4) #avoid trivial rounding changes across R versions > set.seed(10) > # > # > # Survival, using the stagec data > # > # Time to progression in years > # status 1=progressed, 0= censored > # age > # early endocrine therapy 1=no 2=yes > # % of cells in g2 phase, from flow cytometry > # tumor grade (Farrow) 1,2,3,4 > # Gleason score (competing grading system) > # ploidy > xgroup <- rep(1:10, length=nrow(stagec)) > fit1 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, method="poisson", + control=rpart.control(usesurrogate=0, cp=0, xval=xgroup)) > fit1 n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 193.400 0.058490 2) grade< 2.5 61 46.000 0.021270 4) g2< 11.36 33 9.303 0.007174 8) g2>=6.545 26 1.847 0.004462 * 9) g2< 6.545 7 5.883 0.027860 * 5) g2>=11.36 27 27.880 0.044870 10) g2>=14.37 15 12.430 0.030940 * 11) g2< 14.37 12 13.690 0.067870 * 3) grade>=2.5 85 122.600 0.094400 6) age>=56.5 75 104.700 0.082840 12) g2>=22.77 12 14.830 0.039530 * 13) g2< 22.77 57 76.110 0.100300 26) gleason< 7.5 41 55.810 0.076860 52) g2< 13.47 23 26.800 0.050830 104) g2>=11.52 7 5.289 0.030820 * 105) g2< 11.52 16 20.270 0.063870 * 53) g2>=13.47 18 25.520 0.112300 * 27) gleason>=7.5 16 15.190 0.164400 * 7) age< 56.5 10 11.420 0.196900 * > summary(fit1) Call: rpart(formula = Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, method = "poisson", control = rpart.control(usesurrogate = 0, cp = 0, xval = xgroup)) n= 146 CP nsplit rel error xerror xstd 1 0.128372 0 1.0000 1.0120 0.06329 2 0.052298 1 0.8716 0.9220 0.07170 3 0.045608 3 0.7670 0.9728 0.07846 4 0.026442 4 0.7214 0.9732 0.08052 5 0.018049 5 0.6950 0.9725 0.08388 6 0.009068 6 0.6769 0.9698 0.08532 7 0.008132 7 0.6679 0.9920 0.08795 8 0.006412 8 0.6597 0.9853 0.08800 9 0.000000 9 0.6533 1.0077 0.08952 Variable importance grade g2 gleason ploidy age eet 27 27 23 12 10 1 Node number 1: 146 observations, complexity param=0.1284 events=54, estimated rate=0.05849 , mean deviance=1.325 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=24.880, (0 missing) gleason < 5.5 to the left, improve=21.630, (3 missing) ploidy splits as LRR, improve=13.020, (0 missing) g2 < 13.2 to the left, improve=11.450, (7 missing) age < 53.5 to the right, improve= 2.484, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.04561 events=9, estimated rate=0.02127 , mean deviance=0.7542 left son=4 (33 obs) right son=5 (27 obs), 1 observation remains Primary splits: g2 < 11.36 to the left, improve=8.9650, (1 missing) ploidy splits as LRL, improve=7.4700, (0 missing) age < 68.5 to the right, improve=3.9560, (0 missing) gleason < 5.5 to the left, improve=1.8010, (3 missing) eet < 1.5 to the left, improve=0.5444, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (0 split) Node number 3: 85 observations, complexity param=0.0523 events=45, estimated rate=0.0944 , mean deviance=1.442 left son=6 (75 obs) right son=7 (10 obs) Primary splits: age < 56.5 to the right, improve=7.3190, (0 missing) g2 < 22.76 to the right, improve=6.8420, (6 missing) gleason < 8.5 to the left, improve=4.8530, (0 missing) ploidy splits as LLR, improve=1.7320, (0 missing) eet < 1.5 to the right, improve=0.9628, (1 missing) Node number 4: 33 observations, complexity param=0.008132 events=1, estimated rate=0.007174 , mean deviance=0.2819 left son=8 (26 obs) right son=9 (7 obs) Primary splits: g2 < 6.545 to the right, improve=3.1310, (0 missing) age < 62.5 to the right, improve=1.3520, (0 missing) eet < 1.5 to the left, improve=0.6605, (0 missing) gleason < 5.5 to the right, improve=0.4889, (2 missing) Surrogate splits: grade < 1.5 to the right, agree=0.848, adj=0.286, (0 split) Node number 5: 27 observations, complexity param=0.009068 events=8, estimated rate=0.04487 , mean deviance=1.033 left son=10 (15 obs) right son=11 (12 obs) Primary splits: g2 < 14.37 to the right, improve=1.820, (0 missing) gleason < 5.5 to the left, improve=1.698, (1 missing) age < 62.5 to the left, improve=1.136, (0 missing) Surrogate splits: ploidy splits as RL-, agree=0.741, adj=0.417, (0 split) age < 65 to the left, agree=0.630, adj=0.167, (0 split) gleason < 5.5 to the left, agree=0.630, adj=0.167, (0 split) Node number 6: 75 observations, complexity param=0.0523 events=37, estimated rate=0.08284 , mean deviance=1.397 left son=12 (12 obs) right son=13 (57 obs), 6 observations remain Primary splits: g2 < 22.76 to the right, improve=4.8580, (6 missing) gleason < 7.5 to the left, improve=4.1030, (0 missing) age < 69.5 to the left, improve=2.7250, (0 missing) ploidy splits as LRR, improve=0.7858, (0 missing) eet < 1.5 to the right, improve=0.1992, (1 missing) Node number 7: 10 observations events=8, estimated rate=0.1969 , mean deviance=1.142 Node number 8: 26 observations events=0, estimated rate=0.004462 , mean deviance=0.07105 Node number 9: 7 observations events=1, estimated rate=0.02786 , mean deviance=0.8404 Node number 10: 15 observations events=3, estimated rate=0.03094 , mean deviance=0.8289 Node number 11: 12 observations events=5, estimated rate=0.06787 , mean deviance=1.141 Node number 12: 12 observations events=4, estimated rate=0.03953 , mean deviance=1.236 Node number 13: 57 observations, complexity param=0.02644 events=30, estimated rate=0.1003 , mean deviance=1.335 left son=26 (41 obs) right son=27 (16 obs) Primary splits: gleason < 7.5 to the left, improve=5.40700, (0 missing) g2 < 13.2 to the left, improve=4.46300, (0 missing) ploidy splits as LRR, improve=3.49400, (0 missing) age < 69.5 to the left, improve=3.12800, (0 missing) eet < 1.5 to the left, improve=0.04903, (1 missing) Surrogate splits: grade < 3.5 to the left, agree=0.772, adj=0.187, (0 split) Node number 26: 41 observations, complexity param=0.01805 events=18, estimated rate=0.07686 , mean deviance=1.361 left son=52 (23 obs) right son=53 (18 obs) Primary splits: g2 < 13.48 to the left, improve=3.57000, (0 missing) ploidy splits as LRR, improve=3.05800, (0 missing) age < 65.5 to the left, improve=0.68120, (0 missing) eet < 1.5 to the left, improve=0.09244, (0 missing) gleason < 6.5 to the right, improve=0.01761, (0 missing) Surrogate splits: eet < 1.5 to the right, agree=0.634, adj=0.167, (0 split) age < 58.5 to the right, agree=0.585, adj=0.056, (0 split) Node number 27: 16 observations events=12, estimated rate=0.1644 , mean deviance=0.9493 Node number 52: 23 observations, complexity param=0.006412 events=7, estimated rate=0.05083 , mean deviance=1.165 left son=104 (7 obs) right son=105 (16 obs) Primary splits: g2 < 11.52 to the right, improve=1.41100, (0 missing) age < 62.5 to the right, improve=1.24600, (0 missing) gleason < 6.5 to the left, improve=0.02047, (0 missing) Surrogate splits: age < 71 to the right, agree=0.826, adj=0.429, (0 split) ploidy splits as RLR, agree=0.739, adj=0.143, (0 split) Node number 53: 18 observations events=11, estimated rate=0.1123 , mean deviance=1.418 Node number 104: 7 observations events=1, estimated rate=0.03082 , mean deviance=0.7555 Node number 105: 16 observations events=6, estimated rate=0.06387 , mean deviance=1.267 > > fit2 <- rpart(Surv(pgtime, pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, xval=xgroup) > fit2 n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 192.100 1.0000 2) grade< 2.5 61 44.800 0.3634 4) g2< 11.36 33 9.117 0.1230 * 5) g2>=11.36 28 27.600 0.7346 10) gleason< 5.5 20 14.300 0.5304 * 11) gleason>=5.5 8 11.090 1.3070 * 3) grade>=2.5 85 122.400 1.6150 6) age>=56.5 75 103.100 1.4260 12) gleason< 7.5 50 66.120 1.1410 24) g2< 13.47 24 27.200 0.8007 * 25) g2>=13.47 26 36.790 1.4570 50) g2>=17.91 15 20.330 0.9790 * 51) g2< 17.91 11 13.460 2.1710 * 13) gleason>=7.5 25 33.490 2.0310 26) g2>=15.29 10 11.590 1.2160 * 27) g2< 15.29 15 18.940 2.7050 * 7) age< 56.5 10 13.770 3.1820 * > summary(fit2) Call: rpart(formula = Surv(pgtime, pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, xval = xgroup) n= 146 CP nsplit rel error xerror xstd 1 0.12946 0 1.0000 1.0100 0.07108 2 0.04206 1 0.8705 0.8919 0.07420 3 0.02920 2 0.8285 0.9239 0.08004 4 0.01799 3 0.7993 0.9293 0.08292 5 0.01541 4 0.7813 0.9866 0.09214 6 0.01335 5 0.7659 1.0007 0.09161 7 0.01151 7 0.7392 0.9983 0.09065 8 0.01000 8 0.7277 1.0130 0.09176 Variable importance grade gleason g2 ploidy age eet 27 25 22 13 11 2 Node number 1: 146 observations, complexity param=0.1295 events=54, estimated rate=1 , mean deviance=1.316 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=24.920, (0 missing) gleason < 5.5 to the left, improve=21.350, (3 missing) ploidy splits as LRR, improve=13.790, (0 missing) g2 < 13.2 to the left, improve=12.310, (7 missing) age < 58.5 to the right, improve= 2.684, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.04206 events=9, estimated rate=0.3634 , mean deviance=0.7344 left son=4 (33 obs) right son=5 (28 obs) Primary splits: g2 < 11.36 to the left, improve=8.9620, (1 missing) ploidy splits as LRL, improve=7.5850, (0 missing) age < 68.5 to the right, improve=4.1380, (0 missing) gleason < 5.5 to the left, improve=1.6410, (3 missing) eet < 1.5 to the left, improve=0.5961, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (1 split) Node number 3: 85 observations, complexity param=0.0292 events=45, estimated rate=1.615 , mean deviance=1.44 left son=6 (75 obs) right son=7 (10 obs) Primary splits: age < 56.5 to the right, improve=6.3380, (0 missing) g2 < 22.76 to the right, improve=4.7180, (6 missing) gleason < 8.5 to the left, improve=4.2190, (0 missing) ploidy splits as LRR, improve=1.5590, (0 missing) eet < 1.5 to the right, improve=0.8558, (1 missing) Node number 4: 33 observations events=1, estimated rate=0.123 , mean deviance=0.2763 Node number 5: 28 observations, complexity param=0.01151 events=8, estimated rate=0.7346 , mean deviance=0.9858 left son=10 (20 obs) right son=11 (8 obs) Primary splits: gleason < 5.5 to the left, improve=2.090, (1 missing) age < 67.5 to the right, improve=1.639, (0 missing) g2 < 14.37 to the right, improve=1.437, (1 missing) Node number 6: 75 observations, complexity param=0.01799 events=37, estimated rate=1.426 , mean deviance=1.374 left son=12 (50 obs) right son=13 (25 obs) Primary splits: gleason < 7.5 to the left, improve=3.5210, (0 missing) g2 < 23.48 to the right, improve=3.3340, (6 missing) age < 69.5 to the left, improve=2.2120, (0 missing) ploidy splits as LRR, improve=1.1190, (0 missing) eet < 1.5 to the right, improve=0.1528, (1 missing) Surrogate splits: grade < 3.5 to the left, agree=0.733, adj=0.2, (0 split) Node number 7: 10 observations events=8, estimated rate=3.182 , mean deviance=1.377 Node number 10: 20 observations events=4, estimated rate=0.5304 , mean deviance=0.7149 Node number 11: 8 observations events=4, estimated rate=1.307 , mean deviance=1.387 Node number 12: 50 observations, complexity param=0.01335 events=21, estimated rate=1.141 , mean deviance=1.322 left son=24 (24 obs) right son=25 (26 obs) Primary splits: g2 < 13.48 to the left, improve=1.87000, (3 missing) ploidy splits as LRR, improve=1.45100, (0 missing) age < 62.5 to the right, improve=0.79680, (0 missing) gleason < 6.5 to the left, improve=0.02209, (0 missing) eet < 1.5 to the right, improve=0.01274, (0 missing) Surrogate splits: age < 66.5 to the right, agree=0.596, adj=0.174, (3 split) eet < 1.5 to the right, agree=0.553, adj=0.087, (0 split) gleason < 6.5 to the left, agree=0.553, adj=0.087, (0 split) Node number 13: 25 observations, complexity param=0.01541 events=16, estimated rate=2.031 , mean deviance=1.339 left son=26 (10 obs) right son=27 (15 obs) Primary splits: g2 < 15.29 to the right, improve=3.893000, (3 missing) age < 68.5 to the left, improve=1.327000, (0 missing) ploidy splits as RLR, improve=0.858700, (0 missing) eet < 1.5 to the right, improve=0.001483, (1 missing) Surrogate splits: ploidy splits as RLR, agree=0.727, adj=0.4, (3 split) gleason < 8.5 to the right, agree=0.636, adj=0.2, (0 split) age < 57.5 to the left, agree=0.591, adj=0.1, (0 split) eet < 1.5 to the left, agree=0.591, adj=0.1, (0 split) Node number 24: 24 observations events=7, estimated rate=0.8007 , mean deviance=1.133 Node number 25: 26 observations, complexity param=0.01335 events=14, estimated rate=1.457 , mean deviance=1.415 left son=50 (15 obs) right son=51 (11 obs) Primary splits: g2 < 17.92 to the right, improve=3.170000, (2 missing) age < 64.5 to the left, improve=0.971200, (0 missing) eet < 1.5 to the right, improve=0.961700, (0 missing) gleason < 6.5 to the left, improve=0.005796, (0 missing) Surrogate splits: age < 65.5 to the left, agree=0.708, adj=0.364, (2 split) eet < 1.5 to the right, agree=0.667, adj=0.273, (0 split) gleason < 6.5 to the right, agree=0.625, adj=0.182, (0 split) Node number 26: 10 observations events=5, estimated rate=1.216 , mean deviance=1.159 Node number 27: 15 observations events=11, estimated rate=2.705 , mean deviance=1.263 Node number 50: 15 observations events=6, estimated rate=0.979 , mean deviance=1.356 Node number 51: 11 observations events=8, estimated rate=2.171 , mean deviance=1.224 > > > # > # Continuous y variable > # Use deterministic xgroups: the first group is the 1st, 11th, 21st, etc > # smallest obs, the second is 2, 12, 22, ... > > mystate <- data.frame(state.x77, region=factor(state.region)) > names(mystate) <- c("population","income" , "illiteracy","life" , + "murder", "hs.grad", "frost", "area", "region") > > xvals <- 1:nrow(mystate) > xvals[order(mystate$income)] <- rep(1:10, length=nrow(mystate)) > > fit4 <- rpart(income ~ population + region + illiteracy +life + murder + + hs.grad + frost , mystate, + control=rpart.control(minsplit=10, xval=xvals)) > > summary(fit4) Call: rpart(formula = income ~ population + region + illiteracy + life + murder + hs.grad + frost, data = mystate, control = rpart.control(minsplit = 10, xval = xvals)) n= 50 CP nsplit rel error xerror xstd 1 0.42831 0 1.0000 1.0157 0.2265 2 0.13514 1 0.5717 0.5948 0.1747 3 0.06458 2 0.4365 0.7005 0.1802 4 0.05485 3 0.3720 0.8606 0.2299 5 0.05346 4 0.3171 0.8494 0.2297 6 0.02479 5 0.2637 0.8289 0.2644 7 0.01940 6 0.2389 0.8196 0.2641 8 0.01394 7 0.2195 0.8196 0.2641 9 0.01000 8 0.2055 0.8117 0.2640 Variable importance hs.grad life illiteracy murder region population frost 28 22 13 12 12 9 5 Node number 1: 50 observations, complexity param=0.4283 mean=4436, MSE=3.7e+05 left son=2 (10 obs) right son=3 (40 obs) Primary splits: hs.grad < 44.3 to the left, improve=0.4283, (0 missing) illiteracy < 1.55 to the right, improve=0.3249, (0 missing) region splits as RLRR, improve=0.2285, (0 missing) murder < 11.55 to the right, improve=0.2012, (0 missing) life < 68.9 to the left, improve=0.1672, (0 missing) Surrogate splits: illiteracy < 1.55 to the right, agree=0.90, adj=0.5, (0 split) life < 69.26 to the left, agree=0.90, adj=0.5, (0 split) region splits as RLRR, agree=0.88, adj=0.4, (0 split) murder < 11.55 to the right, agree=0.88, adj=0.4, (0 split) frost < 81 to the left, agree=0.82, adj=0.1, (0 split) Node number 2: 10 observations, complexity param=0.0194 mean=3640, MSE=6.688e+04 left son=4 (7 obs) right son=5 (3 obs) Primary splits: population < 3990 to the left, improve=0.53670, (0 missing) frost < 55 to the left, improve=0.30250, (0 missing) illiteracy < 2.2 to the right, improve=0.29240, (0 missing) hs.grad < 40.8 to the right, improve=0.14540, (0 missing) murder < 12.85 to the left, improve=0.08289, (0 missing) Node number 3: 40 observations, complexity param=0.1351 mean=4635, MSE=2.477e+05 left son=6 (34 obs) right son=7 (6 obs) Primary splits: life < 70.26 to the right, improve=0.25230, (0 missing) murder < 10 to the left, improve=0.16790, (0 missing) hs.grad < 60.95 to the left, improve=0.12350, (0 missing) illiteracy < 0.75 to the left, improve=0.11520, (0 missing) population < 659 to the right, improve=0.08106, (0 missing) Surrogate splits: population < 613.5 to the right, agree=0.875, adj=0.167, (0 split) murder < 11.2 to the left, agree=0.875, adj=0.167, (0 split) hs.grad < 64.55 to the left, agree=0.875, adj=0.167, (0 split) Node number 4: 7 observations mean=3516, MSE=3.844e+04 Node number 5: 3 observations mean=3929, MSE=1.361e+04 Node number 6: 34 observations, complexity param=0.06458 mean=4530, MSE=1.69e+05 left son=12 (12 obs) right son=13 (22 obs) Primary splits: population < 1374 to the left, improve=0.20790, (0 missing) life < 70.41 to the left, improve=0.19010, (0 missing) frost < 33.5 to the right, improve=0.10930, (0 missing) illiteracy < 0.75 to the left, improve=0.08942, (0 missing) hs.grad < 59.7 to the left, improve=0.06429, (0 missing) Surrogate splits: frost < 152 to the right, agree=0.794, adj=0.417, (0 split) life < 70.41 to the left, agree=0.735, adj=0.250, (0 split) murder < 2 to the left, agree=0.706, adj=0.167, (0 split) region splits as RRRL, agree=0.676, adj=0.083, (0 split) illiteracy < 1.85 to the right, agree=0.676, adj=0.083, (0 split) Node number 7: 6 observations mean=5230, MSE=2.768e+05 Node number 12: 12 observations, complexity param=0.05485 mean=4276, MSE=1.942e+05 left son=24 (3 obs) right son=25 (9 obs) Primary splits: population < 994.5 to the right, improve=0.4355, (0 missing) life < 71.89 to the left, improve=0.2955, (0 missing) frost < 172.5 to the left, improve=0.2333, (0 missing) illiteracy < 0.75 to the left, improve=0.1965, (0 missing) murder < 2.55 to the right, improve=0.1847, (0 missing) Surrogate splits: life < 70.47 to the left, agree=0.833, adj=0.333, (0 split) Node number 13: 22 observations, complexity param=0.05346 mean=4668, MSE=1.01e+05 left son=26 (4 obs) right son=27 (18 obs) Primary splits: hs.grad < 52.05 to the left, improve=0.44500, (0 missing) region splits as RLLR, improve=0.35050, (0 missing) life < 71.56 to the left, improve=0.12220, (0 missing) murder < 5.65 to the right, improve=0.10520, (0 missing) population < 2980 to the left, improve=0.06276, (0 missing) Surrogate splits: region splits as RLRR, agree=0.864, adj=0.25, (0 split) Node number 24: 3 observations mean=3772, MSE=3.261e+04 Node number 25: 9 observations mean=4444, MSE=1.353e+05 Node number 26: 4 observations mean=4218, MSE=2.77e+04 Node number 27: 18 observations, complexity param=0.02479 mean=4768, MSE=6.236e+04 left son=54 (8 obs) right son=55 (10 obs) Primary splits: region splits as RRLR, improve=0.4086, (0 missing) illiteracy < 1 to the left, improve=0.3653, (0 missing) murder < 3.05 to the left, improve=0.1805, (0 missing) hs.grad < 52.75 to the right, improve=0.1507, (0 missing) population < 2412 to the left, improve=0.1427, (0 missing) Surrogate splits: illiteracy < 1 to the left, agree=0.833, adj=0.625, (0 split) frost < 108.5 to the right, agree=0.833, adj=0.625, (0 split) life < 72.31 to the right, agree=0.778, adj=0.500, (0 split) murder < 3.05 to the left, agree=0.778, adj=0.500, (0 split) hs.grad < 59.95 to the left, agree=0.667, adj=0.250, (0 split) Node number 54: 8 observations mean=4590, MSE=1.009e+04 Node number 55: 10 observations, complexity param=0.01394 mean=4911, MSE=5.832e+04 left son=110 (7 obs) right son=111 (3 obs) Primary splits: frost < 109 to the left, improve=0.4423, (0 missing) population < 2820 to the left, improve=0.3546, (0 missing) hs.grad < 57.05 to the right, improve=0.3103, (0 missing) region splits as RL-L, improve=0.2564, (0 missing) illiteracy < 1.2 to the right, improve=0.1921, (0 missing) Surrogate splits: life < 71.94 to the left, agree=0.8, adj=0.333, (0 split) Node number 110: 7 observations mean=4806, MSE=2.969e+04 Node number 111: 3 observations mean=5156, MSE=3.914e+04 > > > # > # Check out xpred.rpart > # > meany <- mean(mystate$income) > xpr <- xpred.rpart(fit4, xval=xvals) > xpr2 <- (xpr - mystate$income)^2 > risk0 <- mean((mystate$income - meany)^2) > xpmean <- as.vector(apply(xpr2, 2, mean)) #kill the names > all.equal(xpmean/risk0, as.vector(fit4$cptable[,'xerror'])) [1] TRUE > > xpstd <- as.vector(apply((sweep(xpr2, 2, xpmean))^2, 2, sum)) > xpstd <- sqrt(xpstd)/(50*risk0) > all.equal(xpstd, as.vector(fit4$cptable[,'xstd'])) [1] TRUE > > # > # recreate subset #3 of the xval > # > tfit4 <- rpart(income ~ population + region + illiteracy +life + murder + + hs.grad + frost , mystate, subset=(xvals!=3), + control=rpart.control(minsplit=10, xval=0)) > tpred <- predict(tfit4, mystate[xvals==3,]) > all.equal(tpred, xpr[xvals==3,ncol(xpr)]) [1] TRUE > > # How much does this differ from the "real" formula, more complex, > # found on page 309 of Breiman et al. ? > #xtemp <- (xpr2/outer(rep(1,50),xpmean)) - ((mystate$income - meany)^2)/risk0 > #real.se<- xpmean* sqrt(apply(xtemp^2,2,sum))/(risk0*50) > > > # Simple yes/no classification model > fit5 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, xval=xgroup) > > fit5 n= 146 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 146 54 0 (0.6301 0.3699) 2) grade< 2.5 61 9 0 (0.8525 0.1475) * 3) grade>=2.5 85 40 1 (0.4706 0.5294) 6) g2< 13.2 40 17 0 (0.5750 0.4250) 12) ploidy=diploid,tetraploid 31 11 0 (0.6452 0.3548) 24) g2>=11.84 7 1 0 (0.8571 0.1429) * 25) g2< 11.84 24 10 0 (0.5833 0.4167) 50) g2< 11 17 5 0 (0.7059 0.2941) * 51) g2>=11 7 2 1 (0.2857 0.7143) * 13) ploidy=aneuploid 9 3 1 (0.3333 0.6667) * 7) g2>=13.2 45 17 1 (0.3778 0.6222) 14) g2>=17.91 22 8 0 (0.6364 0.3636) 28) age>=62.5 15 4 0 (0.7333 0.2667) * 29) age< 62.5 7 3 1 (0.4286 0.5714) * 15) g2< 17.91 23 3 1 (0.1304 0.8696) * > > fit6 <- rpart(factor(pgstat) ~ age + eet + g2+grade+gleason +ploidy, + stagec, parm=list(prior=c(.5,.5)), xval=xgroup) > summary(fit6) Call: rpart(formula = factor(pgstat) ~ age + eet + g2 + grade + gleason + ploidy, data = stagec, parms = list(prior = c(0.5, 0.5)), xval = xgroup) n= 146 CP nsplit rel error xerror xstd 1 0.39855 0 1.0000 1.2081 0.09381 2 0.02335 1 0.6014 0.6679 0.07684 3 0.02275 3 0.5548 0.8378 0.08445 4 0.01892 5 0.5093 0.8857 0.08585 5 0.01530 7 0.4714 0.8857 0.08585 6 0.01000 9 0.4408 0.8639 0.08599 Variable importance g2 grade gleason ploidy age eet 28 26 20 18 6 2 Node number 1: 146 observations, complexity param=0.3986 predicted class=0 expected loss=0.5 P(node) =1 class counts: 92 54 probabilities: 0.500 0.500 left son=2 (61 obs) right son=3 (85 obs) Primary splits: grade < 2.5 to the left, improve=12.490, (0 missing) gleason < 5.5 to the left, improve=10.510, (3 missing) ploidy splits as LRR, improve= 9.018, (0 missing) g2 < 13.2 to the left, improve= 8.281, (7 missing) age < 58.5 to the right, improve= 1.520, (0 missing) Surrogate splits: gleason < 5.5 to the left, agree=0.863, adj=0.672, (0 split) ploidy splits as LRR, agree=0.644, adj=0.148, (0 split) g2 < 9.945 to the left, agree=0.630, adj=0.115, (0 split) age < 66.5 to the right, agree=0.589, adj=0.016, (0 split) Node number 2: 61 observations, complexity param=0.0153 predicted class=0 expected loss=0.2277 P(node) =0.3659 class counts: 52 9 probabilities: 0.772 0.228 left son=4 (33 obs) right son=5 (28 obs) Primary splits: g2 < 11.36 to the left, improve=3.5470, (1 missing) ploidy splits as LRL, improve=3.2970, (0 missing) age < 68.5 to the right, improve=1.2020, (0 missing) gleason < 5.5 to the left, improve=0.6474, (3 missing) eet < 1.5 to the left, improve=0.1910, (1 missing) Surrogate splits: ploidy splits as LR-, agree=0.917, adj=0.815, (0 split) age < 65.5 to the left, agree=0.617, adj=0.148, (1 split) Node number 3: 85 observations, complexity param=0.02335 predicted class=1 expected loss=0.3429 P(node) =0.6341 class counts: 40 45 probabilities: 0.343 0.657 left son=6 (40 obs) right son=7 (45 obs) Primary splits: g2 < 13.2 to the left, improve=1.96800, (6 missing) ploidy splits as LRR, improve=1.84100, (0 missing) age < 56.5 to the right, improve=1.32300, (0 missing) gleason < 8.5 to the left, improve=1.26900, (0 missing) eet < 1.5 to the right, improve=0.09632, (1 missing) Surrogate splits: ploidy splits as LRL, agree=0.962, adj=0.914, (6 split) age < 68.5 to the right, agree=0.608, adj=0.114, (0 split) gleason < 6.5 to the left, agree=0.582, adj=0.057, (0 split) Node number 4: 33 observations predicted class=0 expected loss=0.05055 P(node) =0.1832 class counts: 32 1 probabilities: 0.949 0.051 Node number 5: 28 observations, complexity param=0.0153 predicted class=0 expected loss=0.4053 P(node) =0.1828 class counts: 20 8 probabilities: 0.595 0.405 left son=10 (20 obs) right son=11 (8 obs) Primary splits: gleason < 5.5 to the left, improve=1.1580, (1 missing) age < 67.5 to the right, improve=1.1420, (0 missing) g2 < 14.37 to the right, improve=0.8086, (1 missing) Node number 6: 40 observations, complexity param=0.02335 predicted class=1 expected loss=0.4426 P(node) =0.2824 class counts: 23 17 probabilities: 0.443 0.557 left son=12 (7 obs) right son=13 (33 obs) Primary splits: g2 < 11.84 to the right, improve=1.42400, (5 missing) ploidy splits as LLR, improve=1.31000, (0 missing) gleason < 7.5 to the left, improve=0.86340, (0 missing) age < 61.5 to the right, improve=0.57940, (0 missing) eet < 1.5 to the left, improve=0.05363, (0 missing) Surrogate splits: ploidy splits as RLR, agree=0.857, adj=0.286, (5 split) Node number 7: 45 observations, complexity param=0.02275 predicted class=1 expected loss=0.2627 P(node) =0.3517 class counts: 17 28 probabilities: 0.263 0.737 left son=14 (22 obs) right son=15 (23 obs) Primary splits: g2 < 17.91 to the right, improve=4.07900, (1 missing) age < 62.5 to the right, improve=0.66100, (0 missing) gleason < 7.5 to the left, improve=0.16170, (0 missing) eet < 1.5 to the right, improve=0.09922, (1 missing) Surrogate splits: age < 61.5 to the right, agree=0.614, adj=0.190, (1 split) eet < 1.5 to the right, agree=0.591, adj=0.143, (0 split) grade < 3.5 to the right, agree=0.545, adj=0.048, (0 split) gleason < 6.5 to the right, agree=0.545, adj=0.048, (0 split) Node number 10: 20 observations predicted class=0 expected loss=0.2987 P(node) =0.124 class counts: 16 4 probabilities: 0.701 0.299 Node number 11: 8 observations predicted class=1 expected loss=0.3699 P(node) =0.05878 class counts: 4 4 probabilities: 0.370 0.630 Node number 12: 7 observations predicted class=0 expected loss=0.2212 P(node) =0.04187 class counts: 6 1 probabilities: 0.779 0.221 Node number 13: 33 observations, complexity param=0.01892 predicted class=1 expected loss=0.3841 P(node) =0.2405 class counts: 17 16 probabilities: 0.384 0.616 left son=26 (25 obs) right son=27 (8 obs) Primary splits: g2 < 11 to the left, improve=1.06300, (5 missing) ploidy splits as L-R, improve=0.73950, (0 missing) gleason < 6.5 to the left, improve=0.57220, (0 missing) age < 62.5 to the right, improve=0.13320, (0 missing) eet < 1.5 to the left, improve=0.05492, (0 missing) Surrogate splits: age < 70.5 to the left, agree=0.821, adj=0.286, (5 split) Node number 14: 22 observations, complexity param=0.02275 predicted class=0 expected loss=0.4933 P(node) =0.1502 class counts: 14 8 probabilities: 0.507 0.493 left son=28 (15 obs) right son=29 (7 obs) Primary splits: age < 62.5 to the right, improve=0.976400, (0 missing) g2 < 23.48 to the right, improve=0.284300, (1 missing) gleason < 7.5 to the left, improve=0.003765, (0 missing) Surrogate splits: gleason < 6.5 to the right, agree=0.773, adj=0.286, (0 split) Node number 15: 23 observations predicted class=1 expected loss=0.08092 P(node) =0.2015 class counts: 3 20 probabilities: 0.081 0.919 Node number 26: 25 observations, complexity param=0.01892 predicted class=1 expected loss=0.4276 P(node) =0.1779 class counts: 14 11 probabilities: 0.428 0.572 left son=52 (17 obs) right son=53 (8 obs) Primary splits: ploidy splits as L-R, improve=2.157000, (0 missing) gleason < 6.5 to the left, improve=1.972000, (0 missing) age < 61.5 to the right, improve=0.971800, (0 missing) g2 < 7.65 to the right, improve=0.404500, (4 missing) eet < 1.5 to the left, improve=0.002614, (0 missing) Surrogate splits: eet < 1.5 to the right, agree=0.72, adj=0.125, (0 split) g2 < 4.33 to the right, agree=0.72, adj=0.125, (0 split) Node number 27: 8 observations predicted class=1 expected loss=0.2605 P(node) =0.0626 class counts: 3 5 probabilities: 0.260 0.740 Node number 28: 15 observations predicted class=0 expected loss=0.3825 P(node) =0.09682 class counts: 11 4 probabilities: 0.617 0.383 Node number 29: 7 observations predicted class=1 expected loss=0.3057 P(node) =0.05334 class counts: 3 4 probabilities: 0.306 0.694 Node number 52: 17 observations predicted class=0 expected loss=0.4152 P(node) =0.1115 class counts: 12 5 probabilities: 0.585 0.415 Node number 53: 8 observations predicted class=1 expected loss=0.1636 P(node) =0.06643 class counts: 2 6 probabilities: 0.164 0.836 > # > # Fit a classification model to the car data. > # Now, since Reliability is an ordered category, this model doesn't > # make a lot of statistical sense, but it does test out some > # areas of the code that nothing else does > # > xcar <- rep(1:8, length=nrow(cu.summary)) > carfit <- rpart(Reliability ~ Price + Country + Mileage + Type, + method='class', data=cu.summary, xval=xcar) > > summary(carfit) Call: rpart(formula = Reliability ~ Price + Country + Mileage + Type, data = cu.summary, method = "class", xval = xcar) n=85 (32 observations deleted due to missingness) CP nsplit rel error xerror xstd 1 0.30508 0 1.0000 1.0000 0.07200 2 0.08475 1 0.6949 0.6949 0.07808 3 0.05085 2 0.6102 0.7119 0.07813 4 0.03390 3 0.5593 0.6780 0.07800 5 0.01000 4 0.5254 0.6780 0.07800 Variable importance Country Type Price 66 22 12 Node number 1: 85 observations, complexity param=0.3051 predicted class=average expected loss=0.6941 P(node) =1 class counts: 18 12 26 8 21 probabilities: 0.212 0.141 0.306 0.094 0.247 left son=2 (58 obs) right son=3 (27 obs) Primary splits: Country splits as ---LRRLLLL, improve=15.220, (0 missing) Type splits as RLLRLL, improve= 4.288, (0 missing) Price < 11970 to the right, improve= 3.200, (0 missing) Mileage < 24.5 to the left, improve= 2.476, (36 missing) Node number 2: 58 observations, complexity param=0.08475 predicted class=average expected loss=0.6034 P(node) =0.6824 class counts: 18 12 23 5 0 probabilities: 0.310 0.207 0.397 0.086 0.000 left son=4 (9 obs) right son=5 (49 obs) Primary splits: Type splits as RRRRLR, improve=3.187, (0 missing) Price < 11230 to the left, improve=2.564, (0 missing) Mileage < 24.5 to the left, improve=1.802, (30 missing) Country splits as ---L--RLRL, improve=1.329, (0 missing) Node number 3: 27 observations predicted class=Much better expected loss=0.2222 P(node) =0.3176 class counts: 0 0 3 3 21 probabilities: 0.000 0.000 0.111 0.111 0.778 Node number 4: 9 observations predicted class=Much worse expected loss=0.2222 P(node) =0.1059 class counts: 7 0 2 0 0 probabilities: 0.778 0.000 0.222 0.000 0.000 Node number 5: 49 observations, complexity param=0.05085 predicted class=average expected loss=0.5714 P(node) =0.5765 class counts: 11 12 21 5 0 probabilities: 0.224 0.245 0.429 0.102 0.000 left son=10 (27 obs) right son=11 (22 obs) Primary splits: Type splits as RLLR-L, improve=2.880, (0 missing) Mileage < 24.5 to the left, improve=2.500, (25 missing) Price < 11470 to the right, improve=2.424, (0 missing) Country splits as ---R--LRLR, improve=1.027, (0 missing) Surrogate splits: Price < 11470 to the right, agree=0.898, adj=0.773, (0 split) Country splits as ---R--RRRL, agree=0.755, adj=0.455, (0 split) Node number 10: 27 observations predicted class=average expected loss=0.4074 P(node) =0.3176 class counts: 7 4 16 0 0 probabilities: 0.259 0.148 0.593 0.000 0.000 Node number 11: 22 observations, complexity param=0.0339 predicted class=worse expected loss=0.6364 P(node) =0.2588 class counts: 4 8 5 5 0 probabilities: 0.182 0.364 0.227 0.227 0.000 left son=22 (14 obs) right son=23 (8 obs) Primary splits: Country splits as ---R--LRRL, improve=1.5190, (0 missing) Price < 8646 to the left, improve=1.2720, (0 missing) Type splits as L--R--, improve=0.1909, (0 missing) Surrogate splits: Price < 13970 to the left, agree=0.864, adj=0.625, (0 split) Node number 22: 14 observations predicted class=worse expected loss=0.5714 P(node) =0.1647 class counts: 4 6 1 3 0 probabilities: 0.286 0.429 0.071 0.214 0.000 Node number 23: 8 observations predicted class=average expected loss=0.5 P(node) =0.09412 class counts: 0 2 4 2 0 probabilities: 0.000 0.250 0.500 0.250 0.000 > > > proc.time() user system elapsed 0.742 0.040 0.776 rpart/tests/priors.R0000644000176200001440000000461713453436312014221 0ustar liggesusers# # A hard-core test of losses and priors # Simple data set where I know what the answers must be # library(rpart) aeq <- function(x,y, ...) all.equal(as.vector(x), as.vector(y), ...) dummy <- c(3,1,4,1,5,9,2,6,5,3,5,8,9,7,9)/5 pdata <- data.frame(y=factor(rep(1:3, 5)), x1 = 1:15, x2 = c(1:6, 1:6, 1:3), x3 = (rep(1:3, 5) + dummy)*10) pdata$x3[c(1,5,10)] <- NA pdata$y[15] <- 1 # make things unbalanced set.seed(10) pfit <- rpart(y ~ x1 + x2 + x3, pdata, cp=0, xval=0, minsplit=5, maxdepth=1, parms=list(prior=c(.2, .3, .5), loss =matrix(c(0,2,2,2,0,6,1,1,0), 3,3,byrow=T))) # # See section 12.1 of the report for these numbers # ntot <- c(6,5,4) phat <- c(6,5,4)/15 # observed class probabilities prior <- c(.2, .3, .5) # priors aprior <- c(4,12,5)/21 # altered priors lmat <- matrix(c(0,1,2, 2,0,1, 2,6,0), ncol=3) #loss matrix gini <- function(p) 1-sum(p^2) loss <- function(n, class) sum(n * lmat[,class]) phat <- function(n, ntot=c(6,5,4), prior=c(.2, .3, .5)) { n*prior/ntot } # Are the losses correct? # Class counts for the two children are (4,4,0) and (2,1,4), when # using surrogates aeq(pfit$frame$dev/15, c(loss(prior,2), loss(phat(c(4,4,0)),2), loss(phat(c(2,1,4)),3))) # Node probabilities? aeq(pfit$frame$yval2[,8] , c(1, sum(phat(c(4,4,0))), sum(phat(c(2,1,4))))) aeq(pfit$frame$yval2[,5:7] , rbind(prior, phat(c(4,4,0))/ sum(phat(c(4,4,0))), phat(c(2,1,4))/ sum(phat(c(2,1,4))))) # Now the node and class probs, under altered priors phat2 <- function(n, ntot=c(6,5,4), prior=aprior) { n*prior/ntot } # Use these to create the gini losses, base data, and for the best # splits on variables 1, 2, 3 gfun <- function(n) { #The gini loss for a node, given the counts temp <- phat2(n) sum(temp) * gini(temp/sum(temp)) } # These are in order x3, x2, x1 (best split to worst) # Note that for x3, missing values cause the "parent" to be viewed as # having 12 obs instead of 15. # Each line is gini(parent) - gini(children) aeq(pfit$splits[1:3, 3], 15* c(gfun(c(4,4,4)) - (gfun(c(3,4,0)) + gfun(c(1,0,4))), gfun(c(6,5,4)) - (gfun(c(6,5,2)) + gfun(c(0,0,2))), gfun(c(6,5,4)) - (gfun(c(4,4,4)) + gfun(c(2,1,0))))) rpart/tests/Examples/0000755000176200001440000000000013453662120014324 5ustar liggesusersrpart/tests/Examples/rpart-Ex.Rout.save0000644000176200001440000010232613453662063017650 0ustar liggesusers R Under development (unstable) (2019-04-05 r76323) -- "Unsuffered Consequences" Copyright (C) 2019 The R Foundation for Statistical Computing Platform: x86_64-pc-linux-gnu (64-bit) R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. Natural language support but running in an English locale R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > pkgname <- "rpart" > source(file.path(R.home("share"), "R", "examples-header.R")) > options(warn = 1) > library('rpart') > > base::assign(".oldSearch", base::search(), pos = 'CheckExEnv') > base::assign(".old_wd", base::getwd(), pos = 'CheckExEnv') > cleanEx() > nameEx("car.test.frame") > ### * car.test.frame > > flush(stderr()); flush(stdout()) > > ### Name: car.test.frame > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: car.test.frame > ### Keywords: datasets > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > summary(z.auto) Call: rpart(formula = Mileage ~ Weight, data = car.test.frame) n= 60 CP nsplit rel error xerror xstd 1 0.59534912 0 1.0000000 1.0337818 0.18046532 2 0.13452819 1 0.4046509 0.5836606 0.10900973 3 0.01282843 2 0.2701227 0.4409221 0.08652804 4 0.01000000 3 0.2572943 0.4415805 0.08663003 Variable importance Weight 100 Node number 1: 60 observations, complexity param=0.5953491 mean=24.58333, MSE=22.57639 left son=2 (45 obs) right son=3 (15 obs) Primary splits: Weight < 2567.5 to the right, improve=0.5953491, (0 missing) Node number 2: 45 observations, complexity param=0.1345282 mean=22.46667, MSE=8.026667 left son=4 (22 obs) right son=5 (23 obs) Primary splits: Weight < 3087.5 to the right, improve=0.5045118, (0 missing) Node number 3: 15 observations mean=30.93333, MSE=12.46222 Node number 4: 22 observations mean=20.40909, MSE=2.78719 Node number 5: 23 observations, complexity param=0.01282843 mean=24.43478, MSE=5.115312 left son=10 (15 obs) right son=11 (8 obs) Primary splits: Weight < 2747.5 to the right, improve=0.1476996, (0 missing) Node number 10: 15 observations mean=23.8, MSE=4.026667 Node number 11: 8 observations mean=25.625, MSE=4.984375 > > > > cleanEx() > nameEx("car90") > ### * car90 > > flush(stderr()); flush(stdout()) > > ### Name: car90 > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: car90 > ### Keywords: datasets > > ### ** Examples > > data(car90) > plot(car90$Price/1000, car90$Weight, + xlab = "Price (thousands)", ylab = "Weight (lbs)") > mlowess <- function(x, y, ...) { + keep <- !(is.na(x) | is.na(y)) + lowess(x[keep], y[keep], ...) + } > with(car90, lines(mlowess(Price/1000, Weight, f = 0.5))) > > > > cleanEx() > nameEx("cu.summary") > ### * cu.summary > > flush(stderr()); flush(stdout()) > > ### Name: cu.summary > ### Title: Automobile Data from 'Consumer Reports' 1990 > ### Aliases: cu.summary > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(Price ~ Mileage + Type + Country, cu.summary) > par(xpd = TRUE) > plot(fit, compress = TRUE) > text(fit, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("kyphosis") > ### * kyphosis > > flush(stderr()); flush(stdout()) > > ### Name: kyphosis > ### Title: Data on Children who have had Corrective Spinal Surgery > ### Aliases: kyphosis > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + parms = list(prior = c(0.65, 0.35), split = "information")) > fit3 <- rpart(Kyphosis ~ Age + Number + Start, data=kyphosis, + control = rpart.control(cp = 0.05)) > par(mfrow = c(1,2), xpd = TRUE) > plot(fit) > text(fit, use.n = TRUE) > plot(fit2) > text(fit2, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("meanvar.rpart") > ### * meanvar.rpart > > flush(stderr()); flush(stdout()) > > ### Name: meanvar.rpart > ### Title: Mean-Variance Plot for an Rpart Object > ### Aliases: meanvar meanvar.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > meanvar(z.auto, log = 'xy') > > > > cleanEx() > nameEx("path.rpart") > ### * path.rpart > > flush(stderr()); flush(stdout()) > > ### Name: path.rpart > ### Title: Follow Paths to Selected Nodes of an Rpart Object > ### Aliases: path.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > print(fit) n= 81 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 81 17 absent (0.79012346 0.20987654) 2) Start>=8.5 62 6 absent (0.90322581 0.09677419) 4) Start>=14.5 29 0 absent (1.00000000 0.00000000) * 5) Start< 14.5 33 6 absent (0.81818182 0.18181818) 10) Age< 55 12 0 absent (1.00000000 0.00000000) * 11) Age>=55 21 6 absent (0.71428571 0.28571429) 22) Age>=111 14 2 absent (0.85714286 0.14285714) * 23) Age< 111 7 3 present (0.42857143 0.57142857) * 3) Start< 8.5 19 8 present (0.42105263 0.57894737) * > path.rpart(fit, node = c(11, 22)) node number: 11 root Start>=8.5 Start< 14.5 Age>=55 node number: 22 root Start>=8.5 Start< 14.5 Age>=55 Age>=111 > > > > cleanEx() > nameEx("plot.rpart") > ### * plot.rpart > > flush(stderr()); flush(stdout()) > > ### Name: plot.rpart > ### Title: Plot an Rpart Object > ### Aliases: plot.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Price ~ Mileage + Type + Country, cu.summary) > par(xpd = TRUE) > plot(fit, compress = TRUE) > text(fit, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("post.rpart") > ### * post.rpart > > flush(stderr()); flush(stdout()) > > ### Name: post.rpart > ### Title: PostScript Presentation Plot of an Rpart Object > ### Aliases: post.rpart post > ### Keywords: tree > > ### ** Examples > > ## Not run: > ##D z.auto <- rpart(Mileage ~ Weight, car.test.frame) > ##D post(z.auto, file = "") # display tree on active device > ##D # now construct postscript version on file "pretty.ps" > ##D # with no title > ##D post(z.auto, file = "pretty.ps", title = " ") > ##D z.hp <- rpart(Mileage ~ Weight + HP, car.test.frame) > ##D post(z.hp) > ## End(Not run) > > > > cleanEx() > nameEx("predict.rpart") > ### * predict.rpart > > flush(stderr()); flush(stdout()) > > ### Name: predict.rpart > ### Title: Predictions from a Fitted Rpart Object > ### Aliases: predict.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > predict(z.auto) Eagle Summit 4 Ford Escort 4 30.93333 30.93333 Ford Festiva 4 Honda Civic 4 30.93333 30.93333 Mazda Protege 4 Mercury Tracer 4 30.93333 30.93333 Nissan Sentra 4 Pontiac LeMans 4 30.93333 30.93333 Subaru Loyale 4 Subaru Justy 3 30.93333 30.93333 Toyota Corolla 4 Toyota Tercel 4 30.93333 30.93333 Volkswagen Jetta 4 Chevrolet Camaro V8 30.93333 20.40909 Dodge Daytona Ford Mustang V8 23.80000 20.40909 Ford Probe Honda Civic CRX Si 4 25.62500 30.93333 Honda Prelude Si 4WS 4 Nissan 240SX 4 25.62500 23.80000 Plymouth Laser Subaru XT 4 23.80000 30.93333 Audi 80 4 Buick Skylark 4 25.62500 25.62500 Chevrolet Beretta 4 Chrysler Le Baron V6 25.62500 23.80000 Ford Tempo 4 Honda Accord 4 23.80000 23.80000 Mazda 626 4 Mitsubishi Galant 4 23.80000 25.62500 Mitsubishi Sigma V6 Nissan Stanza 4 20.40909 23.80000 Oldsmobile Calais 4 Peugeot 405 4 25.62500 25.62500 Subaru Legacy 4 Toyota Camry 4 23.80000 23.80000 Volvo 240 4 Acura Legend V6 23.80000 20.40909 Buick Century 4 Chrysler Le Baron Coupe 23.80000 23.80000 Chrysler New Yorker V6 Eagle Premier V6 20.40909 20.40909 Ford Taurus V6 Ford Thunderbird V6 20.40909 20.40909 Hyundai Sonata 4 Mazda 929 V6 23.80000 20.40909 Nissan Maxima V6 Oldsmobile Cutlass Ciera 4 20.40909 23.80000 Oldsmobile Cutlass Supreme V6 Toyota Cressida 6 20.40909 20.40909 Buick Le Sabre V6 Chevrolet Caprice V8 20.40909 20.40909 Ford LTD Crown Victoria V8 Chevrolet Lumina APV V6 20.40909 20.40909 Dodge Grand Caravan V6 Ford Aerostar V6 20.40909 20.40909 Mazda MPV V6 Mitsubishi Wagon 4 20.40909 20.40909 Nissan Axxess 4 Nissan Van 4 20.40909 20.40909 > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > predict(fit, type = "prob") # class probabilities (default) absent present 1 0.4210526 0.5789474 2 0.8571429 0.1428571 3 0.4210526 0.5789474 4 0.4210526 0.5789474 5 1.0000000 0.0000000 6 1.0000000 0.0000000 7 1.0000000 0.0000000 8 1.0000000 0.0000000 9 1.0000000 0.0000000 10 0.4285714 0.5714286 11 0.4285714 0.5714286 12 1.0000000 0.0000000 13 0.4210526 0.5789474 14 1.0000000 0.0000000 15 1.0000000 0.0000000 16 1.0000000 0.0000000 17 1.0000000 0.0000000 18 0.8571429 0.1428571 19 1.0000000 0.0000000 20 1.0000000 0.0000000 21 1.0000000 0.0000000 22 0.4210526 0.5789474 23 0.4285714 0.5714286 24 0.4210526 0.5789474 25 0.4210526 0.5789474 26 1.0000000 0.0000000 27 0.4210526 0.5789474 28 0.4285714 0.5714286 29 1.0000000 0.0000000 30 1.0000000 0.0000000 31 1.0000000 0.0000000 32 0.8571429 0.1428571 33 0.8571429 0.1428571 34 1.0000000 0.0000000 35 0.8571429 0.1428571 36 1.0000000 0.0000000 37 1.0000000 0.0000000 38 0.4210526 0.5789474 39 1.0000000 0.0000000 40 0.4285714 0.5714286 41 0.4210526 0.5789474 42 1.0000000 0.0000000 43 0.4210526 0.5789474 44 0.4210526 0.5789474 45 1.0000000 0.0000000 46 0.8571429 0.1428571 47 1.0000000 0.0000000 48 0.8571429 0.1428571 49 0.4210526 0.5789474 50 0.8571429 0.1428571 51 0.4285714 0.5714286 52 1.0000000 0.0000000 53 0.4210526 0.5789474 54 1.0000000 0.0000000 55 1.0000000 0.0000000 56 1.0000000 0.0000000 57 1.0000000 0.0000000 58 0.4210526 0.5789474 59 1.0000000 0.0000000 60 0.4285714 0.5714286 61 0.4210526 0.5789474 62 0.4210526 0.5789474 63 0.4210526 0.5789474 64 1.0000000 0.0000000 65 1.0000000 0.0000000 66 1.0000000 0.0000000 67 1.0000000 0.0000000 68 0.8571429 0.1428571 69 1.0000000 0.0000000 70 1.0000000 0.0000000 71 0.8571429 0.1428571 72 0.8571429 0.1428571 73 1.0000000 0.0000000 74 0.8571429 0.1428571 75 1.0000000 0.0000000 76 1.0000000 0.0000000 77 0.8571429 0.1428571 78 1.0000000 0.0000000 79 0.8571429 0.1428571 80 0.4210526 0.5789474 81 1.0000000 0.0000000 > predict(fit, type = "vector") # level numbers 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 1 2 2 1 1 1 1 1 2 2 1 2 1 1 1 1 1 1 1 1 2 2 2 2 1 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 2 2 1 1 1 1 1 1 1 1 1 2 1 2 2 1 2 2 1 1 1 1 2 1 2 1 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 2 1 1 1 1 2 1 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 79 80 81 1 2 1 > predict(fit, type = "class") # factor 1 2 3 4 5 6 7 8 9 10 present absent present present absent absent absent absent absent present 11 12 13 14 15 16 17 18 19 20 present absent present absent absent absent absent absent absent absent 21 22 23 24 25 26 27 28 29 30 absent present present present present absent present present absent absent 31 32 33 34 35 36 37 38 39 40 absent absent absent absent absent absent absent present absent present 41 42 43 44 45 46 47 48 49 50 present absent present present absent absent absent absent present absent 51 52 53 54 55 56 57 58 59 60 present absent present absent absent absent absent present absent present 61 62 63 64 65 66 67 68 69 70 present present present absent absent absent absent absent absent absent 71 72 73 74 75 76 77 78 79 80 absent absent absent absent absent absent absent absent absent present 81 absent Levels: absent present > predict(fit, type = "matrix") # level number, class frequencies, probabilities [,1] [,2] [,3] [,4] [,5] [,6] 1 2 8 11 0.4210526 0.5789474 0.23456790 2 1 12 2 0.8571429 0.1428571 0.17283951 3 2 8 11 0.4210526 0.5789474 0.23456790 4 2 8 11 0.4210526 0.5789474 0.23456790 5 1 29 0 1.0000000 0.0000000 0.35802469 6 1 29 0 1.0000000 0.0000000 0.35802469 7 1 29 0 1.0000000 0.0000000 0.35802469 8 1 29 0 1.0000000 0.0000000 0.35802469 9 1 29 0 1.0000000 0.0000000 0.35802469 10 2 3 4 0.4285714 0.5714286 0.08641975 11 2 3 4 0.4285714 0.5714286 0.08641975 12 1 29 0 1.0000000 0.0000000 0.35802469 13 2 8 11 0.4210526 0.5789474 0.23456790 14 1 12 0 1.0000000 0.0000000 0.14814815 15 1 29 0 1.0000000 0.0000000 0.35802469 16 1 29 0 1.0000000 0.0000000 0.35802469 17 1 29 0 1.0000000 0.0000000 0.35802469 18 1 12 2 0.8571429 0.1428571 0.17283951 19 1 29 0 1.0000000 0.0000000 0.35802469 20 1 12 0 1.0000000 0.0000000 0.14814815 21 1 29 0 1.0000000 0.0000000 0.35802469 22 2 8 11 0.4210526 0.5789474 0.23456790 23 2 3 4 0.4285714 0.5714286 0.08641975 24 2 8 11 0.4210526 0.5789474 0.23456790 25 2 8 11 0.4210526 0.5789474 0.23456790 26 1 12 0 1.0000000 0.0000000 0.14814815 27 2 8 11 0.4210526 0.5789474 0.23456790 28 2 3 4 0.4285714 0.5714286 0.08641975 29 1 29 0 1.0000000 0.0000000 0.35802469 30 1 29 0 1.0000000 0.0000000 0.35802469 31 1 29 0 1.0000000 0.0000000 0.35802469 32 1 12 2 0.8571429 0.1428571 0.17283951 33 1 12 2 0.8571429 0.1428571 0.17283951 34 1 29 0 1.0000000 0.0000000 0.35802469 35 1 12 2 0.8571429 0.1428571 0.17283951 36 1 29 0 1.0000000 0.0000000 0.35802469 37 1 12 0 1.0000000 0.0000000 0.14814815 38 2 8 11 0.4210526 0.5789474 0.23456790 39 1 12 0 1.0000000 0.0000000 0.14814815 40 2 3 4 0.4285714 0.5714286 0.08641975 41 2 8 11 0.4210526 0.5789474 0.23456790 42 1 12 0 1.0000000 0.0000000 0.14814815 43 2 8 11 0.4210526 0.5789474 0.23456790 44 2 8 11 0.4210526 0.5789474 0.23456790 45 1 29 0 1.0000000 0.0000000 0.35802469 46 1 12 2 0.8571429 0.1428571 0.17283951 47 1 29 0 1.0000000 0.0000000 0.35802469 48 1 12 2 0.8571429 0.1428571 0.17283951 49 2 8 11 0.4210526 0.5789474 0.23456790 50 1 12 2 0.8571429 0.1428571 0.17283951 51 2 3 4 0.4285714 0.5714286 0.08641975 52 1 29 0 1.0000000 0.0000000 0.35802469 53 2 8 11 0.4210526 0.5789474 0.23456790 54 1 29 0 1.0000000 0.0000000 0.35802469 55 1 29 0 1.0000000 0.0000000 0.35802469 56 1 29 0 1.0000000 0.0000000 0.35802469 57 1 12 0 1.0000000 0.0000000 0.14814815 58 2 8 11 0.4210526 0.5789474 0.23456790 59 1 12 0 1.0000000 0.0000000 0.14814815 60 2 3 4 0.4285714 0.5714286 0.08641975 61 2 8 11 0.4210526 0.5789474 0.23456790 62 2 8 11 0.4210526 0.5789474 0.23456790 63 2 8 11 0.4210526 0.5789474 0.23456790 64 1 29 0 1.0000000 0.0000000 0.35802469 65 1 29 0 1.0000000 0.0000000 0.35802469 66 1 12 0 1.0000000 0.0000000 0.14814815 67 1 29 0 1.0000000 0.0000000 0.35802469 68 1 12 2 0.8571429 0.1428571 0.17283951 69 1 12 0 1.0000000 0.0000000 0.14814815 70 1 29 0 1.0000000 0.0000000 0.35802469 71 1 12 2 0.8571429 0.1428571 0.17283951 72 1 12 2 0.8571429 0.1428571 0.17283951 73 1 29 0 1.0000000 0.0000000 0.35802469 74 1 12 2 0.8571429 0.1428571 0.17283951 75 1 29 0 1.0000000 0.0000000 0.35802469 76 1 29 0 1.0000000 0.0000000 0.35802469 77 1 12 2 0.8571429 0.1428571 0.17283951 78 1 12 0 1.0000000 0.0000000 0.14814815 79 1 12 2 0.8571429 0.1428571 0.17283951 80 2 8 11 0.4210526 0.5789474 0.23456790 81 1 12 0 1.0000000 0.0000000 0.14814815 > > sub <- c(sample(1:50, 25), sample(51:100, 25), sample(101:150, 25)) > fit <- rpart(Species ~ ., data = iris, subset = sub) > fit n= 75 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 75 50 setosa (0.33333333 0.33333333 0.33333333) 2) Petal.Length< 2.5 25 0 setosa (1.00000000 0.00000000 0.00000000) * 3) Petal.Length>=2.5 50 25 versicolor (0.00000000 0.50000000 0.50000000) 6) Petal.Length< 4.85 26 2 versicolor (0.00000000 0.92307692 0.07692308) * 7) Petal.Length>=4.85 24 1 virginica (0.00000000 0.04166667 0.95833333) * > table(predict(fit, iris[-sub,], type = "class"), iris[-sub, "Species"]) setosa versicolor virginica setosa 25 0 0 versicolor 0 22 1 virginica 0 3 24 > > > > cleanEx() > nameEx("print.rpart") > ### * print.rpart > > flush(stderr()); flush(stdout()) > > ### Name: print.rpart > ### Title: Print an Rpart Object > ### Aliases: print.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > z.auto n= 60 node), split, n, deviance, yval * denotes terminal node 1) root 60 1354.58300 24.58333 2) Weight>=2567.5 45 361.20000 22.46667 4) Weight>=3087.5 22 61.31818 20.40909 * 5) Weight< 3087.5 23 117.65220 24.43478 10) Weight>=2747.5 15 60.40000 23.80000 * 11) Weight< 2747.5 8 39.87500 25.62500 * 3) Weight< 2567.5 15 186.93330 30.93333 * > ## Not run: > ##D node), split, n, deviance, yval > ##D * denotes terminal node > ##D > ##D 1) root 60 1354.58300 24.58333 > ##D 2) Weight>=2567.5 45 361.20000 22.46667 > ##D 4) Weight>=3087.5 22 61.31818 20.40909 * > ##D 5) Weight<3087.5 23 117.65220 24.43478 > ##D 10) Weight>=2747.5 15 60.40000 23.80000 * > ##D 11) Weight<2747.5 8 39.87500 25.62500 * > ##D 3) Weight<2567.5 15 186.93330 30.93333 * > ## End(Not run) > > > cleanEx() > nameEx("printcp") > ### * printcp > > flush(stderr()); flush(stdout()) > > ### Name: printcp > ### Title: Displays CP table for Fitted Rpart Object > ### Aliases: printcp > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > printcp(z.auto) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03378 0.180465 2 0.134528 1 0.40465 0.58366 0.109010 3 0.012828 2 0.27012 0.44092 0.086528 4 0.010000 3 0.25729 0.44158 0.086630 > ## Not run: > ##D Regression tree: > ##D rpart(formula = Mileage ~ Weight, data = car.test.frame) > ##D > ##D Variables actually used in tree construction: > ##D [1] Weight > ##D > ##D Root node error: 1354.6/60 = 22.576 > ##D > ##D CP nsplit rel error xerror xstd > ##D 1 0.595349 0 1.00000 1.03436 0.178526 > ##D 2 0.134528 1 0.40465 0.60508 0.105217 > ##D 3 0.012828 2 0.27012 0.45153 0.083330 > ##D 4 0.010000 3 0.25729 0.44826 0.076998 > ## End(Not run) > > > cleanEx() > nameEx("prune.rpart") > ### * prune.rpart > > flush(stderr()); flush(stdout()) > > ### Name: prune.rpart > ### Title: Cost-complexity Pruning of an Rpart Object > ### Aliases: prune.rpart prune > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > zp <- prune(z.auto, cp = 0.1) > plot(zp) #plot smaller rpart object > > > > cleanEx() > nameEx("residuals.rpart") > ### * residuals.rpart > > flush(stderr()); flush(stdout()) > > ### Name: residuals.rpart > ### Title: Residuals From a Fitted Rpart Object > ### Aliases: residuals.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, + data = solder.balance, method = "anova") > summary(residuals(fit)) Min. 1st Qu. Median Mean 3rd Qu. Max. -13.8000 -1.0361 -0.6833 0.0000 0.9639 16.2000 > plot(predict(fit),residuals(fit)) > > > > cleanEx() > nameEx("rpart") > ### * rpart > > flush(stderr()); flush(stdout()) > > ### Name: rpart > ### Title: Recursive Partitioning and Regression Trees > ### Aliases: rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis) > fit2 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + parms = list(prior = c(.65,.35), split = "information")) > fit3 <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis, + control = rpart.control(cp = 0.05)) > par(mfrow = c(1,2), xpd = NA) # otherwise on some devices the text is clipped > plot(fit) > text(fit, use.n = TRUE) > plot(fit2) > text(fit2, use.n = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("rsq.rpart") > ### * rsq.rpart > > flush(stderr()); flush(stdout()) > > ### Name: rsq.rpart > ### Title: Plots the Approximate R-Square for the Different Splits > ### Aliases: rsq.rpart > ### Keywords: tree > > ### ** Examples > > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > rsq.rpart(z.auto) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03378 0.180465 2 0.134528 1 0.40465 0.58366 0.109010 3 0.012828 2 0.27012 0.44092 0.086528 4 0.010000 3 0.25729 0.44158 0.086630 > > > > cleanEx() > nameEx("snip.rpart") > ### * snip.rpart > > flush(stderr()); flush(stdout()) > > ### Name: snip.rpart > ### Title: Snip Subtrees of an Rpart Object > ### Aliases: snip.rpart > ### Keywords: tree > > ### ** Examples > > ## dataset not in R > ## Not run: > ##D z.survey <- rpart(market.survey) # grow the rpart object > ##D plot(z.survey) # plot the tree > ##D z.survey2 <- snip.rpart(z.survey, toss = 2) # trim subtree at node 2 > ##D plot(z.survey2) # plot new tree > ##D > ##D # can also interactively select the node using the mouse in the > ##D # graphics window > ## End(Not run) > > > cleanEx() > nameEx("solder.balance") > ### * solder.balance > > flush(stderr()); flush(stdout()) > > ### Name: solder.balance > ### Title: Soldering of Components on Printed-Circuit Boards > ### Aliases: solder.balance solder > ### Keywords: datasets > > ### ** Examples > > fit <- rpart(skips ~ Opening + Solder + Mask + PadType + Panel, + data = solder.balance, method = "anova") > summary(residuals(fit)) Min. 1st Qu. Median Mean 3rd Qu. Max. -13.8000 -1.0361 -0.6833 0.0000 0.9639 16.2000 > plot(predict(fit), residuals(fit)) > > > > cleanEx() > nameEx("stagec") > ### * stagec > > flush(stderr()); flush(stdout()) > > ### Name: stagec > ### Title: Stage C Prostate Cancer > ### Aliases: stagec > ### Keywords: datasets > > ### ** Examples > > require(survival) Loading required package: survival > rpart(Surv(pgtime, pgstat) ~ ., stagec) n= 146 node), split, n, deviance, yval * denotes terminal node 1) root 146 192.111100 1.0000000 2) grade< 2.5 61 44.799010 0.3634439 4) g2< 11.36 33 9.117405 0.1229835 * 5) g2>=11.36 28 27.602190 0.7345610 10) gleason< 5.5 20 14.297110 0.5304115 * 11) gleason>=5.5 8 11.094650 1.3069940 * 3) grade>=2.5 85 122.441500 1.6148600 6) age>=56.5 75 103.062900 1.4255040 12) gleason< 7.5 50 66.119800 1.1407320 24) g2< 13.475 24 27.197170 0.8007306 * 25) g2>=13.475 26 36.790960 1.4570210 50) g2>=17.915 15 20.332740 0.9789825 * 51) g2< 17.915 11 13.459010 2.1714480 * 13) gleason>=7.5 25 33.487250 2.0307290 26) g2>=15.29 10 11.588480 1.2156230 * 27) g2< 15.29 15 18.939150 2.7053610 * 7) age< 56.5 10 13.769010 3.1822320 * > > > > cleanEx() detaching ‘package:survival’ > nameEx("summary.rpart") > ### * summary.rpart > > flush(stderr()); flush(stdout()) > > ### Name: summary.rpart > ### Title: Summarize a Fitted Rpart Object > ### Aliases: summary.rpart > ### Keywords: tree > > ### ** Examples > > ## a regression tree > z.auto <- rpart(Mileage ~ Weight, car.test.frame) > summary(z.auto) Call: rpart(formula = Mileage ~ Weight, data = car.test.frame) n= 60 CP nsplit rel error xerror xstd 1 0.59534912 0 1.0000000 1.0337818 0.18046532 2 0.13452819 1 0.4046509 0.5836606 0.10900973 3 0.01282843 2 0.2701227 0.4409221 0.08652804 4 0.01000000 3 0.2572943 0.4415805 0.08663003 Variable importance Weight 100 Node number 1: 60 observations, complexity param=0.5953491 mean=24.58333, MSE=22.57639 left son=2 (45 obs) right son=3 (15 obs) Primary splits: Weight < 2567.5 to the right, improve=0.5953491, (0 missing) Node number 2: 45 observations, complexity param=0.1345282 mean=22.46667, MSE=8.026667 left son=4 (22 obs) right son=5 (23 obs) Primary splits: Weight < 3087.5 to the right, improve=0.5045118, (0 missing) Node number 3: 15 observations mean=30.93333, MSE=12.46222 Node number 4: 22 observations mean=20.40909, MSE=2.78719 Node number 5: 23 observations, complexity param=0.01282843 mean=24.43478, MSE=5.115312 left son=10 (15 obs) right son=11 (8 obs) Primary splits: Weight < 2747.5 to the right, improve=0.1476996, (0 missing) Node number 10: 15 observations mean=23.8, MSE=4.026667 Node number 11: 8 observations mean=25.625, MSE=4.984375 > > ## a classification tree with multiple variables and surrogate splits. > summary(rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)) Call: rpart(formula = Kyphosis ~ Age + Number + Start, data = kyphosis) n= 81 CP nsplit rel error xerror xstd 1 0.17647059 0 1.0000000 1.000000 0.2155872 2 0.01960784 1 0.8235294 1.058824 0.2200975 3 0.01000000 4 0.7647059 1.058824 0.2200975 Variable importance Start Age Number 64 24 12 Node number 1: 81 observations, complexity param=0.1764706 predicted class=absent expected loss=0.2098765 P(node) =1 class counts: 64 17 probabilities: 0.790 0.210 left son=2 (62 obs) right son=3 (19 obs) Primary splits: Start < 8.5 to the right, improve=6.762330, (0 missing) Number < 5.5 to the left, improve=2.866795, (0 missing) Age < 39.5 to the left, improve=2.250212, (0 missing) Surrogate splits: Number < 6.5 to the left, agree=0.802, adj=0.158, (0 split) Node number 2: 62 observations, complexity param=0.01960784 predicted class=absent expected loss=0.09677419 P(node) =0.7654321 class counts: 56 6 probabilities: 0.903 0.097 left son=4 (29 obs) right son=5 (33 obs) Primary splits: Start < 14.5 to the right, improve=1.0205280, (0 missing) Age < 55 to the left, improve=0.6848635, (0 missing) Number < 4.5 to the left, improve=0.2975332, (0 missing) Surrogate splits: Number < 3.5 to the left, agree=0.645, adj=0.241, (0 split) Age < 16 to the left, agree=0.597, adj=0.138, (0 split) Node number 3: 19 observations predicted class=present expected loss=0.4210526 P(node) =0.2345679 class counts: 8 11 probabilities: 0.421 0.579 Node number 4: 29 observations predicted class=absent expected loss=0 P(node) =0.3580247 class counts: 29 0 probabilities: 1.000 0.000 Node number 5: 33 observations, complexity param=0.01960784 predicted class=absent expected loss=0.1818182 P(node) =0.4074074 class counts: 27 6 probabilities: 0.818 0.182 left son=10 (12 obs) right son=11 (21 obs) Primary splits: Age < 55 to the left, improve=1.2467530, (0 missing) Start < 12.5 to the right, improve=0.2887701, (0 missing) Number < 3.5 to the right, improve=0.1753247, (0 missing) Surrogate splits: Start < 9.5 to the left, agree=0.758, adj=0.333, (0 split) Number < 5.5 to the right, agree=0.697, adj=0.167, (0 split) Node number 10: 12 observations predicted class=absent expected loss=0 P(node) =0.1481481 class counts: 12 0 probabilities: 1.000 0.000 Node number 11: 21 observations, complexity param=0.01960784 predicted class=absent expected loss=0.2857143 P(node) =0.2592593 class counts: 15 6 probabilities: 0.714 0.286 left son=22 (14 obs) right son=23 (7 obs) Primary splits: Age < 111 to the right, improve=1.71428600, (0 missing) Start < 12.5 to the right, improve=0.79365080, (0 missing) Number < 3.5 to the right, improve=0.07142857, (0 missing) Node number 22: 14 observations predicted class=absent expected loss=0.1428571 P(node) =0.1728395 class counts: 12 2 probabilities: 0.857 0.143 Node number 23: 7 observations predicted class=present expected loss=0.4285714 P(node) =0.08641975 class counts: 3 4 probabilities: 0.429 0.571 > > > > cleanEx() > nameEx("text.rpart") > ### * text.rpart > > flush(stderr()); flush(stdout()) > > ### Name: text.rpart > ### Title: Place Text on a Dendrogram Plot > ### Aliases: text.rpart > ### Keywords: tree > > ### ** Examples > > freen.tr <- rpart(y ~ ., freeny) > par(xpd = TRUE) > plot(freen.tr) > text(freen.tr, use.n = TRUE, all = TRUE) > > > > graphics::par(get("par.postscript", pos = 'CheckExEnv')) > cleanEx() > nameEx("xpred.rpart") > ### * xpred.rpart > > flush(stderr()); flush(stdout()) > > ### Name: xpred.rpart > ### Title: Return Cross-Validated Predictions > ### Aliases: xpred.rpart > ### Keywords: tree > > ### ** Examples > > fit <- rpart(Mileage ~ Weight, car.test.frame) > xmat <- xpred.rpart(fit) > xerr <- (xmat - car.test.frame$Mileage)^2 > apply(xerr, 2, sum) # cross-validated error estimate 0.79767456 0.28300396 0.04154257 0.01132626 1396.6687 773.1546 577.8990 594.1341 > > # approx same result as rel. error from printcp(fit) > apply(xerr, 2, sum)/var(car.test.frame$Mileage) 0.79767456 0.28300396 0.04154257 0.01132626 60.83306 33.67539 25.17087 25.87800 > printcp(fit) Regression tree: rpart(formula = Mileage ~ Weight, data = car.test.frame) Variables actually used in tree construction: [1] Weight Root node error: 1354.6/60 = 22.576 n= 60 CP nsplit rel error xerror xstd 1 0.595349 0 1.00000 1.03378 0.180465 2 0.134528 1 0.40465 0.58366 0.109010 3 0.012828 2 0.27012 0.44092 0.086528 4 0.010000 3 0.25729 0.44158 0.086630 > > > > ### *