plot_3d_regression() no longer emits a plotly warning when the plot is printed. The scatter3d trace's mode and marker settings were passed to plotly::plot_ly(), which makes them plot-level attributes that every later trace inherits; the regression plane added by plotly::add_surface() then inherited them and warned 'surface' objects don't have these attributes: 'mode', 'marker' at build time. They now go on the scatter3d trace itself via plotly::add_trace(). The rendered plot is unchanged.View() now renders correctly inside webR (the in-browser R that powers the ModernDive book's live exercises). webR has no pandoc, so a DT::datatable() htmlwidget cannot be saved as the self-contained HTML the cell needs (DT::saveWidget() errors), and the auto-print path is gated by interactive() being FALSE. In webR, View() now builds a self-contained static HTML table and pushes it through webR's viewer hook, so the data displays inline instead of only printing the explanatory message. Outside webR the DT::datatable() behaviour is unchanged.get_regression_points() and get_regression_summaries() now handle in-formula transformations on either side of the model formula (e.g. lm(log(y) ~ poly(x, 2))). LHS transforms previously errored; they now produce a sanitized outcome column on the model's scale (e.g. log_mpg, log_mpg_hat). RHS transforms no longer leak basis matrices or wrapper columns (poly() matrix columns, scale(), I()) into the points table; the original predictor variable is shown instead. The .rownames column is no longer leaked into the output.get_regression_table(), get_regression_points(), and get_regression_summaries() now accept glm() model objects (resolves issue #20). For glm() models, get_regression_points() returns fitted values and residuals on the response scale (e.g. probabilities for logistic regression). get_regression_summaries() returns a glm-shaped summary (mse, rmse, deviance, null_deviance, aic, bic, log_lik, df_residual, df_null, nobs) — R² columns are not included since they don't apply to glm. get_regression_table() gains an exponentiate argument (default FALSE) for returning odds/rate ratios for log/logit-link models.get_regression_table() is now applied to the tidy output's term column rather than model$coefficients names, which avoids breaking confint.glm's profile-likelihood refits.@docType package tag from R/moderndive.R (resolves issue #133). The "_PACKAGE" sentinel was already in place, so the moderndive-package alias is generated correctly.pennies_resamples so the replicate column is correctly numbered 1..35 instead of being uniformly 1 (resolves issue #130). The bug was an ungroup() missing in the data-raw/process_data_sets.R pipeline, so mutate(replicate = 1:n()) ran per-group on a single-row nested tibble. The dataset has been regenerated; row count and structure are otherwise unchanged.View() wrapper (resolves issue #99). In an interactive R session it behaves identically to utils::View(). In non-interactive contexts (R Markdown, Quarto, scripts) where utils::View() typically errors, it instead renders an interactive DT::datatable() inline so documents can still knit/render. DT is now in Imports. A short packageStartupMessage() is emitted only on non-interactive attach to explain the override; interactive sessions see no extra message. Attaching moderndive masks utils::View. For large data frames the inline DT::datatable() is slow and warns that the data is too big for a client-side table, so in non-interactive contexts View() now shows a random sample of n rows (default 1000) when x is larger, emitting a message that says so. New arguments n (sample size), full = FALSE (set TRUE to show every row), seed (reproducible sample), and quiet = FALSE (silence the message) control this; the sample never disturbs the caller's RNG stream, and the interactive utils::View() path is unchanged.moderndive datasets instead of base R / ggplot2 ones. View(), get_correlation(), get_regression_table(), get_regression_points(), get_regression_summaries(), plot_3d_regression(), and the package-level overview now use un_member_states_2024 (with life_expectancy_2022 ~ gdp_per_capita-style models). geom_categorical_model() now uses evals (score ~ rank) instead of ggplot2::mpg (hwy ~ drv)._pkgdown.yml: site url: now includes the https:// scheme so pkgdown::check_pkgdown() matches it against the URL listed in DESCRIPTION.README: added descriptive alt text to the hex-sticker image.get_correlation() now accepts multiple right-hand-side variables in the formula (e.g. mpg ~ hp + cyl + wt) (resolves issue #29). The default output is a long tibble with one row per predictor; pass wide = TRUE for one column per predictor. Single-RHS behavior is unchanged. A one-time message points users to corrr::correlate() if they want a full pairwise correlation matrix; suppress it with quiet = TRUE.plot_3d_regression() function for interactive 3D scatterplots with a fitted regression plane (resolves issue #27). Pass a formula z ~ x + y and the function returns a [plotly][plotly::plotly] htmlwidget. plotly is in Suggests; install it with install.packages("plotly") to use this function.un_member_states_2024 data for upcoming ModernDive v2 updatesspotify_by_genre data for upcoming ModernDive v2 updatestidy_summary() function to summarize data frame columns for upcoming ModernDive v2 updatesold_faithful_2024 data for upcoming ModernDive v2 updatescoffee_quality data for upcoming ModernDive v2 updatesalmonds_sample data for upcoming ModernDive v2 updatesalmonds_bowl and almonds_sample_100 data for upcoming ModernDive v2 updates to Inference chaptersearly_january_2023_weather and envoy_flights data for upcoming ModernDive v2 updates derived from data in the nycflights23 packagebroom reverse dependency issue https://github.com/moderndive/moderndive/issues/128early_january_weather consisting of January subset of nycflights13::weathercoffee_quality dataset: 1340 samples of coffee tested for their quality levelamazon_books dataset: sample of books available for purchase on Amazon.comipf_lifts consisting of international power lifting resultsbabies on maternal smoking and infant healthev_charging: information from 3,395 high resolution electric vehicle charging sessions.ma_traffic_2020_vs_2019 consisting of collisions information sourced from reports produced by the Massachusetts Traffic Data Management System.mass_traffic_2020 consisting of traffic data for 13 Massachusetts countiesmario_kart_auction datasetavocados consisting of avocado prices dataset downloaded from the Hass Avocado Board website in May of 2018.saratoga_houses random sample of 1057 houses taken from full Saratoga Housing Data.alaska_flights consisting of Alaska Airlines subset of nycflights13::flightsconf.level argument to get_regression_table() inherited from broom::tidy.lm()vignettes/paper.mdpkgdown and covr issues, defragged documentation.vignettes/why-moderndive.Rmd main vignettegeom_parallel_slopes() with new arguments:
fullrange=TRUE to draw regression lines over the entire support of the x-axis (by @wjhopper)level to set different level of confidence interval shading (by @echasnovski)geom_categorical_model() for visualizing regression models with one categorical explanatory/predictor variable (by @wjhopper)gg_parallel_slopes() directing users to use geom_parallel_slopes() instead (by @mariumtapal)geom_parallel_slopes() geom extension to ggplot2 package to plot parallel slopes regression models with one numerical and one categorical variable (this is not possible using ggplot2::geom_smooth()). Note this renders gg_parallel_slopes() function added in v0.3.0 obsolete.geom_parallel_slopes() to "Why moderndive?" vignettepennies_resamples data frame columnsget_correlation() now:
dplyr::group_by() groupingna.rm = TRUE argument or by passing standard stats:cor(use = "complete.obs") argument via ...gg_parallel_slopes(). In the future we hope to define a new ggplot2 geom.moderndive?" vignetteget_regression_points() to return a column that identifies the observational units/rowsDD_vs_SB: Dunkin Donuts and Starbucks in Eastern Massachusetts data collected by @DelaneyMoranpromotions: tibble version of openintro::gender.discrimination used to illustrate permutation test.MA_schools: Relationship between SAT scores and socio-economic status for Massachusetts high schools.mythbusters_yawn: Data from study on Mythbusters show on whether yawning ispromotions_shuffled: one instance of promotions with gender permuted/shuffledpennies_sample sample of 40 pennies from pennies has been renamed orig_pennies_sample. New pennies_sample consists of 50 pennies sampled from bank in Northampton, MA, USA on 2019/2/1.pennies_resamples: 35 bootstrap resamples of new pennies_samplemovies_genre: random sample of 32 action and 36 romance movies from ggplot2movies::movies\assertive::assert() codehouse_prices$date from dttm (date-time) to date per R4DS comment on using simplest data type possibleUpdated package for:
evals and house_prices datasets and updated get_regression_table() and get_regression_points() functions.Details:
get_correlation() function to omit $ syntax and return a data frameinfer::rep_sample_n() instead of our own defined version, as this function is now included in inferevals, house_prices, tactile_prop_red, pennies_sample and mythbusters_yawn datasetsget_regression_summaries()newdata argument to get_regression_points(). When:
newdata, output it as well as residual (See Issue 17).residualtidyverse from Depends, Imports, or SuggestsFixed broken url in ?bowl_samples
get_regression_* functions meant for novice R users/regression fitters that process regression model outputspennies: 800 pennies to be treated as a population from which to simulate sampling a numerical variable from (year of minting)bowl: Bowl of 2400 balls of which 900 are red to be treated as a population from which to simulate sampling a categorical variable from (color). Also known as the urn sampling framework \url{https://en.wikipedia.org/wiki/Urn_problem}.bowl_samples: data from tactile version of sampling from bowl done in class: 10 groups sampled n=50 balls from and counted the number red [ADD MODERNDIVE LINK]