Learn R Programming

Morpho (version 2.12)

permuvec: perfom permutation testing on angles and distances between subgroups of two major groups.

Description

perform permutation test on length and angle of the vectors connecting the subgroup means of two groups: e.g. compare if length and angle between sex related differences in two populations differ significantly.

Usage

permuvec(
  data,
  groups,
  subgroups = NULL,
  rounds = 9999,
  scale = TRUE,
  tol = 1e-10,
  mc.cores = parallel::detectCores()
)

Value

angle

angle between the vectors of the subgroups means

dist

distances between subgroups

meanvec

matrix containing the means of all four subgroups

permutangles

vector containing angles (in radians) from random permutation

permudists

vector containing distances from random permutation

p.angle

p-value of angle between residual vectors

p.dist

p-value of length difference between residual vectors

subdist

length of residual vectors connecting the subgroups

means.

Arguments

data

array or matrix containing data.

groups

factors of firs two grouping variables.

subgroups

factors of the subgrouping.

rounds

number of requested permutation rounds

scale

if TRUE: data will be scaled by pooled within group covarivance matrix. Otherwise Euclidean distance will be used for calculating distances.

tol

threshold for inverting covariance matrix.

mc.cores

integer: determines how many cores to use for the computation. The default is autodetect. But in case, it doesn't work as expected cores can be set manually.Parallel processing is disabled on Windows due to occasional errors.

Details

This function calculates means of all four subgroups and compares the residual vectors of the major grouping variables by angle and distance.

Examples

Run this code

data(boneData)
proc <- procSym(boneLM)
pop <- name2factor(boneLM,which=3)
sex <- name2factor(boneLM,which=4)
## use non scaled distances by setting \code{scale = FALSE}
## and only use first 10 PCs
perm <- permuvec(proc$PCscores[,1:10], groups=pop, subgroups=sex,
                 scale=FALSE, rounds=100, mc.cores=2)


## visualize if the amount of sexual dimorphism differs between
# (lenghts of vectors connecting population specific sex's averages)
# differs between European and Chines
hist(perm$permudist, xlim=c(0,0.1),main="measured vs. random distances",
     xlab="distances")
points(perm$dist,10,col=2,pch=19)#actual distance
text(perm$dist,15,label=paste("actual distance\n
     (p=",perm$p.dist,")"))
## not significant!!

## visualize if the direction of sexual dimorphism
# (angle between vectors connecting population specific sex's averages)
# differs between European and Chines
hist(perm$permutangles, main="measured vs. random angles",
     xlab="angles")
points(perm$angle,10,col=2,pch=19)#actual distance
text(perm$angle,15,label=paste("actual distance\n
    (p=",perm$p.angle,")"))
## also non-significant

Run the code above in your browser using DataLab