Dear Nick
Unless I am mistaken 'predict' doesn't give the information I need and therefore your reply isn't particulary helpful. The code by Joe Hibe takes 3 arguements and does work. His code can easily be modified to take two arguements as one of the first lines of his code combines two of the arguements into one variable, but as you say it isn't suitable for conversion into a function because it drops all the variables and then creates a different structure for the dataset. My code does the calculation correctly and will provide the answer if the dataset is structured properly. But I know that it is simple and incorrect.
My question is, can the program be modified into a function that takes two arguements from each observation and returns a value to a new variable? If so then I can spend time working on correcting the program.
Thanks
Patrick
>>> [email protected] 21/12/2005 10:23:11 am >>>
Joe Hilbe has used the name -cpoisson- for
two quite different programs, for cumulative
and for censored Poisson.
The first, published in STB-1, sounds closer to what
you want, but it long predates
the -poisson- command, and it is not compatible
with that. Also, it -drop-s all data in memory
without warning!!!
My guess is that your own program needs a lot of
changes before it will work. You are putting constants in variables
(not illegal, but inefficient) and variables in constants
(usually fatal). The line
local cum = `cum' = ((exp(-poi_pred)*(poi_pred^`i'))/`fact')
even after correcting the second = to + is not
going to work the way you want it to.
I recommend keeping much closer to what -predict-
can supply for you.
Nick
[email protected]
Patrick McElduff
> Hi Nick
>
> What I am attempting to do (and there may be a much more
> simple solution) is to calculate the exact probability of
> observing a value of x or greater given that I expect to
> observe mu. The value of mu comes from a poisson regression
> and is potentially different for each observed value.
>
> The code that I believe works is:
>
> generate temp = 0
>
> local i = 0
> local cum = 0
> generate prob = 0
>
> while `i' <= cases {
> local j = 1
> local fact = 1
>
> while `j' <= `i' {
> local fact = `fact' * `j'
> local j = `j' + 1
> }
>
> local cum = `cum' = ((exp(-poi_pred)*(poi_pred^`i'))/`fact')
> local i = `i' + 1
> replace prob = 1 - `cum' if `i' == cases & cases ~= 0
> replace prob = 1 if cases == 0
> }
>
> There is also a program called cpoisson by Joseph Hilbe that
> can by easily modified to work for my scenario but it doesn't
> seem to return the answer the way I need it to.
> >>> [email protected] 21/12/2005 8:46:33 am >>>
> You can't write a program with exactly
> this syntax. You could write an -egen-
> function.
>
> If you want a new variable as output,
> why this question?
>
> I could start speculating on what you might mean,
> but better that you should tell us much more.
>
> Indeed, please show us your program.
>
> Nick
> [email protected]
>
> Patrick McElduff
>
> > I want to write a program that has two arguements and
> > returns a value so that I can use it in the form:
> >
> > generate temp = program(var1 var2)
> >
> > I have written the guts of the program to do the work but I
> > don't know how to get the input and output in the form I want.
> >
> > Could you please tell me where I should start looking.
>
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/