The supplied Steve Hilton export contains 193 rows and 23 columns.
Its post field is text. Engagement fields are
reply_count, repost_count,
like_count, quote_count, and
bookmark_count. created_at represents post
creation; indexed_at represents indexing. The export has no
timezone suffix, so this analysis provisionally interprets timestamps as
UTC. Available creation dates span October 24–29, 2026. The same October
24–29 window must be used for both candidates. Thirty-three raw rows
have missing created_at values. These are excluded from the
date-matched analysis; indexed_at is not substituted for
creation time.
Before cleaning, 10 rows have empty text and 183 nonempty rows contain 159 distinct texts after trimming. All 193 URIs are distinct. No text matches Paris Hilton or Hilton hotel/resort/Honors. Nevertheless, ambiguous candidate references, other Hilton meanings, spam, non-English posts, and posts discussing both candidates need private review. Forty-six raw posts mention Becerra; these are not a separately collected Becerra comparison sample.
Exact duplicate texts within each candidate are collapsed so repeated wording does not automatically count as independent support. This can collapse separate authors’ identical messages. The primary analysis conservatively excludes posts mentioning both candidates unless a private relevance review overrides that rule. Explicitly non-English posts are excluded from the English Bing analysis; unknown language posts require review. Blank creation dates and out-of-window posts are excluded. The review file records all decisions for reproducibility.
| candidate | stage | n |
|---|---|---|
| Steve Hilton | Imported | 193 |
| Steve Hilton | In_date_window | 130 |
| Steve Hilton | Nonempty | 183 |
| Steve Hilton | Retained | 67 |
| Steve Hilton | Unique_text | 159 |
| Steve Hilton | Unique_URI | 183 |
| candidate | needs_review | pending_review |
|---|---|---|
| Steve Hilton | 75 | 75 |
Pending reviews mean the results are provisional. Inspect embedded or
quoted material privately when context is missing; this analysis scores
only text. Engagement is summarized descriptively, with
each retained text given equal weight. Likes and reposts are not assumed
to be votes or endorsements.
Each positive word contributes +1 and each negative word −1. A post is positive when its sum is above zero, negative below zero, and neutral at zero. Neutral includes ties and posts without any Bing matches; it does not establish neutral stance. Positive and negative shares use all retained posts as their denominator. Net sentiment is positive share minus negative share; mean net word score is also shown.
| candidate | posts | positive_posts | negative_posts | neutral_posts |
|---|---|---|---|---|
| Steve Hilton | 67 | 17 | 22 | 28 |
| candidate | positive_share | negative_share | net_sentiment | mean_net_words | zero_match_share |
|---|---|---|---|---|---|
| Steve Hilton | 0.254 | 0.328 | -0.075 | -0.209 | 0.269 |
| candidate | total_reply_count | total_repost_count | total_like_count | total_quote_count | total_bookmark_count |
|---|---|---|---|---|---|
| Steve Hilton | 25 | 15 | 118 | 1 | 3 |
Method reference: tidytext’s Bing lexicon documentation.
The workflow selects a reproducible simple random sample of 20 retained posts, or all retained posts if fewer than 20 exist. In the private manual file, label each post supportive, opposed, or neutral_unclear toward its assigned candidate. Do this without seeing the automatic labels. Finish relevance review before labeling; if cleaning changes the retained sample, remove the old manual file and regenerate it before doing the final validation.
Positive tone maps to supportive, negative to opposed, and neutral to neutral_unclear for this comparison only. Reported accuracy is agreement with human stance, not proof that word tone measures electoral support. Accuracy remains missing until every selected post has been hand-labeled. With only 20 posts, agreement is imprecise and a random sample may underrepresent a candidate.
| selected | labels_completed | complete | agreement_accuracy |
|---|---|---|---|
| 20 | 0 | FALSE | NA |
| manual_stance | auto_stance | posts |
|---|---|---|
| neutral_unclear | neutral_unclear | 0 |
| neutral_unclear | opposed | 0 |
| neutral_unclear | supportive | 0 |
| opposed | neutral_unclear | 0 |
| opposed | opposed | 0 |
| opposed | supportive | 0 |
| supportive | neutral_unclear | 0 |
| supportive | opposed | 0 |
| supportive | supportive | 0 |
For candidate c, let p(c) = positive posts / all retained posts. The assignment’s proxy vote share is p(c) / [p(Hilton) + p(Becerra)]. The higher normalized rate wins; equal rates produce a tie. A zero denominator is undefined. This is an uncalibrated social-media proxy, not a measured election vote share.
Unavailable: both candidate datasets are required.
The bootstrap independently resamples retained posts with replacement within each candidate 1,000 times, preserves candidate sample sizes, and recomputes the same normalized rate. The 2.5th and 97.5th percentiles form an interval conditional on this sample and method. Zero-denominator resamples are counted as undefined and omitted from interval calculation. Heavy dependence among authors or replies can make post-level intervals too narrow; they do not capture platform selection bias, collection bias, or sentiment classification error. Both datasets need comparable search queries, time windows, pagination, and language policies.
These posts are a convenience sample of Bluesky discussion, not a random sample of California voters. The export does not establish California residency, voter eligibility, or representativeness. More discussion may reflect criticism, news attention, repeated messages, or a few prolific accounts rather than support.
Bing scores word tone, whereas stance means support for or opposition to a particular candidate. Negative words can describe a problem the candidate wants to solve; positive words can praise an opponent. Sarcasm, negation, quoted speech, slang, and mixed-candidate posts can reverse the intended meaning. Hand-labeling helps reveal these failures, but does not correct the entire sample automatically. The bootstrap measures resampling variability under the stated assumptions; it cannot turn a biased discussion sample into a representative election forecast.
The following is the request supplied to the AI assistant, preserved verbatim.
Continuing from Bluesky Forecast Plan: Inspect /mnt/data/Steve_Hilton_Posts(2).csv and redo the user’s Marketing Analytics R workflow using the file’s actual columns. Identify the text column and relevant engagement/date fields, recommend cleaning for false positives such as Paris Hilton/Hilton Hotel, and provide R code for Bing/tidytext post sentiment, aggregate summary, 20-post manual stance validation, positive-share prediction, 1,000 bootstrap resamples, and R Markdown-ready aggregate tables/charts. Do not expose usernames or individual posts in the published-report outputs.
This HTML report prints only aggregate results. Keep the original
CSVs, private/ folder, and all post-level objects off
RPubs. Publish only the knitted HTML after completing the private
reviews and adding a comparable second dataset.