UP | HOME

Description and Classification of Hawaiian Adzes

Table of Contents

1 Project Tracking

1.1 Complete Adzes

1.1.1 Adze Weight

1.1.1.1 Quantiles
z <- quantile(x$weight)
t(z)
Quantiles of whole adze weights in grams
0%25%50%75%100%
0371419143466
1.1.1.2 Histogram
  • The weights of complete adze blades are plotted on a log scale to differentiate among the lighter blades
library(ggplot2) 
g <- ggplot(x, aes(x = weight)) 
g + geom_histogram(aes(y=..density..)) + geom_density(weight=2) + scale_x_log10()

r/adze_wt_log.png

Histogram of adze weights on a logarithmic scale

1.1.2 Adze Length

1.1.2.1 Quantiles
z <- quantile(x$length_poll)
t(z)
Quantiles of adze lengths in millimeters
0%25%50%75%100%
2561103205.75351
1.1.2.2 Histogram
  • The lengths of the measured adze blades are plotted on a log scale to differentiate among the smaller blades
library(ggplot2)
adze.len <- ggplot(x, aes(length_poll))
adze.len + geom_histogram(aes(y=..density..))  + geom_density(weight=2) + scale_x_log10()

r/adze_len_log.png

Histogram of adze lengths on a logarithmic scale

1.1.3 Edge Width

1.1.3.1 Quantiles
z <- quantile(x$width_edge)
t(z)
Quantiles of whole adze edge widths in millimeters
0%25%50%75%100%
1263653119
1.1.3.2 Histograms
  • Logarithmic scale
library(ggplot2)
adze.len <- ggplot(x, aes(width_edge))
adze.len + geom_histogram(aes(y=..density..)) + scale_x_log10() + geom_density(weight=2)

r/adze_cutting_edge_log.png

Histogram of cutting edge lengths on a logarithmic scale

  • Without the logarithmic scale
library(ggplot2)
adze.len <- ggplot(x, aes(width_edge))
adze.len + geom_histogram(aes(y=..density..)) + geom_density(weight=2)

r/adze_cutting_edge.png

Histogram of cutting edge lengths

1.1.4 Edge Angle

1.1.4.1 Quantiles of directly measured edge angles
z <- quantile(x$edge_angle)
t(z)
Quantiles of directly measured edge angles in degrees
0%25%50%75%100%
045506095
1.1.4.2 Histogram of directly measured edge angles
library(ggplot2)
adze.edge.angle <- ggplot(x, aes(edge_angle))
adze.edge.angle + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Measured cutting edge angle (degrees)")

r/adze_edge_angle.png

Histogram of directly measured cutting edge angles

1.1.4.3 Quantiles of calculated edge angles
z <- quantile(round((180/pi) * atan2(x$thickness_chin,x$length_chin),1))
t(z)
Quantiles of trigonometric cutting edge angle measure
0%25%50%75%100%
037.642.9548.876
1.1.4.4 Histogram of calculated edge angles
library(ggplot2)
a <- (180/pi) * atan2(x$thickness_chin,x$length_chin)
p <- ggplot(as.data.frame(a), aes(a))
p + geom_histogram(aes(y=..density..)) + geom_density(weight=2) +
xlab("Calculated cutting edge angle (degrees)")

r/adze_trig_angle.png

Histogram of trigonometric measure of cutting edge angle

1.1.5 Adze Type

Secondary adzes have been fashioned using another tool as the raw material. They represent recycling of broken tools.

table(x$adze_type)
Distribution of primary and secondary adzes
Var1Freq
primary630
secondary16

1.1.6 Bevel Shape

table(x$bevel_shape)
Bevel shape
Var1Freq
3
concave1
convex615
flat27

1.1.7 Edge Shape A

  • Viewed from the back of the blade
table(x$edge_shape_a)
Edge shape
Var1Freq
angled22
convex216
straight408

1.1.8 Edge Shape B

  • Viewed with the front superior
table(x$edge_shape_b)
Edge shape
Var1Freq
convex46
straight600

1.1.9 Face Reduction

  • Reduction of the face near the poll to facilitate lashing the blade to the handle
table(x$face_reduced)
Reduction of face
Var1Freq
1
false95
true550

1.2 Pairwise Comparison

  • Jenny comments "Were you thinking of running some stats too at the end – just to see in fact what attributes are most highly correlated with one another? This may allow us to define grouped functional variables."
  • This plot compares adze blade weight, length, edge width, shoulder width at front, shoulder width at back and shoulder thickness
whole.adze.metric <- x[,c(5,12,15,16,17,18)]
names(whole.adze.metric) <- c("wt","len","edge","front","back","thick")
pairs(whole.adze.metric)

r/adze_pairs.png

Pairwise comparison of six metric variables

1.3 Percussion

  • An attempt to measure percussive potential of blades

1.3.1 Scatterplot

  • Note that values above the smooth line have high percussive potential
library(ggplot2)
p <- ggplot(x, aes(x=width_edge,y=weight))
p + geom_point() + geom_smooth()

r/percussion.png

Scatterplot of measures used to calculate percussive potential

1.3.2 Percussive Index

  • defined as weight / width_edge
  • percussive potential increases to the right on the histogram
