Fallstudie 5

Werbung
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
Herunterladen