Re: Need help NIntegrating stepwise 3D probability density functions
- To: mathgroup at smc.vnet.net
- Subject: [mg114095] Re: Need help NIntegrating stepwise 3D probability density functions
- From: Barrie Stokes <Barrie.Stokes at newcastle.edu.au>
- Date: Tue, 23 Nov 2010 06:00:47 -0500 (EST)
Hi Jason
I admit I tried a few things before I tried the following:
thresholdDensity = 5/100;
NIntegrate[
PDF[ testDistribution, {x, y, z} ]*
UnitStep[ PDF[ testDistribution, {x, y, z} ] - thresholdDensity ]
, {x, -Infinity, Infinity}, {y, -Infinity, Infinity}, {z, -Infinity,
Infinity} , Method -> {"LocalAdaptive"}
]
thresholdDensity = 4/100;
NIntegrate[
PDF[ testDistribution, {x, y, z} ]*
UnitStep[ PDF[ testDistribution, {x, y, z} ] - thresholdDensity ]
, {x, -Infinity, Infinity}, {y, -Infinity, Infinity}, {z, -Infinity,
Infinity} , Method -> {"LocalAdaptive"}
]
thresholdDensity = 6/100;
NIntegrate[
PDF[ testDistribution, {x, y, z} ]*
UnitStep[ PDF[ testDistribution, {x, y, z} ] - thresholdDensity ]
, {x, -Infinity, Infinity}, {y, -Infinity, Infinity}, {z, -Infinity,
Infinity} , Method -> {"LocalAdaptive"}
]
thresholdDensity = 0/100;
NIntegrate[
PDF[ testDistribution, {x, y, z} ]*
UnitStep[ PDF[ testDistribution, {x, y, z} ] - thresholdDensity ]
, {x, -Infinity, Infinity}, {y, -Infinity, Infinity}, {z, -Infinity,
Infinity} , Method -> {"LocalAdaptive"}
]
The answers look like they are behaving correctly. I too read the documentation in UnitStep about "SymbolicProcessing" -> 0, and I only tried removing it on a whim. Go figure. Maybe Daniel Lichtblau can explain it for us?
Cheers
Barrie
>>> On 22/11/2010 at 11:40 pm, in message <201011221240.HAA06705 at smc.vnet.net>,
Jason Neuswanger <jrneuswanger at alaska.edu> wrote:
> I need to integrate 3D probability density functions over the region
> in which the probability density exceeds some threshold (the end goal
> being to calculate isopleths in 3D animal territories fit by kernel
> distributions).
>
> The simplest test case I could come up with is this:
>
> testDistribution =
> MultinormalDistribution[{1, 2,
> 4}, {{2, -1/4, 1/3}, {-1/4, 2/3, 1/5}, {1/3, 1/5, 1/2}}];
>
> thresholdDensity = 0.05;
>
> NIntegrate[
> PDF[testDistribution, {x, y, z}]*
> UnitStep[PDF[testDistribution, {x, y, z}] - thresholdDensity]
> , {x, -Infinity, Infinity}, {y, -Infinity, Infinity}, {z, -Infinity,
> Infinity}
> , Method -> {"LocalAdaptive", "SymbolicProcessing" -> 0}
> ]
>
> I've tried quite a few things and just can't get remotely sensible
> results. The analogous case in 1 dimension works just fine, shown
> below:
>
> testDistribution2 = NormalDistribution[];
>
> thresholdDensity2 = 0.35;
>
> NIntegrate[
> PDF[testDistribution2, {x}]*
> UnitStep[PDF[testDistribution2, {x}] - thresholdDensity2]
> , {x, -Infinity, Infinity}
> , Method -> {"LocalAdaptive", "SymbolicProcessing" -> 0}
> ]
>
> (* check answer using symbolic methods *)
>
> thresholdRoot =
> x /. FindRoot[
> PDF[testDistribution2, {x}] - thresholdDensity2, {x, 1}];
> Integrate[
> PDF[testDistribution2, {x}], {x, -thresholdRoot, thresholdRoot}]
>
> Any help here would be VERY much appreciated!