library(ggplot2)
adze.pi <- ggplot(x, aes(weight/width_edge))
adze.pi + geom_histogram(aes(y=..density..))  + scale_x_log10() + geom_density(weight=2)

r/percussion-index.png

1.3.3 Blade Plan Index

  • The blade plan index relates the shoulder width to the edge width
  • The plan can flare to maximize edge width, or narrow to minimize edge width
library(ggplot2)
p <- ggplot(x, aes(x=width_edge/mapply(max,width_shoulder_front,width_shoulder_back)))
p + geom_histogram(aes(y=..density..)) + geom_density(weight=2) + xlab("Blade Plan Index")

r/blade-plan.png

Histogram of blade plan

1.4 Indices Remarquables

  • These are from Jose Garanger's paper, Herminettes lithiques oceaniennes: Elements de typologie

1.4.1 Shoulder index

  • indice de la section transversale principale = \( \dfrac{R-7 \times 100}{R-9} \), where
    • R-7 = hauteur de la section transversale principale (thickness of the standard cross-section)
    • R-9 = largeur de la section transversale principale (width of the standard cross-section)
  • This is due to Buck (1944)
1.4.1.1 Quantiles
b <- (x$thickness_shoulder * 100) / mapply(max, x$width_shoulder_front, x$width_shoulder_back)
z <- round(quantile(b),1)
t(z)
Buck's shoulder index
0%25%50%75%100%
205066.787.9157.8
1.4.1.2 Scatterplot
library(ggplot2)
b <- ggplot(x, aes(x=width_shoulder_front, y=thickness_shoulder))
b + geom_point() + geom_smooth() + xlab("R-9") + ylab("R-7")

r/buck-basics.png

Scatterplot of measures used to calculate Buck's shoulder index

1.4.1.3 Histogram
library(ggplot2)
b <- ggplot(x, aes(x=((thickness_shoulder * 100) / mapply(max, width_shoulder_front, width_shoulder_back))))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Buck Shoulder Index")

r/buck-shoulder-hist.png

Histogram of Buck's shoulder index

1.4.2 Blade size

  • indice de la largeur de la lame = \( \dfrac{R-2 \times 100}{R-9} \), where
    • R-2 = longeur de la face frontale (blade length)
    • R-9 = largeur de la section transversale principale (width of the standard cross-section)
  • This is due to Green and Green (1960)
1.4.2.1 Quantiles
g <- (x$length_shoulder * 100) / mapply(max, x$width_shoulder_front, x$width_shoulder_back)
z <- round(quantile(g),1)
t(z)
Green and Green's blade size index
0%25%50%75%100%
0147.7194.9264.9510
1.4.2.2 Scatterplot
library(ggplot2)
g <- ggplot(x, aes(x=length_shoulder, y=width_shoulder_front))
g + geom_point() + geom_smooth() + xlab("R-2") + ylab("R-9")

r/green-basics.png

Scatterplot of measures used to calculate Green and Green's blade size index

1.4.2.3 Histogram
library(ggplot2)
b <- ggplot(x, aes(x=((length_shoulder * 100) / mapply(max, width_shoulder_front, width_shoulder_back))))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Blade Size Index")

r/blade-size-hist.png

1.4.3 Adze length

  • indice de la longeur de l'herminette = \( \dfrac{R-1 \times 100}{R-9} \)
    • R-1 = longeur maximum de l'herminette (length of the tool)
    • R-9 = largeur de la section transversale principale (width of the standard cross-section)
1.4.3.1 Quantiles
l <- (x$length_poll * 100) / mapply(max, x$width_shoulder_front, x$width_shoulder_back)
z <- round(quantile(l),1)
t(z)
0%25%50%75%100%
138.9259.1322.8424.1722.2
1.4.3.2 Scatterplot
library(ggplot2)
l <- ggplot(x, aes(x=length_poll, y=width_shoulder_front))
l + geom_point() + geom_smooth() + xlab("R-1") + ylab("R-9")

r/len-index-basics.png

Scatterplot of measures used to calculate the adze length index

1.4.3.3 Histogram
library(ggplot2)
b <- ggplot(x, aes(x=((length_poll * 100) / mapply(max, width_shoulder_front, width_shoulder_back))))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Adze Length Index")

r/adze-length-hist.png

1.4.4 Edge width

  • indice de longeur du tranchant = \( \dfrac{R-4 \times 100}{R-1} \), where
    • R-1 = longeur maximum de l'herminette (length of the tool)
    • R-4 = longeur du fil du tranchant (width of the edge)
  • This is due to Kellum (1966)
1.4.4.1 Quantiles
k <- (x$width_edge * 100) / x$length_poll
z <- round(quantile(k),1)
t(z)
0%25%50%75%100%
0.527.435.643.575.6
1.4.4.2 Scatterplot
library(ggplot2)
k <- ggplot(x, aes(x=width_edge, y=length_poll))
k + geom_point() + geom_smooth() + xlab("R-4") + ylab("R-1")

r/kellum-basics.png

Scatterplot of measures used to calculate Kellum's edge width index

1.4.4.3 Histogram
library(ggplot2)
b <- ggplot(x, aes(x=((width_edge * 100) / length_poll)))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Edge Width Index")

