| No. | Attributes | Range |
|---|---|---|
| 1 | Enrollment Cash | $50 to $300 |
| 2 | Monthly Cash | $2 to $20 |
| 3 | Monthly Override | 0 to 5 |
| 4 | Min Battery | 20% to 40% |
| 5 | Guaranteed Battery | 60% to 80% |
surveydown Survey Platform
Pingfan Hu, PhD Candidate at George Washington University, advised by Dr. John Helveston.
Research interests:
For more information, visit pingfan.org

Source: Argonne National Lab, www.anl.gov/ev-facts/model-sales




Battery Electric Vehicle Smart Charging Adoption
Grid Peak-Shaving Quantification
The surveydown Survey Platform
Published in Environmental Research Letters:
Hu, Pingfan, Tarroja, B., Dean, M., Forrest, K., Hittinger, E., Jenn, A. & Helveston, J.P. (2025) “Measuring electric vehicle owners’ willingness to participate in smart charging programs” Environmental Research Letters. https://doi.org/10.1088/1748-9326/ae2597
We need high BEV ownership & a large sample size.
Sensitivity: How do changes in smart charging program features influence BEV owners’ willingness to opt in?
Enrollment Rate: Under what combinations of features will BEV owners be more willing to opt in to smart charging programs?
Approach

| No. | Attributes | Range |
|---|---|---|
| 1 | Enrollment Cash | $50 to $300 |
| 2 | Monthly Cash | $2 to $20 |
| 3 | Monthly Override | 0 to 5 |
| 4 | Min Battery | 20% to 40% |
| 5 | Guaranteed Battery | 60% to 80% |
| Attributes | Values |
|---|---|
| Enrollment Cash | $300 |
| Monthly Cash | $20 |
| Override Allowance | 5 |

(Range determined by stated vehicle they own)


Meta Ads: Voluntary participants
Dynata Recruitment: Paid survey






