Type: | Package |
Title: | Scott-Knott for Forensic Glass Analysis |
Version: | 0.1.1 |
Maintainer: | Toby Hayward <tobyhayward13@gmail.com> |
Description: | In forensics, it is common and effective practice to analyse glass fragments from the scene and suspects to gain evidence of placing a suspect at the crime scene. This kind of analysis involves comparing the physical and chemical attributes of glass fragments that exist on both the person and at the crime scene, and assessing the significance in a likeness that they share. The package implements the Scott-Knott Modification 2 algorithm (SKM2) (Christopher M. Triggs and James M. Curran and John S. Buckleton and Kevan A.J. Walsh (1997) <doi:10.1016/S0379-0738(96)02037-3> "The grouping problem in forensic glass analysis: a divisive approach", Forensic Science International, 85(1), 1–14) for small sample glass fragment analysis using the refractive index (ri) of a set of glass samples. It also includes an experimental multivariate analog to the Scott-Knott algorithm for similar analysis on glass samples with multiple chemical concentration variables and multiple samples of the same item; testing against the Hotellings T^2 distribution (J.M. Curran and C.M. Triggs and J.R. Almirall and J.S. Buckleton and K.A.J. Walsh (1997) <doi:10.1016/S1355-0306(97)72197-X> "The interpretation of elemental composition measurements from forensic glass evidence", Science & Justice, 37(4), 241–244). |
License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
BugReports: | https://github.com/tobyhayward13/SCI118UOA_ForensicGlassAnalysis/issues |
URL: | https://github.com/tobyhayward13/SCI118UOA_ForensicGlassAnalysis |
Encoding: | UTF-8 |
LazyData: | true |
Depends: | R (≥ 2.10) |
RoxygenNote: | 7.2.3 |
LinkingTo: | Rcpp |
Imports: | Rcpp |
NeedsCompilation: | yes |
Packaged: | 2023-01-29 00:58:20 UTC; tobiw |
Author: | Toby Hayward [aut, cre] (Main developer and maintainer of the package.), James Curran [aut, ctb] (Supervised and contributed to the development of the package.), Lewis Kendall-Jones [ctb] (Wrote and supported the development of the C++ code.) |
Repository: | CRAN |
Date/Publication: | 2023-01-30 13:00:02 UTC |
Calculate the significance threshold for Lambda.
Description
For a given significance value, this function uses critical values determined from simulated data formed on 1 million arrays, and returns the quantile estimated at that significance level. For values of k > 20, it assumes a chi squared distribution with k/(pi - 2) degrees of freedom.
Usage
calculate_lambda_threshold(k, alpha)
Arguments
k |
Number of indices. |
alpha |
Level of significance. |
Value
A 100(1-alpha)% quantile estimate from the distribution of Lambda.
Calculate B0
Description
Calculates the B0 value for a given numeric vector of values; assuming they're appropriate values corresponding to glass fragment refractive indices.
Usage
find_B0(arr)
Arguments
arr |
vector of refractive indices. |
Value
A numeric corresponding to the maximum between-sum-of-squares estimate from the sample.
Calculate T0 for a given list of glass fragments and features.
Description
Calculates the "T0" value (the split corresponding to the maximum value of T^2) for a given list of data sets corresponding to glass fragment features assuming they're appropriate values corresponding to glass fragment features.
Usage
find_T0(data, i = 1, j = length(data))
Arguments
data |
list of glass fragment chemical (or otherwise) features. |
i |
Starting element (default = 1) |
j |
Ending element (default = length(array)) |
Value
A numeric corresponding to the maximum between-sum-of-squares estimate from the sample.
Calculate Hotelling's T^2 Statistic for two independent multivariate samples.
Description
Calculate Hotelling's T^2 Statistic for two independent multivariate samples.
Usage
find_T2(d1, d2)
Arguments
d1 |
matrix or data.frame type object containing the multivariate data for the first sample. |
d2 |
matrix or data.frame type object containing the multivariate data for the second sample. |
Value
T^2 value for the two objects.
Generate a test array of Glass-Fragment Refractive Indices.
Description
Returns a vector of randomly generated refractive indices from a expected normal distribution of glass fragments.
Usage
generate_indices(n = 10, .sd_multi = 1)
Arguments
n |
Number of refractive indices to generate. |
.sd_multi |
Scale factor of the standard deviation. Greater values imply more variance in the random sample. |
Value
A vector of randomly generated RIs.
Examples
test_ris = generate_indices(8)
partition(test_ris)
test_ris_varied = generate_indices(.sd_multi = 5)
partition(test_ris_varied)
glass
Description
Glass composition data for seven elements from 200 glass items.
Usage
data(glass)
Format
a 'data.frame' with 2400 rows and 9 columns.
- item
factor
200 levels - which item the measurements came from
- fragment
factor
4 levels - which of the four fragments from each item the observations were made upon
- logNaO
numeric
log of sodium concentration to oxygen concentration
- logMgO
numeric
log of magnesium concentration to oxygen concentration
- logAlO
numeric
log of aluminium concentration to oxygen concentration
- logSiO
numeric
log of silicon concentration to oxygen concentration
- logKO
numeric
log of potassium concentration to oxygen concentration
- logCaO
numeric
log of calcium concentration to oxygen concentration
- logFeO
numeric
log of iron concentration to oxygen concentration
Details
These data are from Grzegorz (Greg) Zadora at the [Institute of Forensic Research](http://ies.krakow.pl/) in Krakow, Poland. They are the log of the ratios of each element to oxygen, so logNaO is the log(10) of the Sodium to Oxygen ratio, and logAlO is the log of the Aluminium to Oxygen ratio. The instrumental method was SEM-EDX.
The 'item' indicates the object the glass came from. The levels for each item are unique to that item. The 'fragment' can be considered a sub-item. When collecting these observations Greg took a glass object, say a jam jar, he would then break it, and extract four fragments. Each fragment would be measured three times upon different parts of that fragment. The fragment labels are repeated, so, for example, fragment "f1" from item "s2" has nothing whatsoever to do with fragment "f1" from item "s101".
For two level models use 'item' as the lower level - three level models can use the additional information from the individual fragments.
Source
Grzegorz Zadora [Institute of Forensic Research](http://ies.krakow.pl/), Krakow, Poland.
References
Aitken, C.G.G. Zadora, G. & Lucy, D. (2007) A Two-Level Model for Evidence Evaluation. Journal of Forensic Sciences: 52(2); 412-419.
glass2
Description
Glass Fragment Elemental Composition Data on 15 variables.
Usage
data(glass2)
Format
a 'data.frame' with 16 rows and 16 columns.
- item
factor
761 levels - which item the measurements came from
- Li7
numeric
log of lithium concentration
- Mg25
numeric
log of magnesium concentration
- Al27
numeric
log of aluminium concentration
- K39
numeric
log of potassium concentration
- Ti49
numeric
log of titanium concentration
- Mn55
numeric
log of manganese concentration
- Fe57
numeric
log of iron concentration
- Rb85
numeric
log of rubidium concentration
- Sr88
numeric
log of strontium concentration
- Zr90
numeric
log of zirconium concentration
- Ba137
numeric
log of barium concentration
- La139
numeric
log of lanthanum concentration
- Ce140
numeric
log of cerium concentration
- Nd146
numeric
log of neodymium concentration
- Pb208
numeric
log of lead concentration
Details
Log transformed example casework data
Source
Almirall, Jose; Akmeemana, Anuradha, 2022, "casework.tab", Shiny Glass Application, https://doi.org/10.34703/gzx1-9v95/OB8BS9/CP6WXP, FIU Research Data Portal, V2, UNF:6:jQxEQCGZVvlWtc6owbtp+A== [fileUNF]
References
Anuradha Akmeemana, R. C., Jose Almirall, The Calculation of Calibrated Likelihood Ratios (LRs) for Glass Using a Multivariate Kernel Density Model: Introducing a User-Friendly Graphical User Interface (GUI). In American Academy of Forensic Science, Anaheim, CA, 2020.
has.children
Description
For internal use only. Determines if a node in the Partition tree has a child.
Usage
has.children(part)
Arguments
part |
Node in partition Tree. |
Value
Logical determining if the node has any children.
Order a list of data frames containing numerical columns by their euclidean distance to the mean.
Description
Meant for internal use only.
Usage
order_euclid(alist)
Arguments
alist |
A list of data frames. |
Value
A list of data frames.
Create Partitions of an RI array.
Description
Partitions the array of assumed glass fragment refractive indices into statistically significant groups.
Usage
partition(array, alpha = 0.05, .debug = FALSE)
Arguments
array |
Vector of refractive indices. |
alpha |
Significance parameter "[0,1]". Higher values are more likely to partition the array further. |
.debug |
Runs debugging. |
Value
sk_partition_tree
Examples
set.seed(123)
ris = generate_indices(8, 4)
part = partition(ris)
plot(part)
part$groups
Create Partitions of a multivariate array of objects.
Description
Partitions the array of assumed glass fragment chemical compositions and features into statistically significant groups.
Usage
partition.multi(data, alpha = 0.05, .debug = FALSE)
Arguments
data |
A list of data.frames or matrices corresponding to individual observations of glass fragment features. |
alpha |
Significance parameter "[0,1]". Higher values are more likely to partition the array further. |
.debug |
Runs debugging. |
Value
A list of groupings and the tree formed.
Examples
test.data = prepare_data(glass, 1)[1:3]
part = partition.multi(test.data)
plot(part)
set.seed(123)
test.data.random = prepare_data(glass, 1)
test.data.random = test.data.random[sample(1:length(test.data.random), 5)]
part = partition.multi(test.data.random)
part$groups
Plot S3method for objects of type "sk_partition_tree".
Description
S3method for plotting the resulting tree formed by the partitioning algorithms in the SK4FGA package.
Usage
## S3 method for class 'sk_partition_tree'
plot(x, ...)
Arguments
x |
Output from the function "partition()" |
... |
Extra details for the plot. Unused. |
Value
Plot of the decision tree that is formed by the sk_partition_tree object returned by partition and partition.multi.
Examples
data = generate_indices()
part = partition(data)
plot.sk_partition_tree(part)
data(glass)
data.multi = prepare_data(glass, 1)[1:3]
part = partition.multi(data.multi)
plot(part)
prepare_data
Description
Prepare a data file that is in standard form for partition.multi.
Usage
prepare_data(data, label = NA)
Arguments
data |
Inputted data.frame. |
label |
Column corresponding to the label to be grouped by. |
Value
A list of split data.
Calculate the Probability for a given T^2 statistic.
Description
Calculate the Probability for a given T^2 statistic.
Usage
ptsquared(t, n1, n2, p)
Arguments
t |
T^2 statistic. |
n1 |
Number of observations in first sample. |
n2 |
Number of observations in second sample. |
p |
Number of parameters. |
Value
A probability corresponding to a given T^2 statistic and for given arguments.
ungroup.partition
Description
Ungroups the tree object in the output from partition()
Usage
ungroup.partition(tree)
Arguments
tree |
tree object returned from partition() |
Value
A list object containing the indices of the
vehicle.glass
Description
FIU Vehicle Glass Database V2.0
Usage
data(vehicle.glass)
Format
a 'data.frame' with 6858 rows and 16 columns.
- item
factor
761 levels - which item the measurements came from
- Li7
numeric
log of lithium concentration
- Mg25
numeric
log of magnesium concentration
- Al27
numeric
log of aluminium concentration
- K39
numeric
log of potassium concentration
- Ti49
numeric
log of titanium concentration
- Mn55
numeric
log of manganese concentration
- Fe57
numeric
log of iron concentration
- Rb85
numeric
log of rubidium concentration
- Sr88
numeric
log of strontium concentration
- Zr90
numeric
log of zirconium concentration
- Ba137
numeric
log of barium concentration
- La139
numeric
log of lanthanum concentration
- Ce140
numeric
log of cerium concentration
- Nd146
numeric
log of neodymium concentration
- Pb208
numeric
log of lead concentration
Details
This freely available research-based database consists of 762 samples of various vehicle glass (windshield, passenger side, driver side, etc.). The samples span various makes and models, and range in year from 2004-2019. All samples were collected from the M&M salvage yard in Ruckersville, VA.
Source
Almirall, Jose; Akmeemana, Anuradha, 2022, "FIU Vehicle Glass Database V2.0.tab", Shiny Glass Application, https://doi.org/10.34703/gzx1-9v95/OB8BS9/XGH0IO, FIU Research Data Portal, V2, UNF:6:YDbwWISU04S+UCtb7aRoBQ== [fileUNF]
References
Anuradha Akmeemana, R. C., Jose Almirall, The Calculation of Calibrated Likelihood Ratios (LRs) for Glass Using a Multivariate Kernel Density Model: Introducing a User-Friendly Graphical User Interface (GUI). In American Academy of Forensic Science, Anaheim, CA, 2020.