Nichtlineare Regression (Futtermittelkunde) Hans-Peter Piepho ([email protected]) 3. Dezember 2001 Fallstudie für Vorlesung Beispiel von Gerd Diebold (FG Futtermittelkunde bei Prof. Mosenthin): Tierart: Broiler Futtermittel: Mischfutter (60% Mais, 27% Sojaschrot)? Zitat aus e-mail vom 20.11.2001 "Bei Zulageversuchen mit dem Enzym Phytase erhält man für die Effekte meist eine zunächst ansteigende Kurve, die in einem Plateau ausläuft. Zum Vergleich zweier verschiedener Produkte ermittelt man gleichzeitig noch einen Kontrollwert mit der Zulagestufe 0. Meine Frage an Sie ist nun: Gibt es eine Möglichkeit mit SAS die beiden Kurven mittels einer Polynomregression auf signifikante Unterschiede bei einem gegebenen Intercept (sprich der Kontrolle) zu vergleichen? Anbei habe ich noch eine entsprechende SAS-Datei (sample.sas) angehängt, die Ergebnisse eines Praxisversuchs beinhaltet." Der Versuch wurde in einer Blockanlage mit vier Wiederholungen angelegt, weil wegen lokalen Schwankungen des Stallklimas mit von systematischen Umweltunterschieden innerhalb des Stalls ausgegangen werden musste. Eine Versuchseinheit besteht aus einem Käfig mit jeweils 10 Tieren. Bearbeitung Piepho Ich habe die Daten der Kontrolle und der Behandlungen (verschiedene Dosen) für Phyt1 und Phyt2 herausgefiltert, da für diese ein Vergleich der Verlaufskurven möglich ist. Ein Plot der Zunahmen (y; gain) gegen die Dosen (x) deutet auf eine Sättigungskurve hin. Ein Modell, welches einen solchen Verlauf zeigt, lautet: y = (x) + e wobei e ein Fehlerterm ist und (x) = + exp(x). 1 Zunahme (g/20 Tage) 1000 Phyt1 900 C 800 C C C C C C C C C C 700 C C C C C C C C C C C C C C Phyt2 600 500 C 400 C 0 500 1000 1500 Enzymdosis (Units/kg) Fig.: Zunahmen bei zwei verschiedenen Phytasen (Phyt1 und Phyt2) in Abhängigkeit von der Enzymdosis (Angepasste Kurve: Modell 2). Um die Behandlungsstruktur zu berücksichtigen, muss nun das Modell erweitert werden. Die Besonderheit liegt hier in der Kontrolle, also die Behandlung bei Dosis Null. Diese Behandlung ist für beide Phytinvarianten relevant, da die beiden betreffenden Kurven durch denselben Punkt laufen müssen. Bei der Dosis x = 0 ist der Achsenabschnitt (x=0) = + Die Asymptote liegt bei (x=) = falls < 0 ist. Nun soll für beide Phytase-Behandlungen derselbe Achsenabschnitt gelten, während die Asymptote von der Behandlung abhängen kann. Daher ist folgende Reparametrisierung sinnvoll: (x=0) = + = = Das Modell lautet dann: (x) = + ( )exp(x). Nun können wir für die Asymptote einen Index i für die Behandlung einführen, ebenso wie für den Parameter , der bestimmt, wie schnell die Kurve ansteigt. Ausserdem führen wir den Index j ein für die verschiedenen Dosen. i(xj) = i+ ( i)exp(ixj). 2 wobei xj die j-te Dosis ist. Ohne Beschränkung der Allgemeinheit weisen wir die Kontrolle (xj = 0) der ersten Behandlung zu, also i = 1 für 'Phyt1' und 'Control' i = 2 für 'Phyt2 Dass diese Parametrisierung adäquat ist, sieht man durch Einsetzen von xj = 0 für die Kontrolle in die Modellgleichung: i(xj) = i+ ( i)exp(0) = Das Modell für die Kontrolle xi hängt also nicht von der Phytasebehandlung ab, wie es für eine adäquate Modellierung zu fordern ist. Zur weiteren statistischen Analyse betrachten wir eine Sequenz von Modellen, wobei wir mit dem einfachsten beginnen und sukzessive aufbauen. Das einfachste Modell beinhaltet denselben Kurvenverlauf für beide Phytinbehandlungen: (1) yijk = + ( i)exp(xj) + bk + eijk wobei yijk = k-te Wiederholung der i-ten Behandlung bei der j-ten Dosis bk = Blockeffekt der k-ten Wiederholung Lassen wir dagegen zu, dass die Kurvenverläufe sich zwischen den beiden Behandlungen unterscheiden dürfen, so lautet das Modell: (2) yijk = i + ( i)exp(ixj) + bk + eijk Man beachte, dass hier die Formparameter und nach der Behandlung indiziert sind. Beide Kurven haben also verschiedene Verläufe, haben allerdings denselben Achsenabschnitt (siehe oben). Um schliesslich die Güte der Anpassung dieses Modells zu prüfen, passen wir ein varianzanalytisches Modell an, welches jeder Behandlung einen eigenen Erwartungswert zuweist, ohne dass die Erwartungswerte verschiedener Behandlungen durch ein Regressionsmodell in Beziehung stehen. (3) yijk = ij + bk + eijk Für jedes der drei Modelle schätzen wir die Parameter mit der Methode der Kleinsten Quadrate und berechnen die Summe der Fehlerquadrate (SQFehler) sowie die zugehörigen Fehlerfreiheitsgrade (FGFehler). Falls das Exponentialmodell (2) an die Daten passt, sollten die SQFehler der Modelle (2) und (3) etwa gleich gross sein. Formal läßt sich die Nullhypothese H0: "Exponentialmodell passt an die Daten" 3 durch einen Vergleich der Modelle (2) und (3) prüfen. Hierbei ist Model (3) das allgemeinere, sog. "volle" Modell, während Modell (2) ein Spezialfall von Modell (3) ist, ein sog. "reduziertes" Modell. Unter der Nullhypothese sind volles und reduziertes Modell identisch. Unter der Nullhypothese folgt FVers SQ red Fehler SQ Fehler voll SQ FG voll Fehler FG red red Fehler voll Fehler FG Fehler voll einer F-Verteilung mit FGFehler FGFehler und FGFehler Freiheitsgraden. Dieses Resultat ist ganz allgemein gültig für den Vergleich eines vollen mit einem reduzierten linearen oder nichtlinearen Modell. Es ist exakt gültig für lineare Modelle und näherungsweise gültig für nichtlineare Modelle. Wegen dieser Allgemeingültigkeit ist dieses Resultat ausserordentlich wichtig und hilfreich. voll voll Angewendet auf den Vergleich der Modelle (2) und (3) nennt man diesen Test auch Anpassungstest (engl. Lack-of-fit-Test). Zeigt der Anpassungstest keine signifikanten Abweichungen vom exponentiellen Modell (2), können wir davon ausgehen, dass das exponentielle Modell passt. In diesem Fall können wir uns der Nullhypothese H0: Die Kurvenverläufe beider Phytinbehandlungen sind gleich Zuwenden. Diese prüfen wir durch einen Vergleich der Modelle (1) und (2) mit Hilfe des oben beschriebenen Tests. Im folgenden sind die Berechnungen wiedergebenen. Modell FGFehler SQFehler 60 58 50 144687 142256 130276 (1) yijk = + ( i)exp(xj) + bk + eijk (2) yijk = i + ( i)exp(ixj) + bk + eijk (3) yijk = ij + bk + eijk Test auf Anpassung des exponentiellen Modells (Vergleich der Modelle 2 und 3): FVers 144687 142256 60 58 142256 58 0,49558 p-Wert = 0,61177 Es gibt keine signifikante Abweichung von exponentiellen Modell, so dass wir fortan mit diesem Modell arbeiten können. Test auf Identität der beiden Regressionskurven (Vergleich der Modelle 1 und 2): Obs sq_voll fg_voll sq_red fg_red fg_zaehl 4 fg_nenn F_vers p_Wert 1 FVers 130276 50 142256 142256 130276 58 50 130276 50 58 8 50 0.57474 0.79358 0,57474 p-Wert = 0,79358 Der Test ist ebenfalls nicht signifikant, so dass beide Kurvenverläufe als identisch betrachtet werden können. Somit können keine Unterschiede zwischen den beiden Phytasebehandlungen nachgewiesen werden. Tab. : Schätzwerte der Modellparameter unter Modell (2). Parameter 1 2 1 2 Schätzwert 883.8 864.2 560.0 0.00628 0.00701 Std. Fehler Approximative 95% Vertrauensgrenzen Untere Obere 14.5200 13.8886 18.3206 0.00108 0.00129 854.7 836.4 523.3 0.00844 0.00959 912.9 892.0 596.6 0.00412 0.00444 Kodierung der Blockeffekte in PROC NLIN Die nichtlineare Regression kann mit der SAS Prozedur NLIN durchgeführt werden (siehe unten). Diese Prozedur hat keine CLASS Anweisung. Daher muss eine Dummy-Kodierung für die Blockeffekte verwendet werden: Block z1 z2 z3 z4 z1b1 z 2 b2 z 3b3 z 4 b4 1 2 3 4 5 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 b1 b2 b3 b3 b5 = b1 b2 b3 b4 Die Effekte b1 bis b4 sind die Effekte der Blöcke 1 bis 4. Der fünfte Blockeffekt ist definiert als b5 = b1 b2 b3 b4 Damit erfüllen die Blockeffekte die Summenrestriktion bk = 0 Die Blockeffekte b1 bis b4 können durch eine multiple lineare Regression auf die Dummy-Variablen z1 bis z4 geschätzt werden. Diese Regression ist in den nachfolgenden SAS-Anweisungen umgesetzt. 5 Für die Phytase-spezifischen Effekte und wird eine analoge Dummy-Kodierung durchgeführt (siehe SAS-Anweisungen). SAS-Anweisungen: * PHYTASE TRIAL*; *Treat: Nummer für Behandlung* *Block. Einteilung erfolgte in 5 Blöcke, wobei Block 5 nicht komplett ist* *Cage: Käfignummer 1-96 (jeweils 10 Tiere in einem Käfig)* *Product: Control -Kontrolldiät Phyt1, Phyt2, Phyt3 -3 verschieden Phytasen die in die Kontriolldiät eingemischt wurden MCP: Monocalciumphosphat* *Dose: Dosierung der Enzyme in Units/kg bzw. %uale Zulage MCP* *Gain: Zunahme in 20 Tagen in g* *Intake: Futteraufnahme* *AshR bzw. AshL: Zehenasche in mg/Knochen rechts bzw. links* ; data a; length Product$ 7; input Treat Block Cage Product Dose Gain Intake AshR AshL; datalines; 1 1 1 Control 0 440 670 12.2 14.4 2 1 2 Phyt1 100 685 988 18.1 23.0 3 1 3 Phyt1 200 794 1100 20.0 23.3 4 1 4 Phyt1 300 814 1112 22.4 24.1 5 1 5 Phyt1 500 840 1150 26.4 26.0 6 1 6 Phyt1 750 806 1101 26.3 26.3 7 1 7 Phyt1 1500 922 1232 28.0 27.7 8 1 8 Phyt2 100 789 1096 19.9 20.2 9 1 9 Phyt2 200 768 1058 22.7 21.9 10 1 10 Phyt2 300 800 1091 24.3 23.2 11 1 11 Phyt2 500 856 1154 25.6 24.7 12 1 12 Phyt2 750 852 1178 26.5 25.6 13 1 13 Phyt2 1500 859 1186 26.4 26.3 14 1 14 MCP 0.1 593 861 19.3 19.8 15 1 15 MCP 0.2 678 936 21.0 20.3 16 1 16 MCP 0.3 906 1210 26.9 25.7 17 1 17 MCP 0.5 790 1070 24.7 25.4 18 1 18 MCP 0.75 818 1120 28.2 28.5 19 1 19 MCP 1.5 808 1134 31.2 31.7 20 1 20 Phyt3 500 863 1172 25.5 25.5 1 2 21 Control 0 689 951 19.5 20.5 2 2 22 Phyt1 100 747 1045 18.8 20.2 3 2 23 Phyt1 200 796 1084 22.6 23.3 6 4 5 6 7 8 9 10 11 12 13 14 20.4 15 22.8 16 27.0 17 27.7 18 28.3 19 31.4 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 19.1 15 18.9 16 28.6 17 26.5 18 27.9 19 31.2 20 1 2 3 4 5 6 7 2 2 2 2 2 2 2 2 2 2 2 24 25 26 27 28 29 30 31 32 33 34 Phyt1 Phyt1 Phyt1 Phyt1 Phyt2 Phyt2 Phyt2 Phyt2 Phyt2 Phyt2 MCP 2 35 2 300 500 750 1500 100 200 300 500 750 1500 909 878 876 863 728 751 764 844 845 898 0.1 1228 1198 1206 1168 1018 1030 1048 1156 1162 1232 606 25.0 25.4 26.5 22.8 24.6 22.4 22.5 23.5 24.5 28.1 892 26.5 25.6 27.4 26.6 21.7 23.4 23.6 23.8 26.1 29.0 19.8 MCP 0.2 714 1020 21.9 36 MCP 0.3 840 1146 26.7 2 37 MCP 0.5 812 1150 28.4 2 38 MCP 0.75 790 1062 27.8 2 39 MCP 1.5 837 1126 30.9 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 Phyt3 500 821 Control 0 440 Phyt1 100 773 Phyt1 200 793 Phyt1 300 720 Phyt1 500 834 Phyt1 750 848 Phyt1 1500 925 Phyt2 100 736 Phyt2 200 789 Phyt2 300 805 Phyt2 500 859 Phyt2 750 828 Phyt2 1500 854 MCP 0.1 1102 642 1068 1109 968 1106 1130 1228 1076 1086 1108 1175 1130 1164 607 25.5 13.7 20.1 24.7 23.2 24.9 28.8 28.5 21.6 24.6 24.8 25.1 26.4 27.0 869 26.4 13.3 19.9 23.7 23.2 24.4 27.6 27.4 20.0 23.0 24.3 23.7 25.8 27.2 17.4 3 55 MCP 0.2 608 846 18.6 3 56 MCP 0.3 889 1195 29.7 3 57 MCP 0.5 790 1094 27.5 3 58 MCP 0.75 755 1056 28.5 3 59 MCP 1.5 822 1132 31.6 3 4 4 4 4 4 4 4 60 61 62 63 64 65 66 67 Phyt3 500 Control 0 Phyt1 100 Phyt1 200 Phyt1 300 Phyt1 500 Phyt1 750 Phyt1 1500 1150 962 1012 1083 1184 1154 1256 1354 26.2 20.3 20.9 25.7 25.1 30.4 27.1 29.4 25.5 18.5 20.3 25.3 24.2 26.5 25.1 27.7 7 834 654 730 792 866 857 935 993 8 4 68 Phyt2 100 696 962 9 4 69 Phyt2 200 788 1114 10 4 70 Phyt2 300 790 1088 11 4 71 Phyt2 500 824 1116 12 4 72 Phyt2 750 881 1213 13 4 73 Phyt2 1500 864 1192 14 4 74 MCP 0.1 592 18.7 15 4 75 MCP 0.2 659 20.7 16 4 76 MCP 0.3 771 26.3 17 4 77 MCP 0.5 818 27.5 18 4 78 MCP 0.75 919 31.0 19 4 79 MCP 1.5 921 33.4 20 4 80 Phyt3 500 833 1134 1 5 81 Control 0 508 727 2 5 82 Phyt1 100 673 948 3 5 83 Phyt1 200 785 1076 4 5 84 Phyt1 300 857 1160 5 5 85 Phyt1 500 840 1268 6 5 86 Phyt1 750 869 1164 7 5 87 Phyt1 1500 861 1168 8 5 88 Phyt2 100 712 998 9 5 89 Phyt2 200 803 1078 10 5 90 Phyt2 300 910 1236 11 5 91 Phyt2 500 904 1260 12 5 92 Phyt2 750 887 1218 13 5 93 Phyt2 1500 901 1238 20 5 94 Phyt3 500 800 1072 1 5 95 Control 0 503 728 1 5 96 Control 0 649 914 ; data b; set a; if product in ('Phyt1','Phyt2', 'Control'); dummy1=0; dummy2=0; if product in ('Phyt1','Control') then dummy1=1; if product='Phyt2' then dummy2=1; lackfit=dose; z1=0; z2=0; z3=0; z4=0; if block=1 then z1=1; if block=2 then z2=1; if block=3 then z3=1; if block=4 then z4=1; if block=5 then do; z1=-1; z2=-1; z3=-1;z4=-1; end; title 'model (1)'; proc nlin method=dud data=b; parms a=1000 d=500 c=-0.00659 b1=0 b2=0 b3=0 b4=0; 8 22.5 21.9 23.2 25.3 26.1 28.2 883 20.0 20.4 23.8 23.7 25.6 27.1 18.6 958 21.2 1051 27.8 1146 27.5 1268 31.6 1272 33.4 24.4 15.9 20.1 22.1 26.6 28.4 27.7 28.8 20.9 22.4 27.2 26.4 26.3 25.6 27.5 17.1 19.5 22.8 14.0 19.0 21.2 25.5 27.8 27.1 27.3 20.3 19.4 25.7 25.2 25.3 24.4 26.6 17.1 19.8 block=b1*z1+b2*z2+b3*z3+b4*z4; model gain=a + (d- a)*exp(c*dose) + block; run; title 'model (2)'; proc nlin method=gauss data=b maxiter=200; parms a1=1000 a2=1000 d=500 c1=-0.00659 c2=-0.00659 b1=0 b2=0 b3=0 b4=0; a=dummy1*a1+dummy2*a2; c=dummy1*c1+dummy2*c2; block=b1*z1+b2*z2+b3*z3+b4*z4; model gain=a +(d- a)*exp(c*dose) + block; run; title 'model (3)'; proc glm data=b; class block product dose; model gain=block product*dose; run; title 'Anpassungstest'; data; sq_voll=142256; fg_voll=58; sq_red=144687; fg_red=60; fg_zaehl=fg_red-fg_voll; fg_nenn=fg_voll; F_vers=(sq_red-sq_voll)/fg_zaehl/(sq_voll/fg_nenn); p_Wert=1-probf(f_vers, fg_zaehl, fg_nenn); proc print; run; title 'Vergleich der beiden Kurven'; data; sq_voll=130276; fg_voll=50; sq_red=142256; fg_red=58; fg_zaehl=fg_red-fg_voll; fg_nenn=fg_voll; F_vers=(sq_red-sq_voll)/fg_zaehl/(sq_voll/fg_nenn); p_Wert=1-probf(f_vers, fg_zaehl, fg_nenn); proc print; run; Polynomregression 9 Man kann dasselbe mit einer Polynomregression (quadratisch) versuchen. Allerdings ergibt sich hier ein signifikanter Lack-of-fit, da ein quadratisches Polynom keinen asymptotischen Verlauf zeigt und daher den beobachteten Verlauf nicht adäquat modellieren kann. title 'Polynomregression'; proc glm data=b; class block product lackfit; model gain=block dummy1*dose dummy2*dose product*lackfit; run; Output: Source DF Type I SS Mean Square F Value Pr > F Block dummy1*Dose Dose*dummy2 Product*lackfit 4 1 1 10 20313.2609 137993.7650 190258.4093 308899.6513 5078.3152 137993.7650 190258.4093 30889.9651 1.95 52.96 73.02 11.86 0.1168 <.0001 <.0001 <.0001 Lack-of-fit signifikant! 10