RPubs will retire in June 2027. Your existing documents will stay accessible through December 31, 2031
and Connect Cloud is the recommended home for new publishing. Read the blog post

Recently Published

Clustering of the Anderson Iris 1928 and 1936 data
This shows that the 1928 Anderson Iris dataset that was collected over a much larger number of locations and a wider geographical distribution has a larger degree of scatter than the Fisher Iris data and it suggest that models trained on the Fisher data will underperform with real world data
bbd_top_bottom_county
This code maps counties top 5/1 percentile and bottom 5/1 percentile by bbd usage
Statistical Modeling 1 Final Portfolio
This portfolio presents my work for Statistical Modeling 1 using the Airbnb listings dataset. It includes exploratory data analysis, multiple regression, multinomial logistic regression, Poisson regression, and a LASSO model. Each section connects the modeling choices to the course objectives and explains the results in clear, accessible language. The portfolio highlights how I applied probability, inference, GLMs, cross-validation, and tidymodels workflows to answer practical questions from the data.
Análisis Integral de un Ensayo Clínico Simulado con {biostats}
Se presenta un flujo analítico completo utilizando el paquete {biostats}, aplicado sobre un conjunto de datos clínicos simulados. Se incluyen tablas de línea base, comparaciones entre grupos, análisis longitudinal, pruebas de supuestos, medidas de efecto epidemiológico, visualizaciones estandarizadas y cálculos de tamaño de muestra. El objetivo es mostrar cómo {biostats} optimiza, estandariza y acelera procesos estadísticos comúnmente empleados en ensayos clínicos, manteniendo reproducibilidad y rigor metodológico.
Statistical Modeling I Portfolio
Auto datset
Final Project
Comparison of Red Maple and Sugar Maple to investigate if the Red Maple has muted dynamics.
FELIPE
BASE DE DATOS Y DESCRIPTIVAS
Midterm Covid Sentiment
--- title: "U.S. COVID-19 Sentiment Timeline" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE) library(dplyr) library(ggplot2) library(lubridate) library(crosstalk) library(plotly) library(DT) set.seed(123) ``` ```{r load_and_prepare} # Load data ------------------------------------------------------------- # If the CSV is on your Desktop: sent <- read.csv("~/Desktop/usa_covid_2020_2022.csv", stringsAsFactors = FALSE) # If it's in the project folder instead, use: # sent <- read.csv("usa_covid_2020_2022.csv", stringsAsFactors = FALSE) sent$Date <- as.Date(sent$Date) sent <- sent[order(sent$Date), ] sent <- sent %>% mutate( Year = year(Date), Month = month(Date), YearMonth = format(Date, "%Y-%m") ) # Theme tagging --------------------------------------------------------- assign_theme <- function(text) { txt <- tolower(text) if (grepl("vaccine|vaccination|shot|booster|dose|warp speed", txt)) { "Vaccines & Boosters" } else if (grepl("lockdown|stay-at-home|shutdown|restrictions|social distancing|face covering|mask", txt)) { "Restrictions & Reopening" } else if (grepl("delta|omicron|variant|ba\\.5|ba5", txt)) { "Variants" } else if (grepl("economy|economic|jobs|unemployment|market|business|stimulus|checks|rescue plan|relief", txt)) { "Economy & Relief" } else if (grepl("school|schools|students|classroom|kids", txt)) { "Schools & Education" } else if (grepl("misinformation|disinformation|false information|myths|rumors", txt)) { "Misinformation & Communication" } else { "General Pandemic Response" } } sent$Theme <- vapply(sent$Summary, assign_theme, character(1)) # Stopword lists for word scrambles ------------------------------------- stopwords_simple <- c( "the","and","to","of","in","a","for","on","as","is","are","this","that", "with","be","from","at","it","by","an","into","about","has","have","will", "was","were","but","more","many","most","less","very","their","his","her", "its","our","us","we","they","over","again","now","than","still","even" ) stopwords_domain <- c( "covid","coronavirus","pandemic","virus","viruses", "case","cases","death","deaths", "vaccine","vaccines","shot","shots", "lockdown","lockdowns","restrictions","guidelines", "americans","american","people","country", "united","states","state","u","s","us","u.s", "economy","economic","hospital","hospitals" ) make_scramble <- function(text) { clean <- gsub("[^A-Za-z ]", " ", tolower(text)) words <- unlist(strsplit(clean, "\\s+")) words <- words[ words != "" & !(words %in% c(stopwords_simple, stopwords_domain)) & nchar(words) >= 5 ] if (length(words) == 0) return("") unique_words <- unique(words) paste(sample(unique_words, min(5, length(unique_words))), collapse = " ") } # Monthly aggregates ----------------------------------------------------- monthly_info <- sent %>% group_by(YearMonth) %>% summarize( MonthStart = min(Date), AvgSentiment = mean(SentimentScore), HoverText = paste(Summary, collapse = "<br>• "), MonthScramble = make_scramble(paste(Summary, collapse = " ")), .groups = "drop" ) %>% mutate( SentSign = ifelse(AvgSentiment > 0, "Positive", "Negative/Neutral") ) # Join month scramble back to row level --------------------------------- sent <- sent %>% left_join(monthly_info %>% select(YearMonth, MonthScramble), by = "YearMonth") # Theme-level summary --------------------------------------------------- theme_summary <- sent %>% group_by(Theme) %>% summarize( AvgSentiment = mean(SentimentScore), Count = n(), .groups = "drop" ) %>% mutate( SentSign = ifelse(AvgSentiment > 0, "Positive", "Negative/Neutral") ) ``` ```{r monthly_interactive} plot_ly( monthly_info, x = ~MonthStart, y = ~AvgSentiment, type = "scatter", mode = "lines+markers", color = ~SentSign, colors = c("Negative/Neutral" = "#d95f02", "Positive" = "#1b9e77"), text = ~paste0( "<b>", YearMonth, "</b><br>", "Average Sentiment: ", round(AvgSentiment, 3), "<br>", "Category: ", SentSign, "<br><br>", "<b>Summaries:</b><br>• ", HoverText ), hoverinfo = "text" ) %>% layout( title = "Monthly Average Sentiment (Color-Coded by Positive vs Negative)", xaxis = list(title = "Month"), yaxis = list(title = "Average Sentiment Score (-1 to +1)") ) ``` ```{r theme_chart} ggplot( theme_summary, aes(x = reorder(Theme, AvgSentiment), y = AvgSentiment, fill = SentSign) ) + geom_col(width = 0.6) + geom_hline(yintercept = 0, linetype = "dashed") + coord_flip() + scale_fill_manual( values = c("Negative/Neutral" = "#d95f02", "Positive" = "#1b9e77"), name = "Average Sentiment" ) + theme_minimal(base_size = 13) + labs( title = "Average Sentiment by Theme", x = "Theme", y = "Average Sentiment Score (-1 to +1)" ) ``` ```{r interactive_timeline} shared_sent <- SharedData$new(sent, key = ~Date, group = "covid") filter_date <- filter_slider( id = "date_filter", label = "Date Range", sharedData = shared_sent, column = ~Date ) filter_score <- filter_slider( id = "score_filter", label = "Sentiment Score", sharedData = shared_sent, column = ~SentimentScore, step = 0.05 ) filter_month <- filter_select( id = "month_filter", label = "Month", sharedData = shared_sent, group = ~YearMonth ) timeline_plot <- plot_ly( shared_sent, x = ~Date, y = ~SentimentScore, type = "scatter", mode = "lines+markers", text = ~paste0( "Date: ", Date, "<br>", "Sentiment: ", SentimentScore, "<br>", "Theme: ", Theme, "<br><br>", Summary ), hoverinfo = "text" ) %>% layout( title = "Daily Sentiment Timeline", xaxis = list(title = "Date"), yaxis = list(title = "Sentiment Score (-1 to +1)") ) bscols( widths = c(3, 9), list(filter_date, filter_score, filter_month), timeline_plot ) ``` ```{r word_scramble_table} table_data <- sent %>% select(Date, SentimentScore, YearMonth, MonthScramble, Theme, Summary) shared_table <- SharedData$new(table_data, key = ~Date, group = "covid") datatable( shared_table, options = list(pageLength = 5, lengthChange = FALSE), colnames = c( "Date", "Sentiment", "Month", "Word Scramble", "Theme", "Summary" ), rownames = FALSE ) ```
Practical R 3
Blah
Statistical Modeling I Portfolio
Auto dataset
TheSportPsychShow
A quick guide for finding similar episodes of interest.