Re: How to call BinomialDistribution from within a package?[2]
- To: mathgroup at smc.vnet.net
- Subject: [mg32242] Re: How to call BinomialDistribution from within a package?[2]
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Wed, 9 Jan 2002 03:17:40 -0500 (EST)
- References: <a1blv0$bd3$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On re-reading I notice that you need to remove bdist, cdf from
Block[{...}] since this is blocking the definitions that you made earlier.
Also, I missed a quote out from "Statistics`Common`DistributionsCommon`". I
have corrected this at (A) below.
But, perhaps of more interest, is that we can avoid having to look inside
needed packages to find *their* needed packages (as we have to do with
method (2) below) by beginning the package thus:
BeginPackage["MedianCI`"];
Needs["Statistics`DiscreteDistributions`"];
Needs["Statistics`DescriptiveStatistics`"];
This is called "hidden import" because it will not make the needed packages
"Statistics`DiscreteDistributions`" and "Statistics`DescriptiveStatistics`"
usable outside the package "MedianCI`" -- they couold of course be loaded
separately.
I should be interested to hear a arguments for and against the two
techniques.
(A) [earlier response - corrected at (**)]
I suspect that the problem arises as follows
If we lool at the packages
"Statistics`DiscreteDistributions`",
"Statistics`DescriptiveStatistics`"
we find that their working code begins with
BeginPackage["Statistics`DiscreteDistributions`",
"Statistics`DescriptiveStatistics`","Statistics`Common`DistributionsCommon`"
]
BeginPackage["Statistics`DescriptiveStatistics`","Statistics`DataManipulatio
n`"]
For them to work inside your package you need to include all *their* needed
packages as needed packages for your packages , thus:
BeginPackage["MedianCI`",
"Statistics`DiscreteDistributions`",
"Statistics`DescriptiveStatistics`",
"Statistics`Common`DistributionsCommon`", (**)
"Statistics`DataManipulation`"
]
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Merser" <merser at image.dk> wrote in message
news:a1blv0$bd3$1 at smc.vnet.net...
> I've tried to put the my function: MedianCI into a package.
>
> As this function works fine running as a plain notebook, it looks like
> BinomialDistribution[] isn't working when called from within a package?
>
> Does anybody has any idear what I'm doing wrong here ? I'm running
> Mathematica 4.0 on W2K.
> regards
> Soren
>
>
>
> BeginPackage["MedianCI`", "Statistics`DiscreteDistributions`",
> "Statistics`DescriptiveStatistics`"]
> Off[General::spell1];
>
> MedianCI::usage = "MedianCI[data, conf=.95] Returns median with CI at
> confidence level=95%"
>
> Begin["`Private`"]
>
> bdist[n_] := BinomialDistribution[n, .5]
> cdf[x_, n_] := CDF[bdist[n], x]
>
> Clear[MedianCI];
> MedianCI[data_, conf_:.95] :=
> Block[ {d, n, bdist, cdf, alfa, p, plo, phi, lo = 0, hi},
> d = Sort[data];
> n = Length[d];
>
>
>
> alfa = (1 - conf)/2;
>
> While[(p = cdf[lo, n]) < alfa,
> lo++;
> plo = p;
> ];
>
> hi = lo + 1;
> While[(phi = cdf[hi, n]) < (1 - alfa),
> hi++;
> ];
>
> m =Median[d];
> {{"Median", "CI low", "CI high", "Confidence level"},
> {m, d[[lo]], d[[hi + 1]], phi - plo}}
> ]
> End[]
> EndPackage[]
>
>
>
>
>
> test:
>
> Median[Range[11]] // TableForm
>
> {{"Median", "CI low", "CI high", "Confidence level"},
>
> {6, List, 2, -MedianCI`Private`plo +
> MedianCI`Private`CDF[BinomialDistribution[11, 0.5`], 1]}}
>
>
>
> correct:
>
> {{"Median", "CI low", "CI high", "Confidence level"},
>
> {6, 2, 10, 0.988281}}
>
>
>
>