| localdepth {localdepth} | R Documentation |
The function evaluates the depth and the local depth for a set of points with respect to a dataset.
localdepth(x, y = NULL, tau, use = c("volume", "diameter"),
method = c("simplicial", "ellipsoid", "halfspace", "mahalanobis"),
type = c("exact", "approx"), nsamp = "all", nmax = 1,
tol=10^(-9), dimension=NULL, location=NULL, covariance=NULL)
x |
numeric; vector, dataframe or matrix. If x is a circular vector, a circular version is used. Avoid ties by wiggling the data. The function only issues a warning for ties |
y |
numeric; vector, dataframe or matrix with the same number of columns as x, or NULL. If NULL, x is used |
tau |
numeric; threshold value for the evaluation of the local depth. Use function quantile.localdepth to evaluate tau using a quantile of the size of the objects |
use |
character; the statistic used to measure the size of the objects. Currently, for method equal to "simplicial" or "ellipsoid" allowed statistics are "volume" and "diameter". For method equal to "mahalanobis" this parameter is not used and the only available statistic is pairwise Mahalanobis' distance |
method |
character; the type of (local) depth to be evaluated |
type |
character; how to evaluate membership. Only active for method="simplicial". See details. |
nsamp |
character or numeric; the number of objects that are considered. If "all", the size of all choose(NROW(x), NCOL(x)+1) objects is evaluated. Otherwise, a simple random sample with replacement of size nsamp is performed from the set of all possible objects. |
nmax |
numeric; maximum fraction (in the range (0,1]) of objects to be considered when nsamp is not equal to all. If nmax=1 the number of searched objects can reach the number of possible objects (choose(NROW(x), NCOL(x)+1) for simplicial and ellipsoid depth) |
tol |
numeric; tolerance parameter to be fixed depending on the machine precision. Used to decide membership of points located near to the boundary of the objects |
dimension |
numeric; only used with method="ellipsoid". It is the squared length of the ellipsoid semimajor axis. If dimension is NULL, it is set to NCOL(x) |
location |
NULL or a numeric vector; the NCOL(x) means vector used in method equal to "mahalanobis". If NULL, apply(x, 2, mean) is used |
covariance |
NULL or a numeric matrix; the NCOL(x)*NCOL(x) covariance matrix used in method equal to "mahalanobis". If NULL, cov(x) is used |
With method="simplicial" and type="exact", membership of the points in simplices is evaluated; when type="approx", an approximate membership function is used. See references below.
The function returns an object of class localdepth with the following components:
localdepth |
vector of the local depth values for the given tau |
depth |
vector of the depth values |
max.localdepth |
max(localdepth) |
max.depth |
max(depth) |
num |
vector with two components. num[1] gives the number of objects used for the evaluation of the depth; num[2] is the number of objects used for the evaluation of the local depth |
call |
match.call() result. Note that this is called from the internal function |
tau |
value of the corresponding input parameter |
use |
value of the corresponding input parameter |
tol |
value of the corresponding input parameter |
x |
value of the corresponding input parameter |
y |
value of the corresponding input parameter |
type |
value of the corresponding input parameter |
nsamp |
value of the corresponding input parameter |
method |
value of the corresponding input parameter |
Claudio Agostinelli and Mario Romanazzi
C. Agostinelli and M. Romanazzi (2007). Local depth of univariate distributions. Working paper n. 1/2007, Dipartimento di Statistica, Universita' Ca' Foscari, Venezia.
C. Agostinelli and M. Romanazzi (2008). Local depth of multidimensional data. Working paper n. 3/2008, Dipartimento di Statistica, Universita' Ca' Foscari, Venezia.
quantile.localdepth, plot.localdepth
# Iris Setosa dataset
data(iris)
setosa <- iris[iris$Species=="setosa",-5]
str(setosa)
n <- dim(setosa)[1];p <- dim(setosa)[2]
lab <- paste("U",1:n,sep="")
pairs(setosa)
# Wiggling data with gaussian error
set.seed(1234)
err <- matrix(c(rnorm(n,0,sd(setosa[,1])/1000),rnorm(n,0,sd(setosa[,2])/1000), rnorm(n,0,sd(setosa[,3])/1000),rnorm(n,0,sd(setosa[,4])/1000)),n,p,byrow=FALSE)
setosa1 <- setosa + as.data.frame(err)
## Not run:
## The following two lines may not run in your computer since all sizes are reported
qd <- quantile.localdepth(setosa1, probs=c(seq(0.01,0.09,0.01),seq(0.1,0.9,0.1)), use="diameter", method="simplicial", nsamp="all", size=TRUE)
qv <- quantile.localdepth(setosa1, probs=c(seq(0.01,0.09,0.01),seq(0.1,0.9,0.1)), use="volume", method="simplicial", nsamp="all",size=TRUE)
## End(Not run)
## Here we explore 10
qd <- quantile.localdepth(setosa1, probs=c(seq(0.01,0.09,0.01),seq(0.1,0.9,0.1)), use="diameter", method="simplicial", nsamp=211876, size=TRUE)
qv <- quantile.localdepth(setosa1, probs=c(seq(0.01,0.09,0.01),seq(0.1,0.9,0.1)), use="volume", method="simplicial", nsamp=211876,size=TRUE)
c(mean(qd$stats),median(qd$stats))
c(mean(qv$stats),median(qv$stats))
round(qd$quantile,2)
round(qv$quantile,8)
boxplot(qd$stats,names="Diameter",xlab="Simplex Size", horizontal=TRUE,main="Iris Setosa")
boxplot(qv$stats,names="Volume",xlab="Simplex Size", horizontal=TRUE,main="Iris Setosa")
plot(qd$stats,qv$stats,xlab="Simplex Diameter",ylab="Simplex Volume", main="Iris Setosa",pch=20)
# Simplicial global/local depth
sldv10 <- localdepth(setosa1,tau=qv$quantile[10],use="volume", method="simplicial", type="exact", nsamp="all") # requires a few minutes
str(sldv10)
sd10 <- sldv10$depth # simplicial depth
sld10 <- sldv10$localdepth # simplicial local depth (volume, 10
lab[sd10 == (p+1)/n] # convex hull vertices (25 points out of 50)
sdmax <- max(sd10);imax <- which.max(sd10);setosa[imax,] # deepest point
# DD-Plot
plot(sldv10, xlab="Simplicial Depth", ylab="Local Simplicial Depth", main="Iris Setosa",pch=20,ylim=c(0,1.02))
abline(a=0,b=1,lty="dashed")
# Mahalanobis Depth of Iris Versicolor wrt Iris Setosa
iversicolor <- iris[iris$Species == "versicolor",-5]
str(iversicolor)
set.seed(2345)
err <- matrix(c(rnorm(n,0,sd(iversicolor[,1])/1000),rnorm(n,0,sd(iversicolor[,2])/1000), rnorm(n,0,sd(iversicolor[,3])/1000),rnorm(n,0,sd(iversicolor[,4])/1000)), n,p,byrow=FALSE)
iversicolor1 <- iversicolor + as.data.frame(err)
qm <- quantile.localdepth(setosa1, probs=c(seq(0.01,0.09,0.01),seq(0.1,0.9,0.1)), method="mahalanobis",nsamp="all",size=TRUE)
round(qm$quantile,2)
vers <- localdepth(x=setosa1, y=iversicolor1, tau=qm$quantile[10], method="mahalanobis", nsamp="all")
str(vers)
round(vers$depth,6)
round(vers$localdepth,6) # identically zero