library(tidyverse)
library(ggpubr)
library(rstatix)
library(knitr)
library(kableExtra)
library(gridExtra)
library(nlstools)
library(plotly)
library(htmltools)
exp_model_fit <- function(df, group, msrmt){
df <- df %>%
filter(
Measurement == msrmt,
Group == group)
theta.0 <- min(df$PeakAmp) * 0.5
# Estimate the rest parameters using a linear model
model.0 <- lm(log(PeakAmp - theta.0) ~ OrderofClick, data=df)
alpha.0 <- exp(coef(model.0)[1])
beta.0 <- coef(model.0)[2]
start <- list(alpha = alpha.0, beta = beta.0, theta = theta.0)
model <- nls(PeakAmp ~ alpha * exp(beta * OrderofClick) + theta , data = df, start = start)
return(model)
}
AVRECPeakCLST <- read_csv('../../Data/AVRECPeakCL.csv')
model_data <- AVRECPeakCLST %>%
filter(
Measurement %in% c("preCL_1", "CL_1", "CL_2"),
ClickFreq == 5,
Layer == "All") %>%
ungroup() %>%
mutate(
Measurement = case_when(
Measurement == "preCL_1" ~ "preLaser",
TRUE ~ "postLaser"
)) %>%
group_by(Group, Animal, OrderofClick, Measurement) %>%
summarize(PeakAmp = mean(PeakAmp, na.rm = TRUE)) %>%
# group_by(Group, OrderofClick, Measurement) %>%
# summarize(PeakAmp = mean(PeakAmp, na.rm = TRUE)) %>%
ungroup()
Model Fit
l <- htmltools::tagList()
i <- 1
for(group in c("KIC", "KIT", "KIV")){
# group <- "KIT"
cat("##", group)
cat("\n\n")
models <- list()
for(msrmt in c("preLaser", "postLaser")) {
models[[msrmt]] <- exp_model_fit(df = model_data, group = group, msrmt = msrmt)
}
summary(models$preLaser)$parameters %>%
kable(caption = "Pre-laser", full_width = F, digits = 3, escape = F) %>%
kable_classic_2(full_width = F) %>%
kable_styling() %>%
print()
summary(models$postLaser)$parameters %>%
kable(caption = "Post-laser", full_width = F, digits = 3, escape = F) %>%
kable_classic_2(full_width = F) %>%
kable_styling() %>%
print()
cat("\n\n")
predicted_data <- data.frame(
OrderofClick = seq(1,5,0.05),
Measurement = "preLaser") %>%
mutate(PeakAmp = predict(models$preLaser, list(OrderofClick = OrderofClick))) %>%
bind_rows(
data.frame(
OrderofClick = seq(1,5,0.05),
Measurement = "postLaser") %>%
mutate(PeakAmp = predict(models$postLaser, list(OrderofClick = OrderofClick)))
)
l[[i]] <- predicted_data %>%
plot_ly(
x = ~OrderofClick, y = ~PeakAmp,
color = ~Measurement,
type = 'scatter', mode = 'lines',
hovertemplate = paste(
'<b>Fitted Data</b>',
'<br><i>OrderofClick</i>: %{x}',
'<br><i>PeakAmp</i>: %{y:.4f}')
) %>%
add_markers(
data = model_data %>% filter(Group == group), hovertemplate = paste(
'<b>Actual Data</b>',
'<br><i>OrderofClick</i>: %{x}',
'<br><i>PeakAmp</i>: %{y:.4f}')) %>%
layout(
title = paste0("<b>Exponential Decay Model (", group, ")</b>"),
xaxis = list(title = "<b>Order of Click</b>"),
yaxis = list(title = "<b>Peak Amplitude</b>"),
margin = list(t = 70))
cat("\n\n")
i <- i+1
}
KIC
Pre-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.002
|
0.003
|
0.685
|
0.497
|
|
beta
|
-1.180
|
1.533
|
-0.770
|
0.445
|
|
theta
|
0.001
|
0.000
|
5.010
|
0.000
|
Post-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.002
|
0.003
|
0.700
|
0.487
|
|
beta
|
-1.279
|
1.488
|
-0.859
|
0.395
|
|
theta
|
0.001
|
0.000
|
8.251
|
0.000
|
KIT
Pre-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.001
|
0.002
|
0.579
|
0.565
|
|
beta
|
-1.320
|
1.794
|
-0.736
|
0.466
|
|
theta
|
0.001
|
0.000
|
8.876
|
0.000
|
Post-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.001
|
0.001
|
0.692
|
0.492
|
|
beta
|
-1.051
|
1.541
|
-0.682
|
0.499
|
|
theta
|
0.001
|
0.000
|
7.232
|
0.000
|
KIV
Pre-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.002
|
0.001
|
1.353
|
0.186
|
|
beta
|
-0.951
|
0.806
|
-1.180
|
0.247
|
|
theta
|
0.001
|
0.000
|
7.047
|
0.000
|
Post-laser
|
|
Estimate
|
Std. Error
|
t value
|
Pr(>|t|)
|
|
alpha
|
0.002
|
0.002
|
0.881
|
0.385
|
|
beta
|
-1.125
|
1.198
|
-0.939
|
0.355
|
|
theta
|
0.001
|
0.000
|
6.733
|
0.000
|