Data Center Public Sentiment

show code
sentiment_study1 = read.csv('dataCenterSentiment_01.csv') %>% 
  filter(dataCenterSentiment != "") %>% 
  mutate(dataCenterSentiment = factor(dataCenterSentiment, levels=c('Strongly oppose', 'Somewhat oppose', 'Have no opinion', 'Somewhat favor', 'Strongly favor'))) %>% 
  mutate(priceForSupport_withSupporters = ifelse(dataCenterSentiment == "Somewhat favor" | dataCenterSentiment =="Strongly favor", 0, priceForSupport))

We collected a total of 2523 responses. Note that responding to the “price for support” option was encouraged but not required, so some were left NA.

Overall sentiment to a local data center build

show code
nice_table(sentiment_study1 %>% group_by(dataCenterSentiment) %>% tally() %>% mutate(percent = n/sum(n)*100))

dataCenterSentiment

n

percent

Strongly oppose

1,163

46.10

Somewhat oppose

515

20.41

Have no opinion

386

15.30

Somewhat favor

354

14.03

Strongly favor

105

4.16

show code
sentiment_study1 %>% group_by(dataCenterSentiment) %>% tally() %>% mutate(percent = n/sum(n)*100) %>% 
  ggplot(aes(x = dataCenterSentiment, y=percent, fill = as.factor(dataCenterSentiment)))+
  geom_bar(stat = "identity", position = "dodge") +
  theme_minimal()+
  labs(fill="", x='') +
  theme(legend.position='none')

Price for support

Participants who did not support a local data center build were asked to register their required price to gain their support. In the following analyses, participants who supported a local data center build are logged as “$0” for this variable.

Raw results

Raw results can’t be plotted bc the distribution is too big:

  • mean = 4.008016^{304}
  • min = -1
  • max = 10^{308}
  • median = 5000

Somebody registered “$-1” and they strongly opposed a local data center build. Probably should be interpreted as “nothing will buy my support”?

Cutoff: billion

141 participants registered price tags higher than $1 billion. Excluding them yields 2354 data points.

show code
nice_table(sentiment_study1 %>% filter(priceForSupport_withSupporters<1000000001) %>% summarise(mean = mean(priceForSupport_withSupporters/1000), sd = sd(priceForSupport_withSupporters)/1000, median=median(priceForSupport_withSupporters)/1000, min = min(priceForSupport_withSupporters), max = max(priceForSupport_withSupporters)/1000), title = "Payment required for support, in thousands. (minimum reported in raw)")
ggplot(subset(sentiment_study1,priceForSupport_withSupporters<1000000001 &!is.na(priceForSupport_withSupporters)), aes(x=priceForSupport_withSupporters/1000))+
  geom_density(fill="#00bfc4", alpha=0.4)+
  geom_vline(aes(xintercept=mean(priceForSupport_withSupporters)/1000),color="#00bfc4", linetype="dashed", linewidth=0.5)+
  labs(x="Payment required for support, in thousands.", title="Cutoff: $1 billion")+
  theme_classic()

Payment required for support, in thousands. (minimum reported in raw)

mean

sd

median

min

max

21,069.46

134,690.52

2.50

-1.00

1,000,000.00

Cutoff: million

323 participants registered price tags higher than $1 million. Excluding them yields 2172 data points.

show code
nice_table(sentiment_study1 %>% filter(priceForSupport_withSupporters<1000001) %>% summarise(mean = mean(priceForSupport_withSupporters/1000), sd = sd(priceForSupport_withSupporters)/1000, median=median(priceForSupport_withSupporters)/1000, min = min(priceForSupport_withSupporters), max = max(priceForSupport_withSupporters)/1000), title = "Payment required for support, in thousands. (minimum reported in raw)")
ggplot(subset(sentiment_study1,priceForSupport_withSupporters<1000001 &!is.na(priceForSupport_withSupporters)), aes(x=priceForSupport_withSupporters/1000))+
  geom_density(fill="#00bfc4", alpha=0.4)+
  geom_vline(aes(xintercept=mean(priceForSupport_withSupporters)/1000),color="#00bfc4", linetype="dashed", linewidth=0.5)+
  labs(x="Payment required for support, in thousands.", title="Cutoff: $1 million")+
  theme_classic()

Payment required for support, in thousands. (minimum reported in raw)

mean

sd

median

min

max

98.14

267.68

1.00

-1.00

1,000.00

Claude simulated 300 responses to the following question:

And included demographic information for respondents.

show code
simulatedData = read.csv('datacenter_rebate_simulation.csv')

nice_table(simulatedData %>% group_by(ethnicity) %>% count())
nice_table(simulatedData %>% group_by(age_bracket) %>% count())
nice_table(simulatedData %>% group_by(gender) %>% count())
nice_table(simulatedData %>% group_by(income_bracket) %>% count())

ethnicity

n

Asian or Asian American

21

Black or African American

43

Hispanic or Latino

50

Other/Multiracial

17

White (non-Hispanic)

169

age_bracket

n

18-29

57

30-44

71

45-59

66

60-74

72

75+

34

gender

n

Man

155

Non-binary/other

3

Woman

142

income_bracket

n

$100k–$150k

43

$30k–$60k

67

$60k–$100k

96

Over $150k

54

Under $30k

40

Claude simulated prior approval/opposition to a data center being built in the local area.

show code
simulatedData %>% group_by(prior_attitude_numeric) %>% tally() %>% mutate(percent = n/sum(n)*100) %>% 
  ggplot(aes(x = prior_attitude_numeric, y=percent, fill = as.factor(prior_attitude_numeric)))+
  geom_bar(stat = "identity", position = "dodge") +
  theme_minimal()+
  labs(fill="")

The simulated data very much missed the mark here, likely because public sentiment about data centers is so quickly changing.

And finally, the simulated requested tax rebate amounts:

show code
gghistogram(subset(simulatedData, rebate_condition== 'one-time'), x = 'wta_amount')+labs(title='One Time Payment')
gghistogram(subset(simulatedData, rebate_condition== 'yearly'), x = 'wta_amount')+labs(title='Yearly Payments')

Note that Claude implemented a randomly assigned condition to either report a yearly or a one-time payment requirement.

Claude noted that the following likely issues:

  • Respondents will report $0 or refuse to answer if there is no amount of money that is sufficient

  • Respondents will anchor to the $1200 stimulus payment checks