# 3.1: Normal Density Grid

### Description

normalGrid() is intended to be used for computation of the expected value of a function of a normal random variable. The function produces grid points and weights to be used for numerical integration.

### Usage

1 | ```
normalGrid(r=18, bounds=c(0,0), mu=0, sigma=1)
``` |

### Arguments

`r` |
Control for grid points as in Jennison and Turnbull (2000), Chapter 19; default is 18. Range: 1 to 80.
This might be changed by the user (e.g., |

`bounds` |
Range of integration. Real-valued vector of length 2. Default value of 0, 0 produces a range of + or - 6 standard deviations (6*sigma) from the mean (=mu). |

`mu` |
Mean of the desired normal distribution. |

`sigma` |
Standard deviation of the desired normal distribution. |

### Details

This is a utility function to provide a normal density function and a grid to integrate over as described by Jennison and Turnbull (2000), Chapter 19.
While integration can be performed over the real line or over any portion of it, the numerical integration does not extend beyond 6 standard deviations from the mean.
The grid used for integration uses equally spaced points over the middle of the distribution function, and spreads points further apart in the tails.
The values returned in `gridwgts`

may be used to integrate any function over the given grid, although the user should take care that the function integrated is not large in the tails of the grid where points are spread further apart.

### Value

`z` |
Grid points for numerical integration. |

`density` |
The standard normal density function evaluated at the values in |

`gridwgts` |
Simpson's rule weights for numerical integration on the grid in |

`wgts` |
Weights to be used with the grid in |

### Note

The manual is not linked to this help file, but is available in library/gsdesign/doc/gsDesignManual.pdf in the directory where R is installed.

### Author(s)

Keaven Anderson keaven\_anderson@merck.com

### References

Jennison C and Turnbull BW (2000), *Group Sequential Methods with Applications to Clinical Trials*.
Boca Raton: Chapman and Hall.

### Examples

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | ```
# standard normal distribution
x <- normalGrid(r=3)
plot(x$z, x$wgts)
# verify that numerical integration replicates sigma
# get grid points and weights
x <- normalGrid(mu=2, sigma=3)
# compute squared deviation from mean for grid points
dev <- (x$z-2)^2
# multiply squared deviations by integration weights and sum
sigma2 <- sum(dev * x$wgts)
# square root of sigma2 should be sigma (3)
sqrt(sigma2)
# do it again with larger r to increase accuracy
x <- normalGrid(r=22, mu=2, sigma=3)
sqrt(sum((x$z - 2)^2 * x$wgts))
# this can also be done by combining gridwgts and density
sqrt(sum((x$z - 2)^2 * x$gridwgts * x$density))
# integrate normal density and compare to built-in function
# to compute probability of being within 1 standard deviation
# of the mean
pnorm(1)-pnorm(-1)
x <- normalGrid(bounds=c(-1, 1))
sum(x$wgts)
sum(x$gridwgts * x$density)
# find expected sample size for default design with
# n.fix=1000
x <- gsDesign(n.fix=1000)
x
# set a prior distribution for theta
y <- normalGrid(r=3, mu=x$theta[2], sigma=x$theta[2] / 1.5)
z <- gsProbability(k=3, theta=y$z, n.I=x$n.I, a=x$lower$bound,
b=x$upper$bound)
z <- gsProbability(d=x, theta=y$z)
cat("Expected sample size averaged over normal\n prior distribution for theta with \n mu=",
x$theta[2], "sigma=", x$theta[2]/1.5, ":",
round(sum(z$en*y$wgt), 1), "\n")
plot(y$z, z$en, xlab="theta", ylab="E{N}",
main="Expected sample size for different theta values")
lines(y$z, z$en)
``` |