| 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
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
Under a second round of reviews:
Hu, Pingfan, Tarroja, B., Dean, M., Forrest, K., Hittinger, E., Jenn, A. & Helveston, J.P. (2024) “Measuring Electric Vehicle Owners’ Willingness to Participate in BEV Smart Charging Programs” Environmental Research Letters.
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?
Conjoint survey to collect BEV owners’ willingness.
Mixed logit model for utility simulations.

| 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 |
| Monthly Override | 5 |

(Range determined by stated vehicle they own)
| No. | Attributes | Range |
|---|---|---|
| 1 | Enrollment Cash | $50 to $300 |
| 2 | Occurrence Cash | $2 to $20 |
| 3 | Monthly Occurrence | 1 to 4 |
| 4 | Lower Bound | 20% to 40% |
| 5 | Guaranteed Battery | 60% to 80% |
| Attributes | Values |
|---|---|
| Enrollment Cash | $300 |
| Occurrence Cash | $20 |
| Monthly Occurrence | 1 |

(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 |



| 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 | % |

Peak-shaving: How much does peak-shaving from controlled BEV charging cost utilities?
Variations: How do peak-shaving results change based on regions, seasons, BEV-to-house ratios, and enrollment rates.
Data collection from NHTS, NREL, and U.S. Census.
Peak-shaving simulation using the model from Study 1.
Travel patterns of 26,000 vehicle owners.

Energy consumption and concurrent charging % of 10,000 BEVs.
Data of household electricity consumption in each GEA region.


7.69M single-family homes, collected from U.S. Census.

Assumptions

90% SMC enrollment, BEV-to-house ratio 1:1.
Assumptions


More incentives lead to higher SMC enrollment, thus more peak-shaving.
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

surveydown, a free open-source survey platform for programmable, reproducible survey designs.

\[ \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 | - | - |
surveydown 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
sdstudio package
sdstudio package

Pingfan Hu - PhD Thesis Proposal