Nothing
## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.width = 7,
fig.height = 5
)
## ----eval=FALSE---------------------------------------------------------------
# # Install from CRAN
# install.packages("qDEA")
#
# # Load the package
# library(qDEA)
## ----echo=FALSE---------------------------------------------------------------
# For vignette building
library(qDEA)
## ----basic-dea----------------------------------------------------------------
# Load example data
data(CST11)
head(CST11)
# Prepare input and output matrices
X <- as.matrix(CST11$EMPLOYEES)
Y <- as.matrix(CST11$SALES_EJOR)
# Run output-oriented DEA with constant returns to scale
result_dea <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "CRS",
qout = 0) # Standard DEA (no outliers allowed)
# View efficiency scores
result_dea$effvals
## ----basic-qdea---------------------------------------------------------------
# Run qDEA allowing one outlier
qout <- 1/nrow(X) # Proportion = 1/8 = 0.125
result_qdea <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "CRS",
qout = qout)
# Compare DEA and qDEA efficiency scores
comparison <- data.frame(
Store = CST11$STORE,
DEA = round(result_dea$effvals, 3),
qDEA = round(result_qdea$effvalsq, 3),
Difference = round(result_qdea$effvalsq - result_dea$effvals, 3)
)
print(comparison)
## ----two-inputs---------------------------------------------------------------
# Load two-input, one-output data
data(CST21)
head(CST21)
# Prepare matrices
X <- as.matrix(CST21[, c("EMPLOYEES", "FLOOR_AREA")])
Y <- as.matrix(CST21$SALES)
# Input-oriented DEA with VRS
result_vrs <- qDEA(X = X, Y = Y,
orient = "in",
RTS = "VRS",
qout = 1/nrow(X))
# Display results
data.frame(
Store = CST21$STORE,
Employees = CST21$EMPLOYEES,
Floor_Area = CST21$FLOOR_AREA,
Sales = CST21$SALES,
Efficiency = round(result_vrs$effvalsq, 3)
)
## ----two-outputs--------------------------------------------------------------
# Load one-input, two-output data
data(CST12)
head(CST12)
# Prepare matrices
X <- as.matrix(CST12$EMPLOYEES)
Y <- as.matrix(CST12[, c("CUSTOMERS", "SALES")])
# Output-oriented qDEA
result_outputs <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "CRS",
qout = 0.15) # Allow 15% outliers
# Results
data.frame(
Store = CST12$STORE,
Employees = CST12$EMPLOYEES,
Customers = CST12$CUSTOMERS,
Sales = CST12$SALES,
DEA_Eff = round(result_outputs$effvals, 3),
qDEA_Eff = round(result_outputs$effvalsq, 3)
)
## ----hospitals----------------------------------------------------------------
# Load hospital data
data(CST22)
head(CST22)
# Prepare matrices
X <- as.matrix(CST22[, c("DOCTORS", "NURSES")])
Y <- as.matrix(CST22[, c("OUT_PATIENTS", "IN_PATIENTS")])
# Run qDEA with 10% outliers allowed
result_hospital <- qDEA(X = X, Y = Y,
orient = "in",
RTS = "VRS",
qout = 0.10)
# Create results table
hospital_results <- data.frame(
Hospital = CST22$HOSPITAL,
Doctors = CST22$DOCTORS,
Nurses = CST22$NURSES,
Out_Patients = CST22$OUT_PATIENTS,
In_Patients = CST22$IN_PATIENTS,
Efficiency = round(result_hospital$effvalsq, 3)
)
print(hospital_results)
# Identify efficient hospitals
efficient <- hospital_results$Hospital[hospital_results$Efficiency >= 0.99]
cat("\nEfficient hospitals:", paste(efficient, collapse = ", "))
## ----input-orientation--------------------------------------------------------
result_in <- qDEA(X = X, Y = Y, orient = "in", RTS = "CRS", qout = 0.10)
cat("Input-oriented efficiencies:\n")
print(round(result_in$effvalsq, 3))
## ----output-orientation-------------------------------------------------------
result_out <- qDEA(X = X, Y = Y, orient = "out", RTS = "CRS", qout = 0.10)
cat("Output-oriented efficiencies:\n")
print(round(result_out$effvalsq, 3))
## ----graph-orientation--------------------------------------------------------
result_graph <- qDEA(X = X, Y = Y, orient = "inout", RTS = "VRS", qout = 0.10)
cat("Graph-oriented distances:\n")
print(round(result_graph$distvalsq, 3))
## ----rts-comparison-----------------------------------------------------------
# Constant Returns to Scale (CRS)
result_crs <- qDEA(X = X, Y = Y, orient = "in", RTS = "CRS", qout = 0.10)
# Variable Returns to Scale (VRS)
result_vrs_comp <- qDEA(X = X, Y = Y, orient = "in", RTS = "VRS", qout = 0.10)
# Decreasing Returns to Scale (DRS)
result_drs <- qDEA(X = X, Y = Y, orient = "in", RTS = "DRS", qout = 0.10)
# Increasing Returns to Scale (IRS)
result_irs <- qDEA(X = X, Y = Y, orient = "in", RTS = "IRS", qout = 0.10)
# Compare results
rts_comparison <- data.frame(
Hospital = CST22$HOSPITAL,
CRS = round(result_crs$effvalsq, 3),
VRS = round(result_vrs_comp$effvalsq, 3),
DRS = round(result_drs$effvalsq, 3),
IRS = round(result_irs$effvalsq, 3)
)
print(rts_comparison)
## ----bootstrap, eval=FALSE----------------------------------------------------
# # Run qDEA with bootstrap (100 replications)
# # Note: This takes longer to run
# result_boot <- qDEA(X = X, Y = Y,
# orient = "in",
# RTS = "VRS",
# qout = 0.10,
# nboot = 100,
# seedval = 12345)
#
# # Access bias-corrected estimates
# bias_corrected <- result_boot$BOOT_DATA$effvalsq.bc
#
# # Compare original and bias-corrected
# comparison_boot <- data.frame(
# Hospital = CST22$HOSPITAL,
# Original = round(result_boot$effvalsq, 3),
# Bias_Corrected = round(bias_corrected, 3),
# Bias = round(result_boot$effvalsq - bias_corrected, 3)
# )
#
# print(comparison_boot)
## ----peers--------------------------------------------------------------------
# Run qDEA to get peer information
data(CST11)
X <- as.matrix(CST11$EMPLOYEES)
Y <- as.matrix(CST11$SALES_EJOR)
result_peers <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "VRS",
qout = 0.10)
# Access peer information
peers <- result_peers$PEER_DATA$PEERSq
print(peers)
## ----projections--------------------------------------------------------------
# Run with projection calculation
result_proj <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "VRS",
qout = 0.10,
getproject = TRUE)
# Access projected values
X_target <- result_proj$PROJ_DATA$X0HATq
Y_target <- result_proj$PROJ_DATA$Y0HATq
# Compare actual vs. target
projection_comparison <- data.frame(
Store = CST11$STORE,
Actual_Input = X[,1],
Target_Input = round(X_target[,1], 1),
Actual_Output = Y[,1],
Target_Output = round(Y_target[,1], 1),
Efficiency = round(result_proj$effvalsq, 3)
)
print(projection_comparison)
## ----iterative----------------------------------------------------------------
# Run with multiple iterations
result_iter <- qDEA(X = X, Y = Y,
orient = "out",
RTS = "CRS",
qout = 0.15,
nqiter = 5) # Allow up to 5 iterations
# Check number of iterations used
cat("Iterations completed:", result_iter$LP_DATA$qiter, "\n")
# Check actual proportion of outliers
cat("Actual outlier proportion:", round(result_iter$LP_DATA$qhat, 4), "\n")
## ----output-structure, eval=FALSE---------------------------------------------
# result <- qDEA(X = X, Y = Y, orient = "out", RTS = "CRS", qout = 0.10)
#
# # Main efficiency scores
# result$effvals # DEA efficiency scores
# result$effvalsq # qDEA efficiency scores
# result$distvals # DEA distance measures
# result$distvalsq # qDEA distance measures
#
# # Input data (for reference)
# result$INPUT_DATA
#
# # Bootstrap data (if nboot > 0)
# result$BOOT_DATA
#
# # Peer information
# result$PEER_DATA
#
# # Projected values (if getproject = TRUE)
# result$PROJ_DATA
#
# # LP solver information
# result$LP_DATA
## ----complete-analysis--------------------------------------------------------
# Load data
data(CST22)
# Prepare data
X <- as.matrix(CST22[, c("DOCTORS", "NURSES")])
Y <- as.matrix(CST22[, c("OUT_PATIENTS", "IN_PATIENTS")])
# Run comprehensive analysis
result_complete <- qDEA(
X = X,
Y = Y,
orient = "in",
RTS = "VRS",
qout = 0.10,
nqiter = 3,
getproject = TRUE
)
# Create comprehensive results table
complete_results <- data.frame(
Hospital = CST22$HOSPITAL,
Doctors = CST22$DOCTORS,
Nurses = CST22$NURSES,
Out_Patients = CST22$OUT_PATIENTS,
In_Patients = CST22$IN_PATIENTS,
DEA_Eff = round(result_complete$effvals, 3),
qDEA_Eff = round(result_complete$effvalsq, 3),
Target_Doctors = round(result_complete$PROJ_DATA$X0HATq[,1], 1),
Target_Nurses = round(result_complete$PROJ_DATA$X0HATq[,2], 1)
)
print(complete_results)
# Summary statistics
cat("\n=== Summary Statistics ===\n")
cat("Mean DEA efficiency:", round(mean(result_complete$effvals), 3), "\n")
cat("Mean qDEA efficiency:", round(mean(result_complete$effvalsq), 3), "\n")
cat("Efficient units (qDEA ≥ 0.99):",
sum(result_complete$effvalsq >= 0.99), "out of", nrow(X), "\n")
# Potential input reductions
input_savings <- cbind(
X - result_complete$PROJ_DATA$X0HATq
)
colnames(input_savings) <- c("Doctor_Savings", "Nurse_Savings")
cat("\nTotal potential input reductions:\n")
cat("Doctors:", round(sum(input_savings[,1]), 1), "\n")
cat("Nurses:", round(sum(input_savings[,2]), 1), "\n")
## ----visualization, fig.width=7, fig.height=5---------------------------------
# Create efficiency comparison plot
data(CST22)
X <- as.matrix(CST22[, c("DOCTORS", "NURSES")])
Y <- as.matrix(CST22[, c("OUT_PATIENTS", "IN_PATIENTS")])
result_viz <- qDEA(X = X, Y = Y, orient = "in", RTS = "VRS", qout = 0.10)
# Prepare data for plotting
plot_data <- data.frame(
Hospital = CST22$HOSPITAL,
DEA = result_viz$effvals,
qDEA = result_viz$effvalsq
)
# Simple bar plot
barplot(
t(as.matrix(plot_data[, c("DEA", "qDEA")])),
beside = TRUE,
names.arg = plot_data$Hospital,
col = c("skyblue", "coral"),
main = "Hospital Efficiency: DEA vs qDEA",
ylab = "Efficiency Score",
xlab = "Hospital",
legend.text = c("DEA", "qDEA"),
args.legend = list(x = "topright")
)
abline(h = 1, lty = 2, col = "red")
## ----session-info-------------------------------------------------------------
sessionInfo()
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.