BookmarkSubscribeRSS Feed
peatjohnston
Calcite | Level 5
Hello all, I am new to this forum.

I am an ecologist who has been using sas for years to do basic statistics and data manipulations. I am interested in calculating a power function from a set of data in the form:

x y
1 28
2 40
3 45
4 48
5 52
6 54

Is there a way I can do this in proc reg? or is there a different procedure to calculate this? I have spend many hours wading through online documentation.

Thanks in advance.
peat
5 REPLIES 5
ArtC
Rhodochrosite | Level 12
Peat,
Please tell us a bit more about what you are looking for. Are you talking about the power of a test (1-beta)? If so:

The power of a statistical test can usually be calculated. It is not real hard to do, but you have to know the right formula and usually an inverse probability function.

In SAS/STAT you also now have the POWER procedure and the Power and Sample Size application.
Art
peatjohnston
Calcite | Level 5
Thanks Art,

I am not talking about the power of a test, though I am interested in sample size. These are cumulative species richness curves for which I want to associate a power function in the form:

y=a*x^b

For the original set of numbers I posted, the function is:

y=29.37x^0.358

I want to compare a series of these curves, by looking at the variation of the coefficients with each added sample 'x'. My question is how do I find these coefficients 'a' and 'b' from the given data.

Thanks again,

peat
SteveDenham
Jade | Level 19
Peat,

How about PROC NLIN?

Try this:
data one;
input x y;
cards;
1 28
2 40
3 45
4 48
5 52
6 54
;

proc nlin data=one method=marquardt hougaard;
parms a=3 b=2;
model y=a*x**b;
run;

I think the results will be straightforward.

Now if variances are not gaussian, or there is clustering or hierarchical issues, you may wish to consider PROC NLMIXED.

Steve Denham
peatjohnston
Calcite | Level 5
Steve,

I think this might work, but how would I output the coefficients into a new data set? I would be looking at getting the coefficients from hundreds of these measures, then plot the mean and + - 1 standard deviation for them.

Thanks,

peat
Cynthia_sas
SAS Super FREQ
Hi:
If you use the ODS TRACE statement, you can find out the name of the output object that contains the coefficient and the mean and the std. Then, once you have then output object name(s), you can create an output dataset that contains the data points. From there, it would be fairly easy to graph the points.

For example, if you modified the above PROC NLIN code to use ODS TRACE:
[pre]
ODS TRACE ON/ LABEL;
...PROC NLIN...
ODS TRACE OFF;
[/pre]

Then you would see in your SAS log:
[pre]
Output Added:
-------------
Name: IterHistory
Label: Iterative Phase
Template: stat.nlin.IterHistory
Path: Nlin.IterHistory
Label Path: 'The Nlin Procedure'.'Iterative Phase'
-------------
NOTE: Convergence criterion met.

Output Added:
-------------
Name: ConvergenceStatus
Label: Convergence Status
Template: Stat.nlin.ConvergenceStatus
Path: Nlin.ConvergenceStatus
Label Path: 'The Nlin Procedure'.'Convergence Status'
-------------

Output Added:
-------------
Name: EstSummary
Label: Estimation Summary
Template: stat.nlin.EstSummary
Path: Nlin.EstSummary
Label Path: 'The Nlin Procedure'.'Estimation Summary'
-------------

Output Added:
-------------
Name: ANOVA
Label: Summary Statistics : Dependent Variable y
Template: stat.nlin.ANOVA
Path: Nlin.ANOVA
Label Path: 'The Nlin Procedure'.'Summary Statistics : Dependent
Variable y'
-------------

Output Added:
-------------
Name: ParameterEstimates
Label: Parameter Summary
Template: stat.nlin.ParameterEstimates
Path: Nlin.ParameterEstimates
Label Path: 'The Nlin Procedure'.'Parameter Summary'
-------------

Output Added:
-------------
Name: CorrB
Label: Approximate Correlation Matrix
Template: stat.nlin.CorrB
Path: Nlin.CorrB
Label Path: 'The Nlin Procedure'.'Approximate Correlation Matrix'
-------------

[/pre]

Let's say that you wanted the Parameter Estimates output object, you could create it like this (now that we know the name from the TRACE output):

[pre]
ods output ParameterEstimates=work.parmest;
proc nlin data=one method=marquardt hougaard;
parms a=3 b=2;
model y=a*x**b;
run;

[/pre]

and the output dataset WORK.PARMEST would contain:
[pre]
Obs Parameter Estimate StdErr Alpha LowerCL UpperCL Skewness tValue Probt

1 a 30.1779 1.2717 0.05 26.6473 33.7086 0.0359 23.73 <.0001
2 b 0.3366 0.0301 0.05 0.2531 0.4201 0.0559 11.19 0.0004

[/pre]

ODS TRACE and ODS OUTPUT work with any SAS procedure that creates output objects, so if you find that PROC NLIN is not the procedure you need, then you only need to use ODS TRACE ON/OFF around your new procedure to find out the names of the output objects.

In addition, if you have SAS 9.2, you can try using the ODS GRAPHICS ON/OFF statements around your STAT procedure to see whether there are any automatic graphics associated with your procedure of choice.

cynthia

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 5 replies
  • 4441 views
  • 0 likes
  • 4 in conversation