Hello,
I'm currently working on a SAS Programm to fit my data of a germinating fungus to a given logistic function. This works fine for now, as the estimated values fit well to the data and predicted values based on that function seem acceptable. But when I try to plot this data the resulting graph looks like this:
Does anyone has any suggestions regarding this problem? I'm using SAS University Edition / SAS Studio 3.8
Thanks for your help!
The code used to create this graph is as follows:
data fungi;
input time germrate;
datalines;
9 0
9 0
9 0
9 0
9 0
9 0
9 0
9 0
12 1
12 1
12 1
9 1
12 2
12 3
12 4
12 4
12 5
12 5
15 11
15 18
15 20
15 21
9 22
15 24
15 27
15 27
9 28
9 28
9 29
9 31
9 33
15 34
15 37
18 43
18 45
18 52
18 52
18 54
15 55
18 58
18 58
18 63
18 71
21 72
12 73
21 74
12 74
12 76
12 76
12 77
21 78
15 79
12 80
21 81
15 82
21 83
21 84
21 84
24 85
15 85
24 86
21 86
24 87
21 87
21 87
24 88
24 90
24 90
24 90
21 90
18 90
18 91
15 91
24 92
24 92
21 92
21 92
21 92
18 92
24 93
24 93
18 93
15 93
24 94
24 94
24 95
24 96
18 96
21 97
18 98
96 99
96 100
96 99
96 98
96 97
96 100
;
proc nlin data=fungi;
parms Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
run;
proc nlin data=fungi method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean l95=l95ind u95=u95ind;
run;
proc print data=nlinout;
run;
data filler;
do time = 0 to 96 by 2;
predict=1;
output;
end;
run;
data fitthis;
set fungi filler;
run;
proc nlin data=fitthis method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean;
run;
proc print data=nlinout(where=(predict=1)); run;
proc sgplot data=nlinout;
scatter x=time y=germrate;
series x=time y=pred;
band upper=u95mean lower=l95mean x=time ;
run;
Hi @RobinN , you just need to sort your graph by time before you do the plot. Please see the example below.
data fungi;
input time germrate;
datalines;
9 0
9 0
9 0
9 0
9 0
9 0
9 0
9 0
12 1
12 1
12 1
9 1
12 2
12 3
12 4
12 4
12 5
12 5
15 11
15 18
15 20
15 21
9 22
15 24
15 27
15 27
9 28
9 28
9 29
9 31
9 33
15 34
15 37
18 43
18 45
18 52
18 52
18 54
15 55
18 58
18 58
18 63
18 71
21 72
12 73
21 74
12 74
12 76
12 76
12 77
21 78
15 79
12 80
21 81
15 82
21 83
21 84
21 84
24 85
15 85
24 86
21 86
24 87
21 87
21 87
24 88
24 90
24 90
24 90
21 90
18 90
18 91
15 91
24 92
24 92
21 92
21 92
21 92
18 92
24 93
24 93
18 93
15 93
24 94
24 94
24 95
24 96
18 96
21 97
18 98
96 99
96 100
96 99
96 98
96 97
96 100
;
proc nlin data=fungi;
parms Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
run;
proc nlin data=fungi method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean l95=l95ind u95=u95ind;
run;
proc print data=nlinout;
run;
data filler;
do time = 0 to 96 by 2;
predict=1;
output;
end;
run;
data fitthis;
set fungi filler;
run;
proc nlin data=fitthis method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean;
run;
proc print data=nlinout(where=(predict=1)); run;
proc sort data = nlinout;
by time;
run;
proc sgplot data=nlinout;
scatter x=time y=germrate;
series x=time y=pred;
band upper=u95mean lower=l95mean x=time ;
run;
Hi @RobinN , you just need to sort your graph by time before you do the plot. Please see the example below.
data fungi;
input time germrate;
datalines;
9 0
9 0
9 0
9 0
9 0
9 0
9 0
9 0
12 1
12 1
12 1
9 1
12 2
12 3
12 4
12 4
12 5
12 5
15 11
15 18
15 20
15 21
9 22
15 24
15 27
15 27
9 28
9 28
9 29
9 31
9 33
15 34
15 37
18 43
18 45
18 52
18 52
18 54
15 55
18 58
18 58
18 63
18 71
21 72
12 73
21 74
12 74
12 76
12 76
12 77
21 78
15 79
12 80
21 81
15 82
21 83
21 84
21 84
24 85
15 85
24 86
21 86
24 87
21 87
21 87
24 88
24 90
24 90
24 90
21 90
18 90
18 91
15 91
24 92
24 92
21 92
21 92
21 92
18 92
24 93
24 93
18 93
15 93
24 94
24 94
24 95
24 96
18 96
21 97
18 98
96 99
96 100
96 99
96 98
96 97
96 100
;
proc nlin data=fungi;
parms Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
run;
proc nlin data=fungi method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean l95=l95ind u95=u95ind;
run;
proc print data=nlinout;
run;
data filler;
do time = 0 to 96 by 2;
predict=1;
output;
end;
run;
data fitthis;
set fungi filler;
run;
proc nlin data=fitthis method=newton;
parameters Pmax=98 teta=15 ;d=6 ;
model germrate = Pmax*(1-(1/(1+((time/teta)**d))));
output out=nlinout predicted=pred l95m=l95mean u95m=u95mean;
run;
proc print data=nlinout(where=(predict=1)); run;
proc sort data = nlinout;
by time;
run;
proc sgplot data=nlinout;
scatter x=time y=germrate;
series x=time y=pred;
band upper=u95mean lower=l95mean x=time ;
run;
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.