r/edge-width-hist.png

1.4.5 Butt length

  • indice de longeur du tranchant = \( \dfrac{R-1 \times 100}{R-3} \), where
    • R-1 = longeur maximum de l'herminette (length of the tool)
    • R-3 = longeur du talon (length of the butt)
1.4.5.1 Quantiles
  • Can't use this one without filtering for face_reduced
x <- y[y$face_reduced=='true',]
b <- round((x$length_poll * 100) / (x$length_poll - x$length_shoulder),1)
z <- quantile(b)
t(z)
Quantiles of butt length index
0%25%50%75%100%
100234268.3295.7566.7
1.4.5.2 Scatterplot
library(ggplot2)
x <- y[y$face_reduced=='true',]
b <- ggplot(x, aes(x=length_poll, y=length_shoulder))
b + geom_point() + geom_smooth() + xlab("R-1") + ylab("R-3")

r/butt-basics.png

Scatterplot of measures used to calculate the butt length index

1.4.5.3 Histogram
library(ggplot2)
x <- y[y$face_reduced=='true',]
b <- ggplot(x, aes(x=((length_poll * 100) / (length_poll - length_shoulder))))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Butt Length Index")

r/butt-length-hist.png

1.5 Exploratory Views

  • Adzes with chins thicker than shoulders prompted this series of graphs

1.5.1 Chin thickness index

  • Chin thickness / shoulder thickness
1.5.1.1 Quantiles
b <- x$thickness_chin / x$thickness_shoulder
z <- round(quantile(b),1)
t(z)
Chin thickness index
0%25%50%75%100%
00.60.70.81.6
1.5.1.2 Scatterplot
library(ggplot2)
b <- ggplot(x, aes(x=thickness_chin, y=thickness_shoulder))
b + geom_point() + geom_smooth() + xlab("Chin thickness") +
ylab("Shoulder thickness")

r/chin-thick-scatter.png

Scatterplot of measures used to calculate chin thickness index

1.5.1.3 Histogram
library(ggplot2)
b <- ggplot(x, aes(x=(thickness_chin/thickness_shoulder)))
b + geom_histogram(aes(y=..density..))  + geom_density(weight=2) +
xlab("Chin Thickness Index")

r/chin-thickness-hist.png

Histogram of the chin thickness index

1.6 Cross-section Classification

  • This is due to Emory, "East Polynesian Adze Relationships"
  • It is based on the relationship of front width (FW) at the shoulder to back width (BW) at the shoulder
  • Emory didn't partition exhaustively
  • The classification used here is:
    • Triangular: \( FW \leq 0.15 \times BW \)
    • Subtriangular: \( 0.15 \times BW < FW \leq 0.3 \times BW \)
    • Trapezoidal: \( 0.3 \times BW < FW \leq 0.8 \times BW \)
    • Quadrangular: \( 0.8 \times BW < FW \leq 1.2 \times BW \)
    • Reversed Trapezoidal: \( 1.2 \times BW < FW \leq 1.7 \times BW \)
    • Reversed Subtriangular: \( 1.7 \times BW < FW \leq 1.85 \times BW \)
    • Reversed Triangular: \( FW > 1.85 \times BW \)

1.6.1 Tabular View

x_section.breaks = c(0,0.15,0.3,0.8,1.2,1.7,1.85,1000000)
x_section.labels =
c("Triangular","Subtriangular","Trapezoidal","Quadrangular","Reversed_Trapezoidal", "Reversed_Subtriangular", "Reversed_Triangular")
x_section <- cut(x$width_shoulder_front / x$width_shoulder_back, x_section.breaks,
labels= x_section.labels)
table(x_section)
Classification by cross section
x_sectionFreq
Triangular1
Subtriangular0
Trapezoidal5
Quadrangular557
Reversed_Trapezoidal65
Reversed_Subtriangular1
Reversed_Triangular17

1.6.2 Dot chart

library(ggplot2)
e.breaks = c(0,0.15,0.3,0.8,1.2,1.7,1.85,1000000)
e.labels =
c("Triangular","Subtriangular","Trapezoidal","Quadrangular","Reversed_Trapezoidal", "Reversed_Subtriangular", "Reversed_Triangular")
e <- cut(x$width_shoulder_front / x$width_shoulder_back, e.breaks,
labels= e.labels)
e.d <- data.frame(table(e))
p <- ggplot(e.d, aes(Freq, e))
p + geom_point() + geom_segment(aes(x=0, xend=Freq, y=e, yend=e)) +
ylab("Class") + xlab("Frequency")

r/emory.png

Dot chart of cross-section classification

1.6.3 Diagnostic scatterplot

library(ggplot2)
e.breaks = c(0,0.15,0.3,0.8,1.2,1.7,1.85,1000000)
s = c(0.15,0.3,0.8,1.2,1.7,1.85)
i = rep.int(0,length(s))
ab <- data.frame(cbind(s,i))
n <- c("Triangular","Subtriangular","Trapezoidal","Quadrangular","Reversed_Trapezoidal", "Reversed_Subtriangular", "Reversed_Triangular")
e <- cut(x$width_shoulder_front / x$width_shoulder_back, e.breaks,
labels=n)
e.d <- data.frame(table(e))
p <- ggplot(x, aes(width_shoulder_back, width_shoulder_front))
p + geom_point() + geom_abline(aes(intercept = i, slope = s),
data=ab, linetype=3, color="grey50") + ylab("Front width (mm)") + xlab("Back width (mm)")