\[ \small \begin{align*} u_j = v_j + \epsilon_j = \beta' x + \epsilon_j \qquad P_j = \frac{e^{v_j}}{\sum_{k=1}^{J} e^{v_k}} \end{align*} \]
Utility estimated using maximum likelihood estimation (MLE).


Without compensation, users will not participate.
Choice between “None” and this program:
| Attributes | Values |
|---|---|
| Enrollment Cash | $0 |
| Monthly Cash | $0 - $20 |
| Monthly Override | 0 |




Submitted to Environmental Research: Infrastructure and Sustainability
Manuscript ERIS-100972, awaiting review

We connect consumer enrollment with grid simulation.
Peak-shaving: How much can SMC reduce peak demand in contrasting grid regions?
Cost efficiency: How much does peak shaving cost per unit, and is more enrollment always better?
Approach

| CAISO | NYISO | |
|---|---|---|
| Single Families | 7.69 million | 3.16 million |
| Different Energy Sources | Solar | Hydro |
| Net load shape | “Duck curve” | Flat profile |
| Seasonal effect | Minimal | Strong in winter (heating) |
Both lead in BEV adoption, with contrasting grid structures.
| Source | Provides | Role in Simulation |
|---|---|---|
| 2022 NHTS | Real trip records nationwide | Charge time & energy needs |
| 2025 GridStatus.io | Net load time series | Regional grid baselines |
| 2025 U.S. Census | Single-family counts | Scale to total fleet energy |
| Study 1 | Enrollment curve | Cost efficiency analysis |

Stage 1: Peak-shaving model sweeps thousands of scenarios.
Stage 2: Cost efficiency joins results with Study 1 enrollment curves.
| CAISO | NYISO | ||
|---|---|---|---|
|
|
||
| Peak shave | 3.7 GW (30.5 → 26.8) | Peak shave | 1.6 GW (21.2 → 19.6) |
| Percentage | 12.1% | Percentage | 7.5% |

Mixed logit prediction based on ~1300 real BEV owners.



Cost efficiency is highest at moderate enrollment (30–50%).
|
1. The cost-effectiveness of peak shaving requires: moderate enrollment (30-50%), and seasonal effect consideration. |
|
|
2. Peak-shaving potential is: 14.4% for CAISO, and 7.9% for NYISO. |
|
|
3. SMC has co-benefits beyond monetary value: fewer emissions, longer battery life, and lower storage capacity requirements. |
|
| Limitations |
a. Stated preference being optimistic. b. Only considered single-family homes. c. Grid conditions based on today’s data. |
surveydown Survey PlatformPublished in PLoS ONE:
Hu, Pingfan, Bunea, Bogdan, & Helveston, J. P. (2025). “surveydown: An open-source, markdown-based platform for programmable and reproducible surveys” PLOS ONE, 20(8), e0331002. https://doi.org/10.1371/journal.pone.0331002



❌ Reproducibility
❌ Version control
❌ Limited features
❌ Open source

Expensive!
code?✅ Reproducibility
✅ Version control
✅ Lots of features
✅ Open source
✅ Free!
surveydown!


qmd file
Markdown + R code chunks

qmd file
Markdown + Python code chunks

survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...
survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...YAML header for a “clean” output
survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...Load the surveydown Package
survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...Use triple-dash marker (---)
to define survey pages
Quarto fences (:::) also OK:
::: {#welcome .sd-page}
Page content
:::
survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...Page content
sd_question() for survey questionssd_next() for page navigationsurvey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...
survey.qmd---
format: html
echo: false
warning: false
---
```{r}
library(surveydown)
```
--- welcome
# Welcome to `surveydown`!
```{r}
sd_question(
type = "mc",
id = "has_fav_hero",
label = "Do you have a favorite super hero?",
option = c(
"Yes" = "yes",
"No" = "no"
)
)
sd_next()
```
--- some_other_page
Other content...



surveydown surveysurvey.qmd
A Quarto doc defining the survey content (pages, text, images, questions, etc.).
app.R
An R script defining the survey Shiny app.

supabase.com
surveydownsurveydown is feature-packed!
surveydown is highly flexible and customizable to user needs
leaflet map
surveydown vs other platforms

sdstudio package
sdstudio package
surveydown, a free open-source survey platform for programmable, reproducible survey designs.| Topic | Venue & Time | |
|---|---|---|
| Workshops | Agentic Workflows with Claude Code | GWTAI, 2026 |
surveydown: Open-source survey platform
|
Quant UX Con, 2025 | |
| Teaching Assistant | EMSE 4572/6572: Exploratory Data Analysis | GWU, Fall 2025 |
| EMSE 4571: Programming for Analytics | GWU, Spring 2025 |
Mentored students through substantial R programming and data analysis projects.
| Attribute | Equivalence Value | Unit |
|---|---|---|
| Enrollment Cash | 77.7 | $ |
| Monthly Cash | 4.0 | $ |
| Override Days | 2.5 | Days |
| Minimum Threshold | 65.5 | % |
| Guaranteed Threshold | 6.3 | % |
| Attribute | Equivalence Value | Unit |
|---|---|---|
| Enrollment Cash | 55.7 | $ |
| Occurrence Cash | 2.9 | $ |
| Monthly Occurrence | 1.9 | Times |
| Lower Bound | 11.7 | % |
| Guaranteed Threshold | 9.1 | % |

\[ \begin{align*} u_j = \beta_1 x_j^{\text{enroll_cash}} + \beta_2 x_j^{\text{monthly_cash}} + \beta_3 \delta_j^{\text{override_allowed}} + \beta_4 x_j^{\text{num_overrides}} \notag \\ + \beta_5 x_j^{\text{min_threshold}} + \beta_6 x_j^{\text{guaranteed_threshold}} + \beta_7 \delta_j^{\text{no_choice}} + \epsilon_j \end{align*} \]
| Attribute | Coef. | Est. | SE | Level | Unit |
|---|---|---|---|---|---|
| Enrollment Cash | β₁ | 0.0037 | 0.0002 | 50, 100, 200, 300 | USD |
| Monthly Cash | β₂ | 0.0728 | 0.0031 | 2, 5, 10, 15, 20 | USD |
| Override Days | β₃ | 0.1191 | 0.0140 | 0, 1, 3, 5 | Days |
| Override Flag | β₄ | 0.4357 | 0.0654 | Yes, No | - |
| Minimum Threshold | β₅ | 0.0044 | 0.0023 | 20, 30, 40 | % |
| Guaranteed Threshold | β₆ | 0.0490 | 0.0028 | 60, 70, 80 | % |
| No Choice | β₇ | 2.8984 | 0.2215 | - | - |
\[ \begin{align*} u_j = \beta_1 x_j^{\text{enroll_cash}} + \beta_2 x_j^{\text{occur_cash}} + \beta_3 x_j^{\text{num_occurrences}} + \beta_4 x_j^{\text{lower_threshold}} \notag \\ + \beta_5 x_j^{\text{guaranteed_threshold}} + \beta_6 \delta_j^{\text{no_choice}} + \epsilon_j \end{align*} \]
| Attribute | Coef. | Est. | SE | Level | Unit |
|---|---|---|---|---|---|
| Enrollment Cash | β₁ | 0.0051 | 0.0003 | 50, 100, 200, 300 | USD |
| Occurrence Cash | β₂ | 0.0972 | 0.0045 | 2, 5, 10, 15, 20 | USD |
| Monthly Occurrence | β₃ | 0.1595 | 0.0262 | 1, 2, 3, 4 | Times |
| Lower Threshold | β₄ | 0.0263 | 0.0036 | 20, 30, 40 | % |
| Guaranteed Threshold | β₅ | 0.0368 | 0.0037 | 60, 70, 80 | % |
| No Choice | β₆ | 2.4283 | 0.1964 | - | - |
| Vehicle & Charging | |
|---|---|
| BEV range | 200 miles |
| Charging | Level 2 (6.48 kW) |
| Battery SOC | 20% – 80% |
| Travel needs | Guaranteed |
| Overrides | 2 – 3 per month |
| Program & Scenarios | |
|---|---|
| BEV : Household | 1 : 1 |
| Enrollment | 0% – 100% |
| Valley start | 8 PM – 12 AM |
| Best valley | 11 PM |
| Time spans | Year / day / season |

Simulation results based on ~26,000 survey responses from 2022 NHTS.

Five configurations with different peak/valley windows.

Net Load = Grid Supply - Variable Sources

BEV load scaled to fleet size and stacked on net load.
| Best Day (Jun 1) | Worst Day (Dec 13) | ||
|---|---|---|---|
|
|
||
| Peak shave | 5.4 GW (37.6 → 32.2) | Peak shave | 1.9 GW (30.7 → 28.8) |
| Percentage | 14.4% | Percentage | 6.2% |
| Best Day (Jul 13) | Worst Day (Nov 8) | ||
|---|---|---|---|
|
|
||
| Peak shave | 2.2 GW (27.8 → 25.6) | Peak shave | 0.8 GW (17.8 → 17.0) |
| Percentage | 7.9% | Percentage | 4.5% |
| Spring | Summer | Fall | Winter |
|---|---|---|---|
|
|
|
|
| 3.7 GW (27.5 → 23.8) | 3.7 GW (34.3 → 30.6) | 3.8 GW (32.3 → 28.5) | 3.6 GW (29.1 → 25.5) |
| 13.5% | 10.8% | 11.8% | 12.4% |
| Peak shave for all seasons: 3.6–3.8 GW (10.8–13.5%) | |||
| Spring | Summer | Fall | Winter |
|---|---|---|---|
|
|
|
|
| 1.5 GW (18.4 → 16.9) | 1.6 GW (24.6 → 23.0) | 1.5 GW (19.8 → 18.3) | 1.4 GW (22.1 → 20.7) |
| 8.2% | 6.5% | 7.6% | 6.3% |
| Peak shave for all seasons: 1.4–1.6 GW (6.3–8.2%) | |||


| Program | Incentive | Enrollment |
|---|---|---|
|
PCE Managed Charging (CAISO) |
$0 → $40 per month | 1.4% → 10.6% |
|
MCE Sync (CAISO) |
$50 bonus + $10 per month | 10% of serviceable market |
|
SmartCharge New York (NYISO) |
Up to $400 per year |
~7% of registered EVs (731 vehicles) |
surveydown Survey Platformsurveydown Feature HighlightsQuestion types
Conditional logic
text
textarea
numeric
mc
mc_multiple
mc_buttons
mc_multiple_buttons
select
slider
slider_numeric
date
daterange
text
mc_buttonssd_question(
type = "mc_buttons",
id = "dream_power",
label = "If you could have ONE superpower, which would you choose?",
option = c(
"🕸️ Web-slinging" = "webslinging",
"🛡️ Super Strength" = "strength",
"✈️ Flight" = "flight",
"🧠 Telepathy" = "telepathy",
"⚡️ Super Speed" = "speed"
),
direction = "vertical"
)

Conditional showing
Conditional skipping
Conditional stopping
sd_show_if()
sd_show_if()survey.qmd
sdstudio package