PageSourceSearch

https://ds002r-fds.netlify.app/syllabus

html ds002r-fds.netlify.app collected 2026-10-03 10:40:04 UTC 47,615 bytes, 939 lines download raw bytes

1<!DOCTYPE html>
2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
3
4<meta charset="utf-8">
5<!-- This site is hosted on Netlify. Anyone can build and deploy a site
6     like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=74fbad81-f871-4252-8909-44cabbc5f594
7     Netlify hosting facts for this site: static/SSR served via Netlify Edge. -->
8<meta name="generator" content="quarto-1.10.18">
9
10<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
11
12
13<title>syllabus – Foundations of Data Science in R</title>
14<style>
15/* Default styles provided by pandoc.
16** See https://pandoc.org/MANUAL.html#variables-for-html for config info.
17*/
18span.smallcaps{font-variant: small-caps;}
19div.columns{display: flex; gap: 1.5em;}
20div.column{flex: auto;}
21@media screen {
22div.columns{gap: min(4vw, 1.5em);}
23div.column{overflow-x: auto;}
24}
25div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
26ul.task-list{list-style: none;}
27ul.task-list li input[type="checkbox"] {
28  width: 0.8em;
29  margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 
30  vertical-align: middle;
31}
32</style>
33
34
35<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 35
35
36<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 36
36
37<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 37
37
38<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 38
38
39<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-search/quarto-search.js"></script>
40
41<meta name="quarto:offset" content="./">
42<link href="./images/favicon.ico" rel="icon">
43<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 43
43
44<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 44
44
45<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 45
45
46<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 46
46
47<script src="site_libs/quarto-html/anchor.min.js"></script>
47
48<link href="site_libs/quarto-html/tippy.css" rel="stylesheet">
49<link href="site_libs/quarto-html/quarto-syntax-highlighting-64a204ab8560d761af7679ceaba22944.css" rel="stylesheet" id="quarto-text-highlighting-styles">
50<script src="site_libs/bootstrap/bootstrap.min.js"></script>
50
51<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
52<link href="site_libs/bootstrap/bootstrap-a8111dbb49da88347f07f358db18fe74.min.css" rel="stylesheet" append-hash="true" id="quarto-bootstrap" data-mode="light">
53<link href="site_libs/quarto-contrib/fontawesome6-1.2.0/all.min.css" rel="stylesheet">
54<link href="site_libs/quarto-contrib/fontawesome6-1.2.0/latex-fontsize.css" rel="stylesheet">
55<script id="quarto-search-options" type="application/json">{
56  "location": "navbar",
57  "copy-button": false,
58  "collapse-after": 3,
59  "panel-placement": "end",
60  "type": "overlay",
61  "limit": 50,
62  "keyboard-shortcut": [
63    "f",
64    "/",
65    "s"
66  ],
67  "show-item-context": false,
68  "language": {
69    "search-no-results-text": "No results",
70    "search-matching-documents-text": "matching documents",
71    "search-copy-link-title": "Copy link to search",
72    "search-hide-matches-text": "Hide additional matches",
73    "search-more-match-text": "more match in this document",
74    "search-more-matches-text": "more matches in this document",
75    "search-clear-button-title": "Clear",
76    "search-text-placeholder": "",
77    "search-detached-cancel-button-title": "Cancel",
78    "search-submit-button-title": "Submit",
79    "search-label": "Search"
80  }
81}</script>
81
82
83
84</head>
85
86<body class="nav-fixed fullcontent quarto-light">
87
88<div id="quarto-search-results"></div>
89  <header id="quarto-header" class="headroom fixed-top">
90    <nav class="navbar navbar-expand-lg " data-bs-theme="dark">
91      <div class="navbar-container container-fluid">
92      <div class="navbar-brand-container mx-auto">
93    <a href="https://ds002r-fds.netlify.app/" class="navbar-brand navbar-brand-logo">
94    <img src="./images/st47s.png" alt="" class="navbar-logo light-content">
95    <img src="./images/st47s.png" alt="" class="navbar-logo dark-content">
96    </a>
97    <a class="navbar-brand" href="https://ds002r-fds.netlify.app/">
98    <span class="navbar-title">Foundations of Data Science in R</span>
99    </a>
100  </div>
101            <div id="quarto-search" class="" title="Search"></div>
102          <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }">
103  <span class="navbar-toggler-icon"></span>
104</button>
105          <div class="collapse navbar-collapse" id="navbarCollapse">
106            <ul class="navbar-nav navbar-nav-scroll ms-auto">
107  <li class="nav-item">
108    <a aria-current='page' class='nav-link active' href='/syllabus'> 
109<span class="menu-text">Syllabus</span></a>
110  </li>  
111  <li class="nav-item">
112    <a class='nav-link' href='/notes'> 
113<span class="menu-text">Class Notes</span></a>
114  </li>  
115  <li class="nav-item">
116    <a class='nav-link' href='/clicker_study'> 
117<span class="menu-text">Clicker Q</span></a>
118  </li>  
119  <li class="nav-item">
120    <a class='nav-link' href='/r-tip'> 
121<span class="menu-text">R tip</span></a>
122  </li>  
123  <li class="nav-item">
124    <a class='nav-link' href='/endangered_data'> 
125<span class="menu-text">Endangered Data</span></a>
126  </li>  
127  <li class="nav-item dropdown ">
128    <a class="nav-link dropdown-toggle" href="#" id="nav-menu-project" role="link" data-bs-toggle="dropdown" aria-expanded="false">
129 <span class="menu-text">Project</span>
130    </a>
131    <ul class="dropdown-menu dropdown-menu-end" aria-labelledby="nav-menu-project">    
132        <li>
133    <a class='dropdown-item' href='/project'>
134 <span class="dropdown-text">semester mini-projects</span></a>
135  </li>  
136        <li>
137    <a class='dropdown-item' href='/project1'>
138 <span class="dropdown-text">project 1 - website</span></a>
139  </li>  
140        <li>
141    <a class="dropdown-item" href="./project2.html">
142 <span class="dropdown-text">project 2 - text analysis</span></a>
143  </li>  
144        <li>
145    <a class="dropdown-item" href="./project3.html">
146 <span class="dropdown-text">project 3 - simulation</span></a>
147  </li>  
148        <li>
149    <a class="dropdown-item" href="./project4.html">
150 <span class="dropdown-text">project 4 - ethics</span></a>
151  </li>  
152        <li>
153    <a class="dropdown-item" href="./project5.html">
154 <span class="dropdown-text">project 5 - SQL</span></a>
155  </li>  
156        <li>
157    <a class="dropdown-item" href="./project6.html">
158 <span class="dropdown-text">project 6 - fin</span></a>
159  </li>  
160        <li>
161    <a class="dropdown-item" href="https://hardin47.netlify.app/courses/data/">
162 <span class="dropdown-text">Data Sources</span></a>
163  </li>  
164    </ul>
165  </li>
166  <li class="nav-item">
167    <a class='nav-link' href='/github'> 
168<span class="menu-text">GitHub</span></a>
169  </li>  
170</ul>
171          </div> <!-- /navcollapse -->
172            <div class="quarto-navbar-tools">
173</div>
174      </div> <!-- /container-fluid -->
175    </nav>
176</header>
177<!-- content -->
178<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar">
179<!-- sidebar -->
180<!-- margin-sidebar -->
181    
182<!-- main -->
183<main class="content" id="quarto-document-content">
184
185<header id="title-block-header" class="quarto-title-block default">
186<div class="quarto-title">
187<h1 class="title">syllabus</h1>
188</div>
189
190
191
192<div class="quarto-title-meta">
193
194    
195  
196    
197  </div>
198  
199
200
201</header>
202
203
204<section id="foundations-of-data-science-in-r" class="level1">
205<h1>Foundations of Data Science in R</h1>
206<section id="ds002r-fall-2026" class="level2">
207<h2 class="anchored" data-anchor-id="ds002r-fall-2026">DS002R, Fall 2026</h2>
208<p>Jo Hardin<br>
2092351 Estella<br>
210[email protected]</p>
211<p>Class: Mondays &amp; Wednesdays, 11-12:15pm<br>
212Estella 2141</p>
213<p><strong>Office Hours: (Estella 2351)</strong><br>
214Monday: 1:30-4:00pm<br>
215Tuesday: 9-11am<br>
216Thursday: 1:30-3pm</p>
217<p><strong>Mentor Sessions: (Estella 2141)</strong><br>
218Monday: 8-10pm<br>
219Tuesday: 8-10pm</p>
220<div class="cell" data-preview="true">
221<div class="cell-output-display">
222<div class="quarto-figure quarto-figure-center">
223<figure class="figure">
224<p><img src="images/tidydata_6.jpg" class="img-fluid figure-img" alt="A group of personified tables getting together and seemingly very happy to see each other."></p>
225<figcaption>Artwork by <span class="citation" data-cites="allison_horst">@allison_horst</span>.</figcaption>
226</figure>
227</div>
228</div>
229</div>
230</section>
231<section id="the-course" class="level2">
232<h2 class="anchored" data-anchor-id="the-course">The course</h2>
233<p><strong>Foundations of Data Science in R</strong> is a first course in data science. Data play an increasingly important role in many fields. Being able to understand data and the ethical implications in data driven decisions is paramount to being an informed member of society. As an introduction to data science with R, this course will introduce students to basic data science concepts. Prerequisite: CSCI004 or CSCI005 or CSCI051 or equivalent experience in programming.</p>
234<div class="callout callout-style-default callout-tip no-icon callout-titled">
235<div class="callout-header d-flex align-content-center">
236<div class="callout-icon-container">
237<i class="callout-icon no-icon"></i>
238</div>
239<div class="callout-title-container flex-fill">
240<span class="screen-reader-only">Tip</span>Anonymous Feedback
241</div>
242</div>
243<div class="callout-body-container callout-body">
244<p>As someone who is, myself, constantly learning and growing in many ways, I welcome your feedback about the course, the classroom dynamics, or anything else you’d like me to know. There is a link on Canvas to an anonymous feedback form. Please feel free to provide me with feedback at any time!</p>
245</div>
246</div>
247</section>
248<section id="student-learning-outcomes." class="level2">
249<h2 class="anchored" data-anchor-id="student-learning-outcomes.">Student Learning Outcomes.</h2>
250<p>By the end of the term, students will be able to:</p>
251<ul>
252<li>scrape, process, and clean data from the web</li>
253<li>wrangle data in a variety of formats</li>
254<li>contextualize variation in data</li>
255<li>construct point and interval estimates using resampling techniques</li>
256<li>design accurate, clear and appropriate data graphics</li>
257<li>query large relational databases (using SQL)</li>
258<li>work fluently with regular expression</li>
259<li>communicate data-driven decisions</li>
260</ul>
261</section>
262<section id="inclusion-goals" class="level2">
263<h2 class="anchored" data-anchor-id="inclusion-goals">Inclusion Goals</h2>
264<blockquote class="blockquote">
265<p>Inclusive teaching is intentional and reflective. Inclusive teaching builds community, is student-centered, acknowledges the whole student, and is accessible to all students. Inclusive teaching develops critical and creative thinkers who positively contribute to our community.</p>
266</blockquote>
267<p>The above definition of inclusive teaching was developed by Pomona faculty over the past few years, and it is what I aim to practice in our classroom. Please contact me if you have any suggestions to improve the quality of the course materials.</p>
268<p>Furthermore, I would like to create a learning environment for my students that supports a diversity of thoughts, perspectives and experiences, and honors your identities (including race, gender, class, sexuality, religion, ability, etc.) To help accomplish this:</p>
269<ul>
270<li>If you have a name and/or set of pronouns that differ from those that appear in your official records, please let me know!</li>
271<li>If you feel like your performance in the class is being impacted by your experiences outside of class, please don’t he
271sitate to come and talk with me. You can also relay information to me via your mentors. I want to be a resource for you.</li>
272</ul>
273<p>I (like many people) am still in the process of learning about diverse perspectives and identities. If something was said in class (by anyone) that made you feel uncomfortable, please talk to me about it. As a participant in course discussions, you should also strive to honor the diversity of your classmates.</p>
274</section>
275<section id="technical-details" class="level2">
276<h2 class="anchored" data-anchor-id="technical-details">Technical Details</h2>
277<section id="text" class="level4">
278<h4 class="anchored" data-anchor-id="text">Text:</h4>
279<p><b> <a href="https://mdsr-book.github.io/mdsr3e/" target="_blank">Modern Data Science with R, 3rd edition</a></b> by Baumer, Kaplan, and Horton.</p>
280<p><b><a href="https://r4ds.hadley.nz/" target="_blank">R for Data Science, 2nd edition</a></b> by Wickham, Çetinkaya-Rundel, and Grolemund.</p>
281<div class="callout callout-style-default callout-tip no-icon callout-titled">
282<div class="callout-header d-flex align-content-center">
283<div class="callout-icon-container">
284<i class="callout-icon no-icon"></i>
285</div>
286<div class="callout-title-container flex-fill">
287<span class="screen-reader-only">Tip</span>Dates
288</div>
289</div>
290<div class="callout-body-container callout-body">
291<ul>
292<li>Quizzes on Sep 23, Oct 7, Oct 26, Nov 11, Nov 23, and Dec 9 (in class)</li>
293<li>9.29.26 Project 1 due</li>
294<li>10.13.26 Project 2 due</li>
295<li>11.3.26 Project 3 due</li>
296<li>11.17.26 Project 4 due</li>
297<li>12.1.26 Project 5 due</li>
298<li>12.11.26 (Friday) or 12.18.26 (Friday) Project Presentations (9am-noon)</li>
299<li>12.18.26 Project 6 write-up due (on GitHub by midnight)</li>
300</ul>
301</div>
302</div>
303</section>
304</section>
305<section id="links-to-resources" class="level2">
306<h2 class="anchored" data-anchor-id="links-to-resources">Links to resources:</h2>
307<section id="git-resources" class="level3">
308<h3 class="anchored" data-anchor-id="git-resources">Git resources</h3>
309<div class="note">
310<ul>
311<li>Best and most comprehensive Git help: <a href="http://happygitwithr.com/" target="_blank">http://happygitwithr.com/</a></li>
312<li>Git within Positron: <a href="https://positron.posit.co/git.html" target="_blank">https://positron.posit.co/git.html</a></li>
313<li><a href="http://swcarpentry.github.io/git-novice/" target="_blank">Version control with Git</a></li>
314<li><a href="https://aberdeenstudygroup.github.io/studyGroup/lessons/SG-T1-GitHubVersionControl/VersionControl/#2.4.2." target="_blank">More on Git</a></li>
315<li><a href="https://git-scm.com/book/en/v2" target="_blank">Online Git book</a> with lots of info</li>
316</ul>
317</div>
318</section>
319<section id="r-resources" class="level3">
320<h3 class="anchored" data-anchor-id="r-resources">R resources</h3>
321<div class="note">
322<ul>
323<li>A fantastic <a href="https://www.cedricscherer.com/2019/08/05/a-ggplot2-tutorial-for-beautiful-plotting-in-r/" target="_blank">ggplot2 tutorial</a></li>
324<li>Tutorials through the <a href="https://ourcodingclub.github.io/tutorials/" target="_blank">Coding Club</a></li>
325<li><a href="http://www.rseek.org/" target="_blank">Google for R</a></li>
326<li>Helpful <a href="https://posit.co/resources/cheatsheets/" target="_blank">cheatsheets</a> from Positron.
327<ul>
328<li><a href="https://rstudio.github.io/cheatsheets/html/data-transformation.html" target="_blank">data wrangling</a></li>
329<li><a href="https://rstudio.github.io/cheatsheets/html/data-visualization.html" target="_blank">ggplot2</a></li>
330<li><a href="https://rstudio.github.io/cheatsheets/html/shiny.html" target="_blank">Shiny</a></li>
331<li><a href="https://rstudio.github.io/cheatsheets/html/quarto.html" target="_blank">Quarto</a></li>
332<li><a href="https://rstudio.github.io/cheatsheets/html/positron.html" target="_blank">Positron IDE</a></li>
333</ul></li>
334</ul>
335</div>
336</section>
337<section id="sql-resources" class="level3">
338<h3 class="anchored" data-anchor-id="sql-resources">SQL resources</h3>
339<div class="note">
340<ul>
341<li>W3 schools <a href="https://www.w3schools.com/sql/sql_intro.asp" target="_blank">Introduction to SQL</a></li>
342<li>W3 schools <a href="https://www.w3resource.com/sql-exercises/" target="_blank">SQL Exercises, Practice, Solution</a></li>
343<li><a href="https://cran.r-project.org/web/views/Databases.html" target="_blank">R packages</a> for working with databases</li>
344<li><a href="https://dbplyr.tidyverse.org/articles/dbplyr.html" target="_blank">Introduction to <code>dbplyr</code></a></li>
345</ul>
346</div>
347</section>
348<section id="regular-expression-resources" class="level3">
349<h3 class="anchored" data-anchor-id="regular-expression-resources">Regular expression resources</h3>
350<div class="note">
351<ul>
352<li><a href="https://cran.r-project.org/web/packages/stringr/vignettes/stringr.html" target="_blank"><strong>stringr</strong> vignette</a></li>
353<li><a href="https://stringr.tidyverse.org/" target="_blank"><strong>stringr</strong> package</a></li>
354<li>Jenny Bryan et al.’s <a href="https://stat545.com/character-vectors.html" target="_blank">STAT 545 notes</a></li>
355<li><a href="http://regexpal.com/" target="_blank">regexpal</a><br>
356</li>
357<li><a href="http://www.regexr.com/" target="_blank">RegExr</a></li>
358<li><a href="https://regexone.com/" target="_balnk">RegexOne</a></li>
359</ul>
360</div>
361<section id="hw-grading" class="level5">
362<h5 class="anchored" data-anchor-id="hw-grading">HW Grading</h5>
363<p>Homework assignments will be graded out of 5 points, which are based on a combination of accuracy and effort. Below are rough guidelines for grading.</p>
364<p>[5] All problems completed with detailed solutions provided and 75% or more of the problems are fully correct. Additionally, there are no extraneous messages, warnings, or printed lists of numbers.<br>
365[4] All problems completed with detailed solutions and 50-75% correct; OR close to all problems completed and 75%-100% correct. Or all problems are completed and there are extraneous messages, warnings, or printed lists of numbers. [<a href='https://ds002r-fds.netlify.app/superfluous_material' target='_blank'>Here is an example</a> of extraneous messages and printed lists of numbers.]<br>
366[3] Close to all problems completed with less than 75% correct. OR an assignment that didn’t make it all the way to Canvas as the correctly rendered pdf.<br>
367[2] More than half but fewer than all problems completed and &gt; 75% correct.<br>
368[1] More than half but fewer than all problems completed and &lt; 75% correct; OR less than half of problems completed.<br>
369[0] No work submitted, OR half or less than half of the problems submitted and without any detail/work shown to explain the solutions. You will get a zero if your file is not compiled and submitted on GitHub.</p>
370</section>
371</section>
372</section>
373<section id="projects" class="level2">
374<h2 class="anchored" data-anchor-id="projects">Projects:</h2>
375<p>There will be 5 mini-projects (due roughly every other week). You will also compile the projects, reflect on the process, and present your work to your classrmates. Project information is available here: <a href="./project/">DS 002R Projects</a></p>
376</section>
377<section id="computing" class="level2">
378<h2 class="anchored" data-anchor-id="computing">Computing:</h2>
379<ul>
380<li><p>GitHub will be used as a way to practice reproducible and collaborative science. There may be a slight learning curve, but knowing Git will be an extremely useful skill as you venture beyond this class.</p></li>
381<li><p>R will be used for all homework assignments. R is freely available at <a href="http://www.r-project.org/" target="_blank">http://www.r-project.org/</a> and is already installed on college computers. Additionally, you need to install Positron in order to use Quarto, <a href="https://positron.posit.co/" target="_blank">https://positron.posit.co/</a>
381. If you are not already familiar with R, please work through some of the materials provided ASAP.</p></li>
382<li><p>You are welcome to use Pomona’s Positron server at <a href="https://rstudio.campus.pomona.edu/" target="_blank">https://rstudio.campus.pomona.edu/</a> (or <a href="https://rstudio.pomona.edu" target="_blank">https://rstudio.pomona.edu</a> if you are off campus). If you use the server, you can connect directly to your Git account without installing Git locally on your own computer. [If you are not a Pomona student, you will need to get an account from Pomona’s ITS. Go to ITS, tell them that you are taking a Pomona course, and ask for an account for using Positron.]</p></li>
383</ul>
384</section>
385<section id="engagement" class="level2">
386<h2 class="anchored" data-anchor-id="engagement">Engagement:</h2>
387<ul>
388<li><p>This class will be interactive, and your engagement is expected (every day in class). Although notes will be posted, your engagement is an integral part of the in-class learning process.</p></li>
389<li><p>In class: after answering one question, wait until 5 other people have spoken before answering another question. [Feel free to <strong>ask</strong> as many questions as often as you like!]</p></li>
390<li><p>To get full participation points, you will be expected to contribute at least one R tip of the day, sometime during the semester.</p></li>
391</ul>
392<section id="academic-honesty" class="level4">
393<h4 class="anchored" data-anchor-id="academic-honesty">Academic Honesty:</h4>
394<p>Throughout the semester, you will be challenged, and you may find yourself stuck. Every single one of us has been there, I promise. Below, I’ve provided Pomona’s academic honesty policy. But before the policy, I’ve given some thoughts on cheating which I have taken from Nick Ball’s CHEM 147 Collective (thank you, Prof Ball!). Prof Ball gives us all something to think about when we are learning in a classroom as well as on our journey to become scientists and professionals:</p>
395<div class="callout callout-style-default callout-tip no-icon callout-titled">
396<div class="callout-header d-flex align-content-center">
397<div class="callout-icon-container">
398<i class="callout-icon no-icon"></i>
399</div>
400<div class="callout-title-container flex-fill">
401<span class="screen-reader-only">Tip</span>Why Cheat?
402</div>
403</div>
404<div class="callout-body-container callout-body">
405<p>There are many known reasons why we may feel the need to “cheat” on problem sets or exams:</p>
406<ul>
407<li>An academic environment that values grades above learning.</li>
408<li>Financial aid is critical for remaining in school that places undue pressure on maintaining a high GPA.</li>
409<li>Navigating school, work, and/or family obligations that have diverted focus from class.</li>
410<li>Challenges balancing coursework and mental health.</li>
411<li>Balancing academic, family, peer, or personal issues.</li>
412</ul>
413<p>Being accused of cheating – whether it has occurred or not – can be devastating for students. The college requires me to respond to potential academic dishonesty with a process that is very long and damaging. As your instructor, I care about you and want to offer alternatives to prevent us from having to go through this process.</p>
414</div>
415</div>
416<p>If you find yourself in a situation where “cheating” seems like the only option, please come talk to me. We will figure this out together.</p>
417<section id="pomonas-academic-honesty-policy" class="level5">
418<h5 class="anchored" data-anchor-id="pomonas-academic-honesty-policy">Pomona’s Academic Honesty Policy</h5>
419<p>The College expects students to understand and adhere to basic standards of honesty and academic integrity. These standards include but are not limited to the following:</p>
420<ul>
421<li>In projects and assignments (including homework) prepared independently, students never intentionally represent the ideas or the language of others as their own, examples include but are not limited to plagiarism, failing to use citations, unapproved use of artificial intelligence and resubmitted personal work for another course.</li>
422<li>Students do not destroy or alter either the work of other students or the educational resources and materials of the College.</li>
423<li>Students neither give nor receive assistance with examinations.</li>
424<li>Students do not represent work completed for one course as original work for another or deliberately disregard course rules and regulations.</li>
425<li>In laboratory or research projects involving the collection of data, students accurately report data observed and do not alter or fabricate data for any reason</li>
426</ul>
427<div class="callout callout-style-default callout-tip no-icon callout-titled">
428<div class="callout-header d-flex align-content-center">
429<div class="callout-icon-container">
430<i class="callout-icon no-icon"></i>
431</div>
432<div class="callout-title-container flex-fill">
433<span class="screen-reader-only">Tip</span>My AI use policy<a href="#fn1" class="footnote-ref" id="fnref1" role="doc-noteref"><sup>1</sup></a>
434</div>
435</div>
436<div class="callout-body-container callout-body">
437<p>If you choose to use AI for any of the assignments for this class, you should pay attention to where you obtained any relevant information. Submitting work created by a generative AI as your own in any assignment is considered plagiarism, and therefore an academic integrity violation, just the same as copying work from any other source.</p>
438<p><strong>Attribution</strong><br>
439* As with any other reference you might find, any directly copied text from generative AI should be in quotes and given a citation. Any summarized text from generative AI should be referenced. * Cite all AI tools when used or referred to in assigned work. For example, see how to cite generative AI in <a href="https://apastyle.apa.org/blog/how-to-cite-chatgpt" target="_blank">APA</a>, <a href="https://style.mla.org/citing-generative-ai/" target="_blank">MLA</a>, or <a href="https://www.chicagomanualofstyle.org/qanda/data/faq/topics/Documentation/faq0422.html" target="_blank">Chicago</a> styles.</p>
440<p><strong>Permitted</strong></p>
441<ul>
442<li>Clarifying concepts (after attempting to understand them yourself, and then checking course materials or other credible sources for accuracy)</li>
443<li>Organizing and outlining your thoughts</li>
444<li>Grammar and spelling assistance</li>
445<li>Asking AI for practice questions or explanations of concepts (after attempting them yourself first), then checking your understanding against course materials</li>
446<li>Using AI to generate examples, counterarguments, or alternative perspectives that help you develop more nuanced thinking</li>
447<li>Debugging code, checking syntax, or troubleshooting errors (with the expectation that you understand and <strong>can explain</strong> any final code that you submit)</li>
448<li>Asking for help understanding a concept (please include “do not generate code. only explain in words.” to the prompt).</li>
449</ul>
450<p><strong>Not permitted</strong></p>
451<ul>
452<li>Having AI generate any sentences or paragraphs that appear in your final work without quotation marks and attribution</li>
453<li>Using AI to write arguments, code, proofs, or problem solutions that you submit as your own</li>
454<li>Generating code for an assignment (please include “do not generate code. only explain in words.” within any prompt designed to help you understand ideas from the course)</li>
455<li>Asking AI to outline or structure your assignment before you have developed your own approach</li>
456<li>Using AI to summarize readings or course materials in place of doing the reading yourself</li>
457<li>Submitting code (or full chunks of code) that has been written in whole by AI</li>
458</ul>
459<p><strong>My commitment</strong><br>
460I commit to not using AI to assess any part of your work. I will fully engage with your assignments without the use of AI.</p>
461</div>
462</div>
463</section>
464</section>
465<section id="advice" class="level4">
466<h4 class="anchored" data-anchor-id="advice">Advice:</h4>
467<p>Please email and / or set up a time to talk if you have any questions about or difficulty with the material, the computing, or the course. Talk to me as soon as possible if you find yourself struggling. The material will build on itself, so it will be much easier to catch up if the concepts get clarified earlier rather than later. This semester is going to be fun. Let’s do it.</p>
468</section>
469</section>
470<section id="philosophy-on-ai-use" class="level2">
471<h2 class="anchored" data-anchor-id="philosophy-on-ai-use">Philosophy on AI use</h2>
472<p>The goals of the course including <strong>learning</strong> core content and becoming skilled at using analysis tools accurately and effectively. While sometimes quite helpful, there are ways that AI can get in the way of the <strong>learning</strong>, for example:</p>
473<ul>
474<li>Learning takes struggle, and generative AI usually removes the struggle.</li>
475<li>Generative AI will often be wrong, maybe because it doesn’t understand the prompt or maybe because it is hallucinating.</li>
476<li>Learning takes practice, particularly by building muscles related to creative and independent thinking. Generative AI removes the practice.</li>
477</ul>
478<p>There are also ways that AI can be <strong>ethically problematic</strong>, for example:</p>
479<ul>
480<li>Generative AI queries use large amounts of resources.</li>
481<li>Generative AI is based on intellectual property (often illegally) taken from scholars, artists, and journalists.</li>
482<li>The rise of generative AI impacts the number of jobs available to people like you.</li>
483</ul>
484<p>I encourage you to reflect on your use of AI in this class and elsewhere. Is your use consistent with the <strong>learning</strong> that brings you to a place like Pomona College? Are you considering the <strong>ethical ramifications</strong> associated with using AI? See the academic honesty part of the syllabus for generative AI policy.</p>
485<div class="callout callout-style-default callout-tip no-icon callout-titled">
486<div class="callout-header d-flex align-content-center">
487<div class="callout-icon-container">
488<i class="callout-icon no-icon"></i>
489</div>
490<div class="callout-title-container flex-fill">
491<span class="screen-reader-only">Tip</span>Grading
492</div>
493</div>
494<div class="callout-body-container callout-body">
495<ul>
496<li>15% homework</li>
497<li>60% in-class quizzes</li>
498<li>20% projects &amp; final presentation</li>
499<li>5% class engagement</li>
500</ul>
501</div>
502</div>
503
504
505</section>
506</section>
507
508
509<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document" role="doc-endnotes"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>
510
511<ol>
512<li id="fn1"><p>Many of the ideas below are from https://provost.tufts.edu/celt/online-resources/artificial-intelligence/ai-syllabus-statements/<a href="#fnref1" class="footnote-back" role="doc-backlink">↩︎</a></p></li>
513</ol>
514</section><section class="quarto-appendix-contents" id="quarto-reuse"><h2 class="anchored quarto-appendix-heading">Reuse</h2><div class="quarto-appendix-contents"><div>CC-BY-SA-4.0</div></div></section></div></main> <!-- /main -->
515<script id="quarto-html-after-body" type="application/javascript">
516  window.document.addEventListener("DOMContentLoaded", function (event) {
517    const icon = "";
518    const anchorJS = new window.AnchorJS();
519    anchorJS.options = {
520      placement: 'right',
521      icon: icon
522    };
523    anchorJS.add('.anchored');
524    const isCodeAnnotation = (el) => {
525      for (const clz of el.classList) {
526        if (clz.startsWith('code-annotation-')) {                     
527          return true;
528        }
529      }
530      return false;
531    }
532    const onCopySuccess = function(e) {
533      // button target
534      const button = e.trigger;
535      // don't keep focus
536      button.blur();
537      // flash "checked"
538      button.classList.add('code-copy-button-checked');
539      var currentTitle = button.getAttribute("title");
540      button.setAttribute("title", "Copied!");
541      let tooltip;
542      if (window.bootstrap) {
543        button.setAttribute("data-bs-toggle", "tooltip");
544        button.setAttribute("data-bs-placement", "left");
545        button.setAttribute("data-bs-title", "Copied!");
546        tooltip = new bootstrap.Tooltip(button, 
547          { trigger: "manual", 
548            customClass: "code-copy-button-tooltip",
549            offset: [0, -8]});
550        tooltip.show();    
551      }
552      setTimeout(function() {
553        if (tooltip) {
554          tooltip.hide();
555          button.removeAttribute("data-bs-title");
556          button.removeAttribute("data-bs-toggle");
557          button.removeAttribute("data-bs-placement");
558        }
559        button.setAttribute("title", currentTitle);
560        button.classList.remove('code-copy-button-checked');
561      }, 1000);
562      // clear code selection
563      e.clearSelection();
564    }
565    const getTextToCopy = function(trigger) {
566      const outerScaffold = trigger.parentElement.cloneNode(true);
567      const codeEl = outerScaffold.querySelector('code');
568      for (const childEl of codeEl.children) {
569        if (isCodeAnnotation(childEl)) {
570          childEl.remove();
571        }
572      }
573      return codeEl.innerText;
574    }
575    const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', {
576      text: getTextToCopy
577    });
578    clipboard.on('success', onCopySuccess);
579    if (window.document.getElementById('quarto-embedded-source-code-modal')) {
580      const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', {
581        text: getTextToCopy,
582        container: window.document.getElementById('quarto-embedded-source-code-modal')
583      });
584      clipboardModal.on('success', onCopySuccess);
585    }
586      var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//);
587      var mailtoRegex = new RegExp(/^mailto:/);
588        var filterRegex = new RegExp("https:\/\/ds002r-fds\.netlify\.app\/");
589      var isInternal = (href) => {
590          return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href);
591      }
592      // Inspect non-navigation links and adorn them if external
593     var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)');
594      for (var i=0; i<links.length; i++) {
595        const link = links[i];
596        if (!isInternal(link.href)) {
597          // undo the damage that might have been done by quarto-nav.js in the case of
598          // links that we want to consider external
599          if (link.dataset.originalHref !== undefined) {
600            link.href = link.dataset.originalHref;
601          }
602        }
603      }
604    function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) {
605      const config = {
606        allowHTML: true,
607        maxWidth: 500,
608        delay: 100,
609        arrow: false,
610        appendTo: function(el) {
611            return el.parentElement;
612        },
613        interactive: true,
614        interactiveBorder: 10,
615        theme: 'quarto',
616        placement: 'bottom-start',
617      };
618      if (contentFn) {
619        config.content = contentFn;
620      }
621      if (onTriggerFn) {
622        config.onTrigger = onTriggerFn;
623      }
624      if (onUntriggerFn) {
625        config.onUntrigger = onUntriggerFn;
626      }
627      window.tippy(el, config); 
628    }
629    const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
630    for (var i=0; i<noterefs.length; i++) {
631      const ref = noterefs[i];
632      tippyHover(ref, function() {
633        // use id or data attribute instead here
634        let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
635        try { href = new URL(href).hash; } catch {}
636        const id = href.replace(/^#\/?/, "");
637        const note = window.document.getElementById(id);
638        if (note) {
639          return note.innerHTML;
640        } else {
641          return "";
642        }
643      });
644    }
645    const xrefs = window.document.querySelectorAll('a.quarto-xref');
646    const processXRef = (id, note) => {
647      // Strip column container classes
648      const stripColumnClz = (el) => {
649        el.classList.remove("page-full", "page-columns");
650        if (el.children) {
651          for (const child of el.children) {
652            stripColumnClz(child);
653          }
654        }
655      }
656      stripColumnClz(note)
657      if (id === null || id.startsWith('sec-')) {
658        // Special case sections, only their first couple elements
659        const container = document.createElement("div");
660        if (note.children && note.children.length > 2) {
661          container.appendChild(note.children[0].cloneNode(true));
662          for (let i = 1; i < note.children.length; i++) {
663            const child = note.children[i];
664            if (child.tagName === "P" && child.innerText === "") {
665              continue;
666            } else {
667              container.appendChild(child.cloneNode(true));
668              break;
669            }
670          }
671          if (window.Quarto?.typesetMath) {
672            window.Quarto.typesetMath(container);
673          }
674          return container.innerHTML
675        } else {
676          if (window.Quarto?.typesetMath) {
677            window.Quarto.typesetMath(note);
678          }
679          return note.innerHTML;
680        }
681      } else {
682        // Remove any anchor links if they are present
683        const anchorLink = note.querySelector('a.anchorjs-link');
684        if (anchorLink) {
685          anchorLink.remove();
686        }
687        if (window.Quarto?.typesetMath) {
688          window.Quarto.typesetMath(note);
689        }
690        if (note.classList.contains("callout")) {
691          return note.outerHTML;
692        } else {
693          return note.innerHTML;
694        }
695      }
696    }
697    for (var i=0; i<xrefs.length; i++) {
698      const xref = xrefs[i];
699      tippyHover(xref, undefined, function(instance) {
700        instance.disable();
701        let url = xref.getAttribute('href');
702        let hash = undefined; 
703        if (url.startsWith('#')) {
704          hash = url;
705        } else {
706          try { hash = new URL(url).hash; } catch {}
707        }
708        if (hash) {
709          const id = hash.replace(/^#\/?/, "");
710          const note = window.document.getElementById(id);
711          if (note !== null) {
712            try {
713              const html = processXRef(id, note.cloneNode(true));
714              instance.setContent(html);
715            } finally {
716              instance.enable();
717              instance.show();
718            }
719          } else {
720            // See if we can fetch this
721            fetch(url.split('#')[0])
722            .then(res => res.text())
723            .then(html => {
724              const parser = new DOMParser();
725              const htmlDoc = parser.parseFromString(html, "text/html");
726              const note = htmlDoc.getElementById(id);
727              if (note !== null) {
728                const html = processXRef(id, note);
729                instance.setContent(html);
730              } 
731            }).finally(() => {
732              instance.enable();
733              instance.show();
734            });
735          }
736        } else {
737          // See if we can fetch a full url (with no hash to target)
738          // This is a special case and we should probably do some content thinning / targeting
739          fetch(url)
740          .then(res => res.text())
741          .then(html => {
742            const parser = new DOMParser();
743            const htmlDoc = parser.parseFromString(html, "text/html");
744            const note = htmlDoc.querySelector('main.content');
745            if (note !== null) {
746              // This should only happen for chapter cross references
747              // (since there is no id in the URL)
748              // remove the first header
749              if (note.children.length > 0 && note.children[0].tagName === "HEADER") {
750                note.children[0].remove();
751              }
752              const html = processXRef(null, note);
753              instance.setContent(html);
754            } 
755          }).finally(() => {
756            instance.enable();
757            instance.show();
758          });
759        }
760      }, function(instance) {
761      });
762    }
763        let selectedAnnoteEl;
764        const selectorForAnnotation = ( cell, annotation) => {
765          let cellAttr = 'data-code-cell="' + cell + '"';
766          let lineAttr = 'data-code-annotation="' +  annotation + '"';
767          const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
768          return selector;
769        }
770        const selectCodeLines = (annoteEl) => {
771          const doc = window.document;
772          const targetCell = annoteEl.getAttribute("data-target-cell");
773          const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
774          const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
775          const lines = annoteSpan.getAttribute("data-code-lines").split(",");
776          const lineIds = lines.map((line) => {
777            return targetCell + "-" + line;
778          })
779          let top = null;
780          let height = null;
781          let parent = null;
782          if (lineIds.length > 0) {
783              //compute the position of the single el (top and bottom and make a div)
784              const el = window.document.getElementById(lineIds[0]);
785              top = el.offsetTop;
786              height = el.offsetHeight;
787              parent = el.parentElement.parentElement;
788            if (lineIds.length > 1) {
789              const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
790              const bottom = lastEl.offsetTop + lastEl.offsetHeight;
791              height = bottom - top;
792            }
793            if (top !== null && height !== null && parent !== null) {
794              // cook up a div (if necessary) and position it 
795              let div = window.document.getElementById("code-annotation-line-highlight");
796              if (div === null) {
797                div = window.document.createElement("div");
798                div.setAttribute("id", "code-annotation-line-highlight");
799                div.style.position = 'absolute';
800                parent.appendChild(div);
801              }
802              div.style.top = top - 2 + "px";
803              div.style.height = height + 4 + "px";
804              div.style.left = 0;
805              let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
806              if (gutterDiv === null) {
807                gutterDiv = window.document.createElement("div");
808                gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
809                gutterDiv.style.position = 'absolute';
810                const codeCell = window.document.getElementById(targetCell);
811                const gutter = codeCell.querySelector('.code-annotation-gutter');
812                gutter.appendChild(gutterDiv);
813              }
814              gutterDiv.style.top = top - 2 + "px";
815              gutterDiv.style.height = height + 4 + "px";
816            }
817            selectedAnnoteEl = annoteEl;
818          }
819        };
820        const unselectCodeLines = () => {
821          const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
822          elementsIds.forEach((elId) => {
823            const div = window.document.getElementById(elId);
824            if (div) {
825              div.remove();
826            }
827          });
828          selectedAnnoteEl = undefined;
829        };
830          // Handle positioning of the toggle
831      window.addEventListener(
832        "resize",
833        throttle(() => {
834          elRect = undefined;
835          if (selectedAnnoteEl) {
836            selectCodeLines(selectedAnnoteEl);
837          }
838        }, 10)
839      );
840      function throttle(fn, ms) {
841      let throttle = false;
842      let timer;
843        return (...args) => {
844          if(!throttle) { // first call gets through
845              fn.apply(this, args);
846              throttle = true;
847          } else { // all the others get throttled
848              if(timer) clearTimeout(timer); // cancel #2
849              timer = setTimeout(() => {
850                fn.apply(this, args);
851                timer = throttle = false;
852              }, ms);
853          }
854        };
855      }
856        // Attach click handler to the DT
857        const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
858        for (const annoteDlNode of annoteDls) {
859          annoteDlNode.addEventListener('click', (event) => {
860            const clickedEl = event.target;
861            if (clickedEl !== selectedAnnoteEl) {
862              unselectCodeLines();
863              const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
864              if (activeEl) {
865                activeEl.classList.remove('code-annotation-active');
866              }
867              selectCodeLines(clickedEl);
868              clickedEl.classList.add('code-annotation-active');
869            } else {
870              // Unselect the line
871              unselectCodeLines();
872              clickedEl.classList.remove('code-annotation-active');
873            }
874          });
875        }
876    const findCites = (el) => {
877      const parentEl = el.parentElement;
878      if (parentEl) {
879        const cites = parentEl.dataset.cites;
880        if (cites) {
881          return {
882            el,
883            cites: cites.split(' ')
884          };
885        } else {
886          return findCites(el.parentElement)
887        }
888      } else {
889        return undefined;
890      }
891    };
892    var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
893    for (var i=0; i<bibliorefs.length; i++) {
894      const ref = bibliorefs[i];
895      const citeInfo = findCites(ref);
896      if (citeInfo) {
897        tippyHover(citeInfo.el, function() {
898          var popup = window.document.createElement('div');
899          citeInfo.cites.forEach(function(cite) {
900            var citeDiv = window.document.createElement('div');
901            citeDiv.classList.add('hanging-indent');
902            citeDiv.classList.add('csl-entry');
903            var biblioDiv = window.document.getElementById('ref-' + cite);
904            if (biblioDiv) {
905              citeDiv.innerHTML = biblioDiv.innerHTML;
906            }
907            popup.appendChild(citeDiv);
908          });
909          return popup.innerHTML;
910        });
911      }
912    }
913  });
914  </script>
914
915</div> <!-- /content -->
916<footer class="footer">
917  <div class="nav-footer">
918    <div class="nav-footer-left">
919<p><a href="https://hardin47.netlify.app/research/"><i class="fa-solid fa-book" aria-label="book"></i></a> <a href="https://hardin47.netlify.app/resume.pdf" target="_blank"><i class="fa-solid fa-bookmark"></i></a> <a href="mailto:[email protected]" target="_blank"><i class="fa-solid fa-at"></i></a> <a href="https://scholar.google.com/citations?user=c5Y77poAAAAJ&amp;hl=en" target="_blank"><i class="fa-brands fa-google-scholar"></i></a> <a href="https://www.researchgate.net/scientific-contributions/Johanna-Hardin-9764530" target="_blank"><i class="fa-brands fa-researchgate"></i></a><br>
920<a href="https://github.com/hardin47" target="_blank"><i class="fa-brands fa-github"></i></a> <a href="https://www.linkedin.com/in/jo-hardin-b91a4b55" target="_blank"><i class="fa-brands fa-linkedin-in"></i></a></p>
921</div>   
922    <div class="nav-footer-center">
923      <ul class="footer-items list-unstyled">
924    <li class="nav-item">
925 <br> © Jo Hardin, 2026 -- <a href="mailto: [email protected]">[email protected]</a> -- <a href="https://hardin47.netlify.app/">https://hardin47.netlify.app/</a> <br> <br>
926DS002R -- Foundations of Data Science in R -- Pomona College <br>
927  </li>  
928</ul>
929    </div>
930    <div class="nav-footer-right">
931      &nbsp;
932    </div>
933  </div>
934</footer>
935
936
937
938
939</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.