r/emory-diag.png

Diagnostic scatterplot of cross-section classification

1.6.4 Comments

  • Emory's system is designed to group the Hawaiian adzes in a way that sets them apart from adzes fashioned elsewhere in East Polynesia
  • Its object is the opposite of what we are trying to do
  • There is little variability in the relationship between shoulder width at front and back
  • Reversed triangular adzes tend to be small
1.6.4.1 Index of shoulder height
  • defined as thickness_shoulder / width_shoulder_front
library(ggplot2)
adze.shi <- ggplot(x, aes(thickness_shoulder/(width_shoulder_front + width_shoulder_back)))
adze.shi + geom_histogram(aes(y=..density..)) + geom_density(weight=2) +  xlab("Shoulder Height Index")

r/shoulder-height-index.png

Histogram of the shoulder height index

1.6.4.2 Shoulder height by adze size
  • In the lab it seems that tall adzes are typically large
  • Here, "large" is captured by the length of the tool
library(ggplot2)
b <- ggplot(x, aes(x=length_poll, y=thickness_shoulder/mapply(max, width_shoulder_front, width_shoulder_back)))
b + geom_point() + geom_smooth()  + xlab("Length") + ylab("Shoulder
Height Index")

r/shoulder-height-size.png

Scatterplot showing the relationship between adze blade length and shoulder height index

  • Here, "large" is captured by weight
library(ggplot2)
b <- ggplot(x, aes(x=weight,
y=thickness_shoulder/mapply(max,width_shoulder_front,width_shoulder_back)))
b + geom_point() + geom_smooth()  + xlab("Weight") + ylab("Shoulder
Height Index")

r/shoulder-height-weight.png

Scatterplot showing the relationship between adze blade weight and shoulder height index

1.7 Multivariate Views

1.7.1 Correspondence Analysis

  • A simple correspondence analysis on all metric variables
v <- c(5,12,15:18)
y <- x[,v]
z <- round((180/pi) * atan2(x$thickness_chin,x$length_chin),1)
y <- cbind(y,z)
library(ca)
plot(ca(y),labels=c(0,2))

r/ca-1.png

1.8 EDXRF

  • Peter Mills and Steven Lundblad are characterizing the chemical composition of the BPBM adzes using a non-destructive technique
  • Their laboratory produces its most precise results for the mid-Z trace elements Rb, Sr, Y, Zr, and Nb

1.8.1 Elemental Review

1.8.1.1 Sodium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(na2o_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab(expression(paste(Na[2],O," (%)")))

r/edxrf-na2o.png

Histogram of Na2O %

1.8.1.2 Magnesium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(mgo_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("MgO (%)")

r/edxrf-mgo.png

Histogram of MgO %

1.8.1.3 Aluminum
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(al2o3_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab(expression(paste(Al[2],O[3]," (%)")))

r/edxrf-al2o3.png

Histogram of Al2O3 %

1.8.1.4 Silicon
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(sio2_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab(expression(paste(SiO[2]," (%)")))

r/edxrf-sio2.png

Histogram of Silicon dioxide %

1.8.1.5 Potassium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(k2o_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab(expression(paste(K[2],O," (%)")))

r/edxrf-k2o.png

Histogram of K2O %

1.8.1.6 Calcium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(cao_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("CaO (%)")

r/edxrf-cao.png

Histogram of Calcium oxide %

1.8.1.7 Titanium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(tio2_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab(expression(paste(TiO[2]," (%)")))

r/edxrf-tio2.png

Histogram of Titanium dioxide %

1.8.1.8 Vanadium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(v_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("V (ppm)")

r/edxrf-v.png

Histogram of Vanadium in parts per million

1.8.1.9 Manganese
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(mno_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("MnO (ppm)")

r/edxrf-mno.png

Histogram of Manganese oxide in parts per million

1.8.1.10 Iron
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(fe_percent))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Fe (%)")

r/edxrf-fe.png

Histogram of Iron %

1.8.1.11 Nickel
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(ni_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Ni (ppm)")

r/edxrf-ni.png

Histogram of Nickel in parts per million

1.8.1.12 Copper
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(cu_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Cu (ppm)")

r/edxrf-cu.png

Histogram of Copper in parts per million

1.8.1.13 Zinc
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(zn_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Zn (ppm)")

r/edxrf-zn.png

Histogram of Zinc in parts per million

1.8.1.14 Rubidium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(rb_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Rb (ppm)")

r/edxrf-rb.png

Histogram of Rubidium in parts per million

1.8.1.15 Strontium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(sr_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Sr (ppm)")

r/edxrf-sr.png

Histogram of Strontium in parts per million

1.8.1.16 Yttrium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(y_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Y (ppm)")

r/edxrf-y.png

Histogram of Yttrium in parts per million

1.8.1.17 Zirconium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(zr_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Zr (ppm)")

r/edxrf-zr.png

Histogram of Zirconium in parts per million

1.8.1.18 Niobium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(nb_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Nb (ppm)")

r/edxrf-nb.png

Histogram of Niobium in parts per million

1.8.1.19 Barium
library(ggplot2)
x <- x[x$type == 'adze',]
y <- ggplot(x, aes(ba_ppm))
y + geom_histogram(aes(y=..density..)) +
geom_density(weight=2) + xlab("Ba (ppm)")

r/edxrf-ba.png

Histogram of Barium in parts per million

1.8.2 Major Elements

  • SiO2, Al2O3, Fe2O3, MgO, CaO, Na2O, K2O
1.8.2.1 Major Element Pairs
x <- x[x$type == 'adze',]
y <- x[,c(3,4,5,6,7,8,12)]
names(y) <- c("Na2O","MgO","Al2O3","SiO2","K2O","CaO","Fe")
pairs(y, labels=c(expression(paste(Na[2],O)),"MgO",expression(paste(Al[2],O[3])),expression(SiO[2]),expression(paste(K[2],O)),"CaO","Fe"))

r/edxrf-major-pairs.png

Pairs plot of major elements

1.8.2.2 Total Alkali Silica Diagram
  • Need to add classification
library(ggplot2)
x <- x[x$type == 'adze',]
b <- ggplot(x, aes(x=sio2_percent, y=(na2o_percent + k2o_percent)))
b + geom_point() + xlab(expression(SiO[2])) +
ylab(expression(paste(Na[2],O) + paste(K[2],O)))

r/edxrf-TAS.png

1.8.3 Minor Elements

1.8.3.1 Minor Element Pairs
x <- x[x$type == 'adze',]
y <- x[,c(10,11,13,14,15,16,17,18,19,20,21)]
pairs(y, labels=c("V","MnO","Ni","Cu","Zn","Rb","Sr","Y","Zr","Nb","Ba"))

r/edxrf-minor-pairs.png

Pairs plot of minor elements

1.8.3.2 Mid-Z trace element pairs
y <- x[x$lab == 'UH-Hilo',c(16,17,18,19,20)]
pairs(y, labels=c("Rb","Sr","Y","Zr","Nb"))

r/edxrf-mid-z-pairs.png

Pairs plot of mid-Z trace elements

1.8.4 Multiple ANOVA

  • Comparisons of UH and UH Hilo lab results for mid-Z trace elements and major elements both indicate inter-laboratory variability too great for direct comparability
1.8.4.1 Mid-Z trace elements
  • Multiple analysis of variance for mid-Z trace elements suggests that there are large differences between the UH and UH Hilo laboratories
  • The differences are especially pronounced for Niobium and Yttrium
  • Results suggest that analyses of mid-Z trace elements from these two labs are not directly comparable
y <- x[x$type=='quarry' & x$site=='Mauna Kea' & x$lab != 'UA',]
aggregate(y[,c("rb_ppm","sr_ppm","y_ppm","zr_ppm","nb_ppm")], list(lab=y$lab), median)


   Welcome to R!

      lab  rb_ppm   sr_ppm   y_ppm  zr_ppm  nb_ppm
1      UH 30.0000 538.0000 38.5000 313.500 43.5000
2 UH-Hilo 30.1035 576.7875 43.3335 323.575 36.4445
y <- x[x$type=='quarry' & x$site=='Mauna Kea' & x$lab != 'UA',]
y.manova <- manova(cbind(rb_ppm, sr_ppm, y_ppm, zr_ppm, nb_ppm) ~ lab, data=y)
summary.aov(y.manova)
   Welcome to R!

 Response rb_ppm :
             Df  Sum Sq Mean Sq F value Pr(>F)
lab           1     0.1     0.1  0.0055 0.9409
Residuals   820 13814.6    16.8               

 Response sr_ppm :
             Df  Sum Sq Mean Sq F value Pr(>F)
lab           1    3560    3560  2.6352 0.1049
Residuals   820 1107738    1351               

 Response y_ppm :
             Df  Sum Sq Mean Sq F value  Pr(>F)  
lab           1    48.9    48.9  3.3969 0.06568 .
Residuals   820 11806.1    14.4                  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

 Response zr_ppm :
             Df Sum Sq Mean Sq F value Pr(>F)
lab           1    247     247  0.3623 0.5474
Residuals   820 558779     681               

 Response nb_ppm :
             Df  Sum Sq Mean Sq F value   Pr(>F)   
lab           1    91.3    91.3  7.3289 0.006927 **
Residuals   820 10218.6    12.5                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

y <- x[x$type=='quarry' & x$site=='Mauna Kea' & x$lab != 'UA',]
aggregate(y[,c("na2o_percent","mgo_percent","al2o3_percent","sio2_percent","k2o_percent","cao_percent","tio2_percent")], list(lab=y$lab), median)

1.8.4.2 Major elements
  • There appears to be significant inter-laboratory differences for most major elements

   Welcome to R!

      lab na2o_percent mgo_percent al2o3_percent sio2_percent k2o_percent
1      UH       3.0900       5.020        13.490      48.2100       1.150
2 UH-Hilo       2.5705       3.196        12.897      45.1285       0.939
  cao_percent tio2_percent
1      9.3800        3.995
2      8.5075        3.631
y <- x[x$type=='quarry' & x$site=='Mauna Kea' & x$lab != 'UA',]
y.manova <- manova(cbind(na2o_percent,mgo_percent,al2o3_percent,sio2_percent,k2o_percent,cao_percent,tio2_percent) ~ lab, data=y)
summary.aov(y.manova)
   Welcome to R!

 Response na2o_percent :
             Df  Sum Sq Mean Sq F value  Pr(>F)  
lab           1   0.630   0.630  4.0835 0.04363 *
Residuals   820 126.544   0.154                  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

 Response mgo_percent :
             Df Sum Sq Mean Sq F value   Pr(>F)   
lab           1   6.32    6.32  8.0757 0.004597 **
Residuals   820 641.92    0.78                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

 Response al2o3_percent :
             Df  Sum Sq Mean Sq F value Pr(>F)
lab           1    1.16    1.16  0.6568 0.4179
Residuals   820 1452.06    1.77               

 Response sio2_percent :
             Df  Sum Sq Mean Sq F value Pr(>F)
lab           1    18.0    18.0  1.2246 0.2688
Residuals   820 12074.2    14.7               

 Response k2o_percent :
             Df  Sum Sq Mean Sq F value    Pr(>F)    
lab           1 0.09200 0.09200  34.159 7.327e-09 ***
Residuals   820 2.20842 0.00269                      
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

 Response cao_percent :
             Df  Sum Sq Mean Sq F value  Pr(>F)  
lab           1   1.311   1.311  4.9519 0.02633 *
Residuals   820 217.128   0.265                  
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

 Response tio2_percent :
             Df  Sum Sq Mean Sq F value   Pr(>F)   
lab           1  0.2955  0.2955  10.452 0.001274 **
Residuals   820 23.1860  0.0283                    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

1.8.5 Diagnostic Plots

  • The plots in this section currently show the adzes measured using EDXRF at Hilo against material from quarries contained in the spreadsheet QuarryData.xls
  • Bishop Museum adzes are indicated in the plots as 'unknown'
  • Quarry data reported by Sinton and Sinoto are not included because EDXRF data from Hilo are not directly comparable with them
  • Plots using the most reliably measured elements are followed by plots using elements measured with less precision
  • Note that issues of measurement reliability are unlikely to yield false positive results
1.8.5.1 Strontium Zirconium plot
  • This plot is a favorite of Mills and Lundblad, based on PCA of Mid-Z trace elements Rb, Sr, Y, Zr, and Nb
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=zr_ppm, y=sr_ppm, colour=site))
b + geom_point() + xlab("Zr (ppm)") + ylab("Sr (ppm)") + scale_colour_brewer(pal="Set1")

r/sr-zr-scatter.png

Scatterplot of Strontium and Zirconium

1.8.5.2 Stontium Niobium plot
 library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
 b <- ggplot(y, aes(x=nb_ppm, y=sr_ppm, colour=site))
 b + geom_point() + xlab("Nb (ppm)") + ylab("Sr (ppm)") + scale_colour_brewer(pal="Set1")

r/sr-nb-scatter.png

Scatterplot of Strontium and Niobium

1.8.5.3 Zirconium Niobium plot
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=zr_ppm, y=nb_ppm, colour=site))
b + geom_point() + xlab("Zr (ppm)") + ylab("Nb (ppm)") + scale_colour_brewer(pal="Set1")

r/nb-zr-scatter.png

Scatterplot of Zirconium and Niobium

1.8.5.4 Weisler and Kirch
  • This plot was used by Weisler and Kirch to source Cook Island polished adze flakes analyzed by EDXRF (M.I. Weisler and P.V. Kirch, Interisland and interarchipelago transfer of stone tools in prehistoric Polynesia, PNAS 93:1381-5)
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=nb_ppm/sr_ppm, y=zr_ppm/sr_ppm, colour=site))
b + geom_point() + xlab("Nb/Sr") + ylab("Zr/Sr") + scale_colour_brewer(pal="Set1")

r/nb-zr-sr-scatter.png

Scatterplot of Niobium to Strontium and Zirconium to Strontium ratios

1.8.5.5 Fractionation Trends
  • This plot is after Melinda Allen and Kevin Johnston's work in the Cook Islands
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=mgo_percent/(mgo_percent + fe_percent), y=zr_ppm/nb_ppm, colour=site))
b + geom_point() + xlab("Mg/(Mg+Fe)") + ylab("Zr/Nb") + scale_colour_brewer(pal="Set1")

r/fractionation.png

Fractionation trends at quarries and among adzes

1.8.5.6 Titanium Iron plot
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=tio2_percent, y=fe_percent, colour=site))
b + geom_point() + xlab(expression(paste(TiO[2]," (%)"))) + ylab("Fe (%)") + scale_colour_brewer(pal="Set1")

r/ti-fe-scatter.png

Scatterplot of Titanium and Iron

1.8.5.7 Titanium Zirconium plot
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=zr_ppm, y=tio2_percent, colour=site))
b + geom_point() + xlab("Zr (ppm)") + ylab(expression(paste(TiO[2]," (%)"))) + scale_colour_brewer(pal="Set1")

r/ti-zr-scatter.png

Scatterplot of Titanium and Zirconium

1.8.5.8 Zirconium Nickel plot
  • Note that Nickel usefully discriminates most of the O`ahu quarry rock from Hawai`i Island
library(ggplot2)
y <- x[x$lab=='UH-Hilo',]
b <- ggplot(y, aes(x=zr_ppm, y=ni_ppm, colour=site))
b + geom_point() + xlab("Zr (ppm)") + ylab("Ni (ppm)") + scale_colour_brewer(pal="Set1")

r/ni-zr-scatter.png

Scatterplot of Zirconium and Nickel

1.8.6 Discriminant analysis

  • Linear discriminant analysis appears to work with the EDXRF quarry data, using the mid-z trace elements Rubidium, Strontium, Yttrium, Zirconium, and Niobium
library(MASS)
y <- x[x$lab=='UH-Hilo' & x$type=='quarry',]
fit <- lda(site ~  rb_ppm + sr_ppm + y_ppm + zr_ppm + nb_ppm,
           data=y, na.action="na.omit", CV=TRUE)
# total percent correct
ct <- table(y$site, fit$class)
round(sum(diag(prop.table(ct))),4)

   Welcome to R!

[1] 0.9985
  • Linear discriminant analysis using jacknifed predictions indicates that the mid-z elements discriminate among the six quarries with a high degree of accuracy
library(MASS)
y <- x[x$lab=='UH-Hilo' & x$type=='quarry',]
fit <- lda(site ~  rb_ppm + sr_ppm + y_ppm + zr_ppm + nb_ppm,
           data=y, na.action="na.omit", CV=TRUE)
# Assess the accuracy of the prediction
# percent correct for each category
ct <- table(y$site, fit$class)
diag(prop.table(ct, 1))

   Welcome to R!

Haleakala   Kilauea Mauna Kea      Nu`u    Pololu  Waiahole 
1.0000000 0.9846154 1.0000000 1.0000000 1.0000000 0.9935484 
  • Here is how the linear discriminate analysis assigns adzes to quarries
library(MASS)
y <- x[x$lab=='UH-Hilo',]
fit <- lda(site ~  rb_ppm + sr_ppm + y_ppm + zr_ppm + nb_ppm,
           data=y, na.action="na.omit", CV=TRUE)
adzes <- y$site=='unknown'
cbind(BPBM=y$bpbm[adzes],round(fit$posterior[adzes,],2))
BPBMHaleakalaKilaueaMauna KeaNu`uPololuWaiaholeunknown
1985.134.01 adze00.10000.640.27
50-HA-1349-G-5 adze00.8500000.14
50-HA-900-P24-1 microadze0010000
50-M9-B8 38 #3 microadze00.040.13000.050.78
50-Ma-B8-41-TP4-8 microad00.8600000.14
50-MA-B9-26-5 adze1000000
H100 E10-2 microadze00.610000.250.14
H14 #3 adze00.730000.220.05
H14 23700.750000.040.2
H14 390010000
H14 40 adze00.900000.1
H14-266 adze00.710000.010.28
H14-267 adze0000010
H1E15 40010000
H2-5 (H52-5 on adze)00.340000.030.63
H2ETI-380001000
H2WT4-21 adze00.780000.130.09
H-47 A 1-1 microadze00.7300000.27
H50-5(Q3) adze00.70000.010.29
H8 F12-100.8600000.14
H8 Sur. 4 adze0010000
H9826 16-6 small adze00.70000.050.25
HA B22 65 D-102 microadze00.8600000.14
HA B22-22 TP3-2 microadze00.8800000.11
HA B22-65 B-65 1 microadz00.770000.030.2
HA B22-B5-B-66 narrow mic00.760000.030.2
HA-B22-65-G31 microadze000000.990.01
HA-D4-27-1 microadze00.830000.020.15
HA-D4-48-6 microadze00.580000.090.33
Haw 131 adze0010000
Haw 66 adze00.9300000.07
HAW130 adze0100000
HAW-167 adze00.750000.020.23
HAW-7 adze00.8200000.18
HAW-88 adze0000010
HAW-89 adze00.8600000.13
Haw-90 adze00.70000.010.29
HBC 524 adze00.8600000.14
HI E151 Frag 2 out of 200.9500000.05
HI G2-3 Frag 1 out of 200.5700000.42
HV-76 E9-7 microadze00.7800000.21
K 16 1 2-1 adze00.6800000.32
No Number 1 out of 2 adze00.790000.090.12
No Number 2 out of 2 adze0000010
S 27-3 1-664 adze0000100

1.9 Database Structure

names(x)
   Welcome to R!

 [1] "id"                   "identifier"           "storage_location"    
 [4] "site"                 "weight"               "adze_type"           
 [7] "bevel"                "edge_present"         "chin_present"        
[10] "shoulder_present"     "poll_present"         "length_poll"         
[13] "length_shoulder"      "length_chin"          "width_edge"          
[16] "width_shoulder_front" "width_shoulder_back"  "thickness_shoulder"  
[19] "thickness_chin"       "edge_angle"           "bevel_shape"         
[22] "edge_shape_a"         "edge_shape_b"         "face_reduced"        
[25] "butt_angle"           "color_value"          "complete"            
[28] "broken"               "reworked"             "polish"              
str(x)
   Welcome to R!

'data.frame':   646 obs. of  30 variables:
 $ id                  : int  1 2 3 4 6 7 13 14 17 18 ...
 $ identifier          : chr  "OA B1-30-29" "50-OA-B1-30-T8-1" "OA-B1-30-27" "50-OA-B1-30-T6-1" ...
 $ storage_location    : chr  "Tray 1" "Tray 1" "Tray 1" "Tray 1" ...
 $ site                : chr  "50-Oa-B1-30" "50-Oa-B1-30" "50-Oa-B1-30" "50-Oa-B1-30" ...
 $ weight              : int  111 32 35 54 45 24 31 29 40 245 ...
 $ adze_type           : chr  "primary" "secondary" "primary" "secondary" ...
 $ bevel               : chr  "single" "single" "single" "single" ...
 $ edge_present        : chr  "true" "true" "true" "true" ...
 $ chin_present        : chr  "true" "true" "true" "true" ...
 $ shoulder_present    : chr  "true" "true" "true" "true" ...
 $ poll_present        : chr  "true" "true" "true" "true" ...
 $ length_poll         : int  92 58 58 50 67 51 65 58 43 128 ...
 $ length_shoulder     : int  48 28 29 29 34 21 31 35 32 72 ...
 $ length_chin         : int  11 19 9 18 6 5 5 10 16 10 ...
 $ width_edge          : int  33 19 21 37 29 25 21 23 23 46 ...
 $ width_shoulder_front: int  29 18 21 36 27 22 17 20 21 45 ...
 $ width_shoulder_back : int  30 18 20 34 28 22 18 20 24 46 ...
 $ thickness_shoulder  : int  16 11 10 12 10 8 7 10 15 17 ...
 $ thickness_chin      : int  11 10 8 12 9 5 4 9 16 11 ...
 $ edge_angle          : int  36 35 36 35 36 34 34 34 35 38 ...
 $ bevel_shape         : chr  "convex" "convex" "convex" "convex" ...
 $ edge_shape_a        : chr  "straight" "straight" "straight" "straight" ...
 $ edge_shape_b        : chr  "straight" "straight" "straight" "straight" ...
 $ face_reduced        : chr  "true" "false" "true" "true" ...
 $ butt_angle          : int  10 0 10 0 0 0 14 0 0 8 ...
 $ color_value         : num  4 3 4 4 5 3 2.5 3 3 3 ...
 $ complete            : chr  "complete" "complete" "complete" "complete" ...
 $ broken              : chr  "" "" "" "edge and blade" ...
 $ reworked            : chr  "" "other" "" "other" ...
 $ polish              : chr  "present" "present" "present" "present" ...

1.10 Problems

1.10.1 Duplicate entries

  • Here is a list of duplicate entries and their storage locations
  • Need to delete duplicates
identifierstorage_locationn
100389511-100382
95119511-100382
95129511-100382
98129511-100382
Haw-131Tray 42
Haw-89Tray 42

1.10.2 Missing measures on whole adzes

  • Tool weight is missing
y = x[x$weight < 1,]
y[,c(2,3,5)]
identifierstorage_locationweight
C.1161C.303-C.11790
C.6090C.5501-C.60930
c.6034C.5501-C.60930
C.8290C.5501-C.60930
C.8297C.8290-83520
C.4505C.4504-C.49560
C.5488C.54880
  • Tool length is missing
y = x[x$length_poll < 1,]
y[,c(2,3,12)]
identifierstorage_locationlength_poll
  • Shoulder length is missing
y = x[x$length_shoulder < 1,]
y[,c(2,3,13)]
identifierstorage_locationlength_shoulder
B1159B.1096-B.11660
C.1772C.1772-C.18380
C.1674C.1671-C.17100
  • Chin length is missing
y = x[x$length_chin < 1,]
y[,c(2,3,14)]
identifierstorage_locationlength_chin
C.5490C.5488-54990
  • Edge width is missing
y = x[x$width_edge < 1,]
y[,c(2,3,15)]
identifierstorage_locationwidth_edge
  • Front shoulder width is missing
y = x[x$width_shoulder_front < 1,]
y[,c(2,3,16)]
identifierstorage_locationwidth_shoulder_front
  • Back shoulder width is missing
y = x[x$width_shoulder_back < 1,]
y[,c(2,3,17)]
identifierstorage_locationwidth_shoulder_back
  • Shoulder thickness is missing
y = x[x$thickness_shoulder < 1,]
y[,c(2,3,18)]
identifierstorage_locationthickness_shoulder
  • Chin thickness is missing
y = x[x$thickness_chin < 1,]
y[,c(2,3,19)]
identifierstorage_locationthickness_chin
C.5490C.5488-54990
  • Edge angle is missing
y = x[x$edge_angle < 1,]
y[,c(2,3,20)]
identifierstorage_locationedge_angle
C.1772C.1772-C.18380
C.1674C.1671-C.17100
c.6034C.5501-C.60930
C.5488C.54880
C.9183C.9180-840

Author: Thomas S. Dye

Date: 2010-12-24 06:19:05 HST

HTML generated by org-mode 7.4 in emacs 23