Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 6,
fig.height = 4,
fig.align = "center"
)
## ----load-package-------------------------------------------------------------
library(valytics)
library(ggplot2)
## ----attenuation-demo, fig.cap = "Demonstration of attenuation bias: OLS slope is attenuated when X has measurement error."----
set.seed(42)
# True relationship: Y = 1.0 * X (perfect agreement)
true_values <- seq(50, 150, length.out = 100)
# Both methods have measurement error
x_observed <- true_values + rnorm(100, sd = 10)
y_observed <- true_values + rnorm(100, sd = 10)
# Compare OLS vs Deming
ols_fit <- lm(y_observed ~ x_observed)
dm_fit <- deming_regression(x_observed, y_observed)
# Visualize
df <- data.frame(x = x_observed, y = y_observed)
ggplot(df, aes(x = x, y = y)) +
geom_point(alpha = 0.5) +
geom_abline(intercept = 0, slope = 1, linetype = "solid",
color = "gray50", linewidth = 1) +
geom_abline(intercept = coef(ols_fit)[1], slope = coef(ols_fit)[2],
color = "red", linewidth = 0.8) +
geom_abline(intercept = dm_fit$results$intercept, slope = dm_fit$results$slope,
color = "blue", linewidth = 0.8) +
annotate("text", x = 60, y = 145, label = "True (slope = 1)", color = "gray30") +
annotate("text", x = 60, y = 138,
label = sprintf("OLS (slope = %.3f)", coef(ols_fit)[2]), color = "red") +
annotate("text", x = 60, y = 131,
label = sprintf("Deming (slope = %.3f)", dm_fit$results$slope), color = "blue") +
labs(title = "Attenuation Bias in OLS Regression",
x = "Method X", y = "Method Y") +
theme_minimal()
## ----basic-usage--------------------------------------------------------------
# Load example data
data("glucose_methods")
# Deming regression with default settings (lambda = 1)
dm <- deming_regression(reference ~ poc_meter, data = glucose_methods)
dm
## ----summary------------------------------------------------------------------
summary(dm)
## ----scatter-plot, fig.cap = "Deming regression scatter plot with confidence band."----
plot(dm)
## ----residual-plot, fig.cap = "Residual plot for assessing model fit."--------
plot(dm, type = "residuals")
## ----error-ratio--------------------------------------------------------------
# If POC meter has twice the error variance of the reference
dm_lambda2 <- deming_regression(
reference ~ poc_meter,
data = glucose_methods,
error_ratio = 2
)
dm_lambda2
## ----cv-estimation, eval = FALSE----------------------------------------------
# # Example: Reference CV = 2.5%, POC CV = 4.5%
# cv_reference <- 0.025
# cv_poc <- 0.045
#
# lambda_estimated <- (cv_poc / cv_reference)^2
# # lambda_estimated = 3.24
#
# dm_cv <- deming_regression(
# reference ~ poc_meter,
# data = glucose_methods,
# error_ratio = lambda_estimated
# )
## ----jackknife----------------------------------------------------------------
dm_jack <- deming_regression(
reference ~ poc_meter,
data = glucose_methods,
ci_method = "jackknife"
)
# Standard errors are available
cat("Slope SE:", round(dm_jack$results$slope_se, 4), "\n")
cat("Intercept SE:", round(dm_jack$results$intercept_se, 4), "\n")
## ----bootstrap, eval = FALSE--------------------------------------------------
# dm_boot <- deming_regression(
# reference ~ poc_meter,
# data = glucose_methods,
# ci_method = "bootstrap",
# boot_n = 1999
# )
## ----comparison, fig.cap = "Comparison of Deming and Passing-Bablok regression."----
# Fit both models
dm <- deming_regression(reference ~ poc_meter, data = glucose_methods)
pb <- pb_regression(reference ~ poc_meter, data = glucose_methods)
# Compare coefficients
comparison <- data.frame(
Method = c("Deming", "Passing-Bablok"),
Slope = c(dm$results$slope, pb$results$slope),
Slope_Lower = c(dm$results$slope_ci["lower"], pb$results$slope_ci["lower"]),
Slope_Upper = c(dm$results$slope_ci["upper"], pb$results$slope_ci["upper"]),
Intercept = c(dm$results$intercept, pb$results$intercept),
Int_Lower = c(dm$results$intercept_ci["lower"], pb$results$intercept_ci["lower"]),
Int_Upper = c(dm$results$intercept_ci["upper"], pb$results$intercept_ci["upper"])
)
print(comparison, digits = 3)
## ----comparison-plot, fig.cap = "Visual comparison of Deming and Passing-Bablok regression lines."----
# Visual comparison
ggplot(glucose_methods, aes(x = reference, y = poc_meter)) +
geom_point(alpha = 0.6) +
geom_abline(intercept = 0, slope = 1, linetype = "dashed", color = "gray50") +
geom_abline(intercept = dm$results$intercept, slope = dm$results$slope,
color = "#2166AC", linewidth = 1) +
geom_abline(intercept = pb$results$intercept, slope = pb$results$slope,
color = "#B2182B", linewidth = 1) +
annotate("text", x = 80, y = 340, label = "Identity", color = "gray50") +
annotate("text", x = 80, y = 320, label = "Deming", color = "#2166AC") +
annotate("text", x = 80, y = 300, label = "Passing-Bablok", color = "#B2182B") +
labs(title = "Regression Method Comparison",
x = "Reference (mg/dL)",
y = "POC Meter (mg/dL)") +
theme_minimal()
## ----workflow-----------------------------------------------------------------
# Load data
data("creatinine_serum")
# 1. Deming regression
dm <- deming_regression(enzymatic ~ jaffe, data = creatinine_serum)
# 2. View summary
summary(dm)
## ----workflow-plot, fig.cap = "Complete Deming regression analysis for creatinine methods."----
# 3. Create visualization
plot(dm, title = "Creatinine: Jaffe vs Enzymatic Method")
## ----workflow-residuals, fig.cap = "Residual diagnostics for creatinine comparison."----
# 4. Check residuals
plot(dm, type = "residuals")
## ----extraction---------------------------------------------------------------
# Coefficients
slope <- dm$results$slope
intercept <- dm$results$intercept
# Confidence intervals
slope_ci <- dm$results$slope_ci
intercept_ci <- dm$results$intercept_ci
# Standard errors
slope_se <- dm$results$slope_se
intercept_se <- dm$results$intercept_se
# Formatted output for reporting
cat(sprintf("Slope: %.4f (95%% CI: %.4f to %.4f)\n",
slope, slope_ci["lower"], slope_ci["upper"]))
cat(sprintf("Intercept: %.4f (95%% CI: %.4f to %.4f)\n",
intercept, intercept_ci["lower"], intercept_ci["upper"]))
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.