We use the readxl package to import data from sheets in “4NP Standard Curve and Data.xlsx”.
percoc <- read_excel("4NP Standard Curve and Data.xlsx",
sheet = "Data_Complete_%OC",
skip = 2)
## New names:
## * `Mass of dust per trial (g)` -> `Mass of dust per trial (g)...5`
## * `4NP in trial (mg)` -> `4NP in trial (mg)...6`
## * `Mass released (mg)` -> `Mass released (mg)...7`
## * `%released` -> `%released...8`
## * `Mass of dust per trial (g)` -> `Mass of dust per trial (g)...9`
## * ...
names(percoc)
## [1] "Days" "Mass dosed"
## [3] "Mass dust dosed(g)" "Conc on dust (mg/g)"
## [5] "Mass of dust per trial (g)...5" "4NP in trial (mg)...6"
## [7] "Mass released (mg)...7" "%released...8"
## [9] "Mass of dust per trial (g)...9" "4NP in trial (mg)...10"
## [11] "Mass released (mg)...11" "%released...12"
## [13] "Mass of dust per trial (g)...13" "4NP in trial (mg)...14"
## [15] "Mass released (mg)...15" "%released...16"
## [17] "Mass of dust per trial (g)...17" "4NP in trial (mg)...18"
## [19] "Mass released (mg)...19" "%released...20"
percoc.4perc <- percoc[, c(1:4,5:8)]
names(percoc.4perc) <- c("Days", "Mass_Dosed", "Dust_Massed_Dosed", "Conc_On_Dust", "Mass_Of_Dust_Per_Trial", "FourNP_In_Trial", "Mass_Released", "Perc_Released")
percoc.4perc$Perc_OC <- 4
percoc.10perc <- percoc[, c(1:4,9:12)]
names(percoc.10perc) <- c("Days", "Mass_Dosed", "Dust_Massed_Dosed", "Conc_On_Dust", "Mass_Of_Dust_Per_Trial", "FourNP_In_Trial", "Mass_Released", "Perc_Released")
percoc.10perc$Perc_OC <- 10
percoc.50perc <- percoc[, c(1:4,13:16)]
names(percoc.50perc) <- c("Days", "Mass_Dosed", "Dust_Massed_Dosed", "Conc_On_Dust", "Mass_Of_Dust_Per_Trial", "FourNP_In_Trial", "Mass_Released", "Perc_Released")
percoc.50perc$Perc_OC <- 50
percoc.70perc <- percoc[, c(1:4,17:20)]
names(percoc.70perc) <- c("Days", "Mass_Dosed", "Dust_Massed_Dosed", "Conc_On_Dust", "Mass_Of_Dust_Per_Trial", "FourNP_In_Trial", "Mass_Released", "Perc_Released")
percoc.70perc$Perc_OC <- 70
percoc <- rbind(percoc.4perc, percoc.10perc, percoc.50perc, percoc.70perc)
percoc$Sample <- factor(round((percoc$Days - floor(percoc$Days))*10))
percoc$Days <- floor(percoc$Days)
percoc$Perc_Released <- as.numeric(percoc$Perc_Released)
percoc$Prop_Released <- percoc$Perc_Released / 100
rm(percoc.4perc, percoc.10perc, percoc.50perc, percoc.70perc)
write.csv(percoc, "Four_NP_PercOC.csv", row.names = FALSE)
head(percoc)
## # A tibble: 6 x 11
## Days Mass_Dosed Dust_Massed_Dos~ Conc_On_Dust Mass_Of_Dust_Pe~
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0 0 0 0 NA
## 2 5 18.0 5.5 3.27 0.88
## 3 5 15.6 5.6 2.79 1.01
## 4 5 22.3 7 3.19 1.4
## 5 10 18.0 5.5 3.27 1.33
## 6 10 15.6 5.6 2.79 1.21
## # ... with 6 more variables: FourNP_In_Trial <dbl>, Mass_Released <dbl>,
## # Perc_Released <dbl>, Perc_OC <dbl>, Sample <fct>, Prop_Released <dbl>
table(percoc$Days, percoc$Perc_OC)
##
## 4 10 50 70
## 0 1 1 1 1
## 5 3 3 3 3
## 10 3 3 3 3
## 15 3 3 3 3
## 20 3 3 3 3
## 25 3 3 3 3
## 30 3 3 3 3
## 35 3 3 3 3
## 40 3 3 3 3
ggplot(percoc, aes(x=Days, y=Perc_Released, group=factor(Perc_OC), colour=factor(Perc_OC), shape=factor(Perc_OC), linetype=factor(Perc_OC))) +
geom_point() +
stat_summary(fun.y="mean", geom="line") +
#stat_summary(fun.y="mean", geom="point", shape = "-", size=10) +
theme_bw() +
labs(shape = "OC%", linetype = "OC%", colour = "OC%") +
ylab("Percent 4-NP Released")
## Warning: `fun.y` is deprecated. Use `fun` instead.
Subset the data to get Days = 40.
percoc.40 <- filter(percoc, Days == 40)
write.csv(percoc.40, "Four_NP_PercOC_40.csv", row.names = FALSE)
Plot the data to look for trends.
xyplot(Perc_Released ~ Perc_OC, group = Sample, data = percoc.40, ylab = "Percent 4-NP Released", xlab = "Percent OC", cex = 2, pch = 3, col = c("red", "blue", "green"))
Fit a model at Time = 40 using Perc_OC while controlling for Sample.
percoc.40 <- filter(percoc, Days == 40)
percoc.40 %>%
group_by(Perc_OC) %>%
summarize(
avg_perc_oc_released = mean(Perc_Released),
sd_perc_oc_released = sd(Perc_Released)
)
## # A tibble: 4 x 3
## Perc_OC avg_perc_oc_released sd_perc_oc_released
## * <dbl> <dbl> <dbl>
## 1 4 13.6 0.231
## 2 10 9.35 0.266
## 3 50 2.1 0.173
## 4 70 0.477 0.0115
### Unequal sd's indicates possible need for transformation
percoc.40 %>%
group_by(Perc_OC) %>%
summarize(
avg_log_prop_oc_released = mean(log(Prop_Released)),
sd_log_prop_oc_released = sd(log(Prop_Released))
)
## # A tibble: 4 x 3
## Perc_OC avg_log_prop_oc_released sd_log_prop_oc_released
## * <dbl> <dbl> <dbl>
## 1 4 -1.99 0.0169
## 2 10 -2.37 0.0287
## 3 50 -3.87 0.0807
## 4 70 -5.35 0.0241
### Unequal sd's indicates possible need for transformation
percoc.40 %>%
group_by(Perc_OC) %>%
summarize(
avg_sqrt_prop_oc_released = mean(Prop_Released^(1/2)),
sd_sqrt_prop_oc_released = sd(Prop_Released^(1/2))
)
## # A tibble: 4 x 3
## Perc_OC avg_sqrt_prop_oc_released sd_sqrt_prop_oc_released
## * <dbl> <dbl> <dbl>
## 1 4 0.369 0.00312
## 2 10 0.306 0.00436
## 3 50 0.145 0.00591
## 4 70 0.0690 0.000833
### Unequal sd's indicates possible need for transformation
percoc.40$Rank_Prop_Released <- rank(percoc.40$Prop_Released)
percoc.40 %>%
group_by(Perc_OC) %>%
summarize(
avg_log_prop_oc_released = mean(Rank_Prop_Released),
sd_log_prop_oc_released = sd(Rank_Prop_Released)
)
## # A tibble: 4 x 3
## Perc_OC avg_log_prop_oc_released sd_log_prop_oc_released
## * <dbl> <dbl> <dbl>
## 1 4 11 0.866
## 2 10 8 0.866
## 3 50 5 0.866
## 4 70 2 0.866
### Fit the model
percoc.lm <- lm(Perc_Released ~ Perc_OC*Sample, data = percoc.40)
summary(percoc.lm)
##
## Call:
## lm(formula = Perc_Released ~ Perc_OC * Sample, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.79170 -1.26563 -0.07669 1.13499 1.94509
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.703707 1.518053 8.368 0.000158 ***
## Perc_OC -0.187200 0.035021 -5.345 0.001752 **
## Sample2 -0.013095 2.146851 -0.006 0.995331
## Sample3 -0.013095 2.146851 -0.006 0.995331
## Perc_OC:Sample2 -0.001549 0.049527 -0.031 0.976058
## Perc_OC:Sample3 -0.001549 0.049527 -0.031 0.976058
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.927 on 6 degrees of freedom
## Multiple R-squared: 0.9353, Adjusted R-squared: 0.8813
## F-statistic: 17.33 on 5 and 6 DF, p-value: 0.001653
anova(percoc.lm)
## Analysis of Variance Table
##
## Response: Perc_Released
## Df Sum Sq Mean Sq F value Pr(>F)
## Perc_OC 1 321.76 321.76 86.6695 8.696e-05 ***
## Sample 2 0.01 0.01 0.0015 0.9985
## Perc_OC:Sample 2 0.00 0.00 0.0007 0.9993
## Residuals 6 22.27 3.71
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(percoc.lm)
Replot without Sample.
xyplot(Prop_Released ~ Perc_OC, data = percoc.40, ylab = "Percent 4-NP Released")
Since Sample appears to not be a factor, remove it and fit the reduced, complete model.
ggplot(percoc.40, aes(x=Perc_OC, y=Perc_Released)) +
geom_smooth(method = "lm") +
geom_point(shape=1, size=1) +
theme_bw()
## `geom_smooth()` using formula 'y ~ x'
percoc.lm <- lm(Perc_Released ~ Perc_OC, data = percoc.40)
summary(percoc.lm)
##
## Call:
## lm(formula = Perc_Released ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.77265 -1.29065 -0.01599 1.11800 1.95796
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 12.69498 0.67914 18.69 4.15e-09 ***
## Perc_OC -0.18823 0.01567 -12.01 2.89e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.493 on 10 degrees of freedom
## Multiple R-squared: 0.9352, Adjusted R-squared: 0.9287
## F-statistic: 144.3 on 1 and 10 DF, p-value: 2.889e-07
anova(percoc.lm)
## Analysis of Variance Table
##
## Response: Perc_Released
## Df Sum Sq Mean Sq F value Pr(>F)
## Perc_OC 1 321.76 321.76 144.34 2.889e-07 ***
## Residuals 10 22.29 2.23
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(percoc.lm)
percoc.lm <- lm(Perc_Released ~ factor(Perc_OC), data = percoc.40)
summary(percoc.lm)
##
## Call:
## lm(formula = Perc_Released ~ factor(Perc_OC), data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.306667 -0.108333 -0.006667 0.153333 0.266667
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.6333 0.1133 120.35 2.54e-14 ***
## factor(Perc_OC)10 -4.2867 0.1602 -26.76 4.10e-09 ***
## factor(Perc_OC)50 -11.5333 0.1602 -71.99 1.54e-12 ***
## factor(Perc_OC)70 -13.1567 0.1602 -82.12 5.39e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.1962 on 8 degrees of freedom
## Multiple R-squared: 0.9991, Adjusted R-squared: 0.9988
## F-statistic: 2976 on 3 and 8 DF, p-value: 1.58e-12
anova(percoc.lm)
## Analysis of Variance Table
##
## Response: Perc_Released
## Df Sum Sq Mean Sq F value Pr(>F)
## factor(Perc_OC) 3 343.74 114.579 2976.1 1.58e-12 ***
## Residuals 8 0.31 0.039
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
plot(percoc.lm)
Perc_OC is statistically significant.
The linear model is highly suspect since the scatterplot displays a distinctly nonlinear trend. Interpretation of the ANOVA model is that mean percent released decreases as percent OC increases. However, variability increases as percent released increases (Perc_OC decreases). A transformation may be needed to make variability uniform.
Stupid Jim Assumption: Perc_OC is a continuous covariate and we can get values other than 4, 10, 50, and 70%. So, a transformed model to linearize is preferred over ANOVA. However, with only four observed 0C%s, fitting any function is not going to work very well. It’s probably better to fit the ANOVA and discuss trend over OC%.
We can see the differences in group means by looking at a model on Perc_OC. The Bonferroni, Holm, and Tukey tests and confidence intervals all show the decreasing rate of release as Perc_OC increases.
percoc.aov <- aov(Perc_Released ~ factor(Perc_OC), data = percoc.40)
summary(percoc.aov)
## Df Sum Sq Mean Sq F value Pr(>F)
## factor(Perc_OC) 3 343.7 114.58 2976 1.58e-12 ***
## Residuals 8 0.3 0.04
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
### Make room for long y-axis labels
par(mar=c(5,12,2,2)+0.1)
TukeyHSD(percoc.aov)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = Perc_Released ~ factor(Perc_OC), data = percoc.40)
##
## $`factor(Perc_OC)`
## diff lwr upr p adj
## 10-4 -4.286667 -4.799710 -3.773624 0.00e+00
## 50-4 -11.533333 -12.046376 -11.020290 0.00e+00
## 70-4 -13.156667 -13.669710 -12.643624 0.00e+00
## 50-10 -7.246667 -7.759710 -6.733624 0.00e+00
## 70-10 -8.870000 -9.383043 -8.356957 0.00e+00
## 70-50 -1.623333 -2.136376 -1.110290 3.59e-05
plot(TukeyHSD(percoc.aov, conf.level=.95), las=1, cex.axis=0.75)
### Reset mar to default
par(mar=c(5,4,4,2)+0.1)
pairwise.t.test(percoc.40$Perc_Released, factor(percoc.40$Perc_OC), p.adj = "bonf")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: percoc.40$Perc_Released and factor(percoc.40$Perc_OC)
##
## 4 10 50
## 10 2.5e-08 - -
## 50 9.3e-12 3.8e-10 -
## 70 3.2e-12 7.5e-11 4.6e-05
##
## P value adjustment method: bonferroni
pairwise.t.test(percoc.40$Perc_Released, factor(percoc.40$Perc_OC), p.adj = "holm")
##
## Pairwise comparisons using t tests with pooled SD
##
## data: percoc.40$Perc_Released and factor(percoc.40$Perc_OC)
##
## 4 10 50
## 10 8.2e-09 - -
## 50 7.7e-12 1.9e-10 -
## 70 3.2e-12 5.0e-11 7.7e-06
##
## P value adjustment method: holm
Maybe a logit transformation will stabilize the linear model.
logit <- function (p, percents = range.p[2] > 1, adjust)
{
range.p <- range(p, na.rm = TRUE)
if (percents) {
if (range.p[1] < 0 || range.p[1] > 100)
stop("p must be in the range 0 to 100")
p <- p/100
range.p <- range.p/100
}
else if (range.p[1] < 0 || range.p[1] > 1)
stop("p must be in the range 0 to 1")
a <- if (missing(adjust)) {
if (isTRUE(all.equal(range.p[1], 0)) || isTRUE(all.equal(range.p[2],
1)))
0.025
else 0
}
else adjust
if (missing(adjust) && a != 0)
warning(paste("proportions remapped to (", a, ", ", 1 -
a, ")", sep = ""))
a <- 1 - 2 * a
log((0.5 + a * (p - 0.5))/(1 - (0.5 + a * (p - 0.5))))
}
LogitProp <- logit(percoc.40$Prop_Released)
ggplot(percoc.40, aes(x=Perc_OC, y=LogitProp)) +
geom_smooth(method = "lm") +
geom_point(shape=16, size=1) +
theme_bw()
## `geom_smooth()` using formula 'y ~ x'
percoc.lm <- lm(LogitProp ~ Perc_OC, percoc.40)
summary(percoc.lm)
##
## Call:
## lm(formula = LogitProp ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.21427 -0.15663 -0.04756 0.09023 0.39761
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.660081 0.096744 -17.16 9.54e-09 ***
## Perc_OC -0.049730 0.002232 -22.28 7.44e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2127 on 10 degrees of freedom
## Multiple R-squared: 0.9803, Adjusted R-squared: 0.9783
## F-statistic: 496.5 on 1 and 10 DF, p-value: 7.444e-10
plot(percoc.lm)
While not optimal, we can treat the Perc_OC values as fixed effects and check for homogeneity of variance using Levene’s test.
p_load(car)
## Installing package into 'C:/Users/School/OneDrive - University of Redlands/Documents/R/win-library/4.0'
## (as 'lib' is unspecified)
## also installing the dependencies 'matrixStats', 'RcppArmadillo', 'numDeriv', 'SparseM', 'MatrixModels', 'conquer', 'minqa', 'nloptr', 'statmod', 'carData', 'abind', 'pbkrtest', 'quantreg', 'maptools', 'rio', 'lme4'
## Warning: unable to access index for repository http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.0:
## cannot open URL 'http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.0/PACKAGES'
##
## There are binary versions available but the source versions are later:
## binary source needs_compilation
## SparseM 1.78 1.81 TRUE
## quantreg 5.83 5.85 TRUE
##
## package 'matrixStats' successfully unpacked and MD5 sums checked
## package 'RcppArmadillo' successfully unpacked and MD5 sums checked
## package 'numDeriv' successfully unpacked and MD5 sums checked
## package 'MatrixModels' successfully unpacked and MD5 sums checked
## package 'conquer' successfully unpacked and MD5 sums checked
## package 'minqa' successfully unpacked and MD5 sums checked
## package 'nloptr' successfully unpacked and MD5 sums checked
## package 'statmod' successfully unpacked and MD5 sums checked
## package 'carData' successfully unpacked and MD5 sums checked
## package 'abind' successfully unpacked and MD5 sums checked
## package 'pbkrtest' successfully unpacked and MD5 sums checked
## package 'maptools' successfully unpacked and MD5 sums checked
## package 'rio' successfully unpacked and MD5 sums checked
## package 'lme4' successfully unpacked and MD5 sums checked
## package 'car' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\School\AppData\Local\Temp\RtmpcP4VSm\downloaded_packages
## installing the source packages 'SparseM', 'quantreg'
##
## car installed
leveneTest(Prop_Released~factor(Perc_OC), data=percoc.40)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.3287 0.805
## 8
leveneTest(logit(Prop_Released)~factor(Perc_OC), data=percoc.40)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.3867 0.7657
## 8
According to Levene, whatever lack of homogeneity does exist, it is not of concern.
Box and Cox may provide a nice transformation to normalize the relationship. The EnvStats package is Steve Millard’s and goes with his textbook.
p_load(EnvStats)
## Installing package into 'C:/Users/School/OneDrive - University of Redlands/Documents/R/win-library/4.0'
## (as 'lib' is unspecified)
## also installing the dependency 'nortest'
## Warning: unable to access index for repository http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.0:
## cannot open URL 'http://www.stats.ox.ac.uk/pub/RWin/bin/windows/contrib/4.0/PACKAGES'
## package 'nortest' successfully unpacked and MD5 sums checked
## package 'EnvStats' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\School\AppData\Local\Temp\RtmpcP4VSm\downloaded_packages
##
## EnvStats installed
xyplot(Prop_Released ~ Perc_OC, data = percoc.40)
LogitProp <- logit(percoc.40$Prop_Released)
xyplot(LogitProp ~ Perc_OC, data = percoc.40, type="p,r")
summary(percoc.lm <- lm(LogitProp ~ Perc_OC, data = percoc.40))
##
## Call:
## lm(formula = LogitProp ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.21427 -0.15663 -0.04756 0.09023 0.39761
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.660081 0.096744 -17.16 9.54e-09 ***
## Perc_OC -0.049730 0.002232 -22.28 7.44e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2127 on 10 degrees of freedom
## Multiple R-squared: 0.9803, Adjusted R-squared: 0.9783
## F-statistic: 496.5 on 1 and 10 DF, p-value: 7.444e-10
plot(percoc.lm)
### Try Box and Cox
epsilon <- 0.000000001
summary(percoc.lm <- lm((Prop_Released+epsilon) ~ Perc_OC, data = percoc.40))
##
## Call:
## lm(formula = (Prop_Released + epsilon) ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0177265 -0.0129065 -0.0001599 0.0111800 0.0195796
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.1269498 0.0067914 18.69 4.15e-09 ***
## Perc_OC -0.0018823 0.0001567 -12.01 2.89e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01493 on 10 degrees of freedom
## Multiple R-squared: 0.9352, Adjusted R-squared: 0.9287
## F-statistic: 144.3 on 1 and 10 DF, p-value: 2.889e-07
boxcox(percoc.lm)
## $lambda
## [1] -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0
##
## $objective
## [1] 0.9219219 0.9233033 0.9256661 0.9263268 0.9432943 0.9809693 0.9217730
## [8] 0.9289774 0.9462395
##
## $objective.name
## [1] "PPCC"
##
## $optimize
## [1] FALSE
##
## $optimize.bounds
## lower upper
## NA NA
##
## $eps
## [1] 2.220446e-16
##
## $lm.obj
##
## Call:
## lm(formula = (Prop_Released + epsilon) ~ Perc_OC, data = percoc.40,
## y = TRUE, qr = TRUE)
##
## Coefficients:
## (Intercept) Perc_OC
## 0.126950 -0.001882
##
##
## $sample.size
## [1] 12
##
## $data.name
## [1] "percoc.lm"
##
## attr(,"class")
## [1] "boxcoxLm"
box_prop_released <- boxcoxTransform(percoc.40$Prop_Released+epsilon, lambda = 0.5)
summary(percoc.lm <- lm(box_prop_released ~ Perc_OC, data = percoc.40))
##
## Call:
## lm(formula = box_prop_released ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.047503 -0.021611 0.006348 0.018300 0.044623
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2641718 0.0141458 -89.37 7.53e-16 ***
## Perc_OC -0.0086994 0.0003263 -26.66 1.27e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0311 on 10 degrees of freedom
## Multiple R-squared: 0.9861, Adjusted R-squared: 0.9847
## F-statistic: 710.6 on 1 and 10 DF, p-value: 1.274e-10
plot(percoc.lm)
ggplot(percoc.40, aes(x=Perc_OC, y=box_prop_released)) +
geom_smooth(method = "lm") +
geom_point(shape=16, size=1) +
theme_bw()
## `geom_smooth()` using formula 'y ~ x'
percoc.lm <- lm(box_prop_released ~ Perc_OC, percoc.40)
summary(percoc.lm)
##
## Call:
## lm(formula = box_prop_released ~ Perc_OC, data = percoc.40)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.047503 -0.021611 0.006348 0.018300 0.044623
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.2641718 0.0141458 -89.37 7.53e-16 ***
## Perc_OC -0.0086994 0.0003263 -26.66 1.27e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0311 on 10 degrees of freedom
## Multiple R-squared: 0.9861, Adjusted R-squared: 0.9847
## F-statistic: 710.6 on 1 and 10 DF, p-value: 1.274e-10
plot(percoc.lm)