]> code.communitydata.science - stats_class_2019.git/blobdiff - problem_sets/week_04/ps4-worked_solution.html
adding wk7 solutions; tweak to wk 6
[stats_class_2019.git] / problem_sets / week_04 / ps4-worked_solution.html
index cbb90a617090a2ef964d9654700d79fd9194e7e5..19bd13cfb6200baad9a299708dfc6cffc237349f 100644 (file)
@@ -11,7 +11,7 @@
 
 <meta name="author" content="Aaron Shaw" />
 
 
 <meta name="author" content="Aaron Shaw" />
 
-<meta name="date" content="2019-04-16" />
+<meta name="date" content="2019-04-25" />
 
 <title>Week 4 Problem set: Worked solutions</title>
 
 
 <title>Week 4 Problem set: Worked solutions</title>
 
@@ -195,7 +195,7 @@ $(document).ready(function () {
 Northwestern University<br />
 MTS 525</h3>
 <h4 class="author">Aaron Shaw</h4>
 Northwestern University<br />
 MTS 525</h3>
 <h4 class="author">Aaron Shaw</h4>
-<h4 class="date">April 16, 2019</h4>
+<h4 class="date">April 25, 2019</h4>
 
 </div>
 
 
 </div>
 
@@ -204,28 +204,21 @@ MTS 525</h3>
 <h1>Programming challenges</h1>
 <div id="pc2" class="section level2">
 <h2>PC2</h2>
 <h1>Programming challenges</h1>
 <div id="pc2" class="section level2">
 <h2>PC2</h2>
-<pre class="r"><code>## You'll need to edit these first lines to work on your own machine
-##
-## Note that for working with .Rmd files interactively in Rstudio you may find it easier to do this 
-## using the drop down menus: &quot;Session&quot; → &quot;Set Working Directory&quot; → &quot;To Source File Location&quot; 
-##
-
-## setwd(&quot;~/Documents/Teaching/2019/stats/&quot;)
+<p>You may need to edit these first lines to work on your own machine. Note that for working with .Rmd files interactively in Rstudio you may find it easier to do this using the drop down menus: “Session” → “Set Working Directory” → “To Source File Location”</p>
+<pre class="r"><code>## setwd(&quot;~/Documents/Teaching/2019/stats/&quot;)
 ## list.files(&quot;data/week_04&quot;)
 
 mobile &lt;- read.csv(&quot;data/week_04/COS-Statistics-Mobile_Sessions.csv&quot;)
 ## list.files(&quot;data/week_04&quot;)
 
 mobile &lt;- read.csv(&quot;data/week_04/COS-Statistics-Mobile_Sessions.csv&quot;)
-total &lt;- read.csv(&quot;data/week_04/COS-Statistics-Gov-Domains-Only.csv&quot;)
-
-
-summary.df &lt;- function (d) {
+total &lt;- read.csv(&quot;data/week_04/COS-Statistics-Gov-Domains-Only.csv&quot;)</code></pre>
+<p>I’ll write a little function to help inspect the data. Make sure you understand what the last line of the function is doing.</p>
+<pre class="r"><code>summary.df &lt;- function (d) {
     print(nrow(d))
     print(ncol(d))
     print(head(d))
     print(d[sample(seq(1, nrow(d)), 5),])
     print(nrow(d))
     print(ncol(d))
     print(head(d))
     print(d[sample(seq(1, nrow(d)), 5),])
-}
-
-## run these two lines a few times to look at the numbers
-summary.df(mobile)</code></pre>
+}</code></pre>
+<p>Then I can run these two lines a few times to look at some samples</p>
+<pre class="r"><code>summary.df(mobile)</code></pre>
 <pre><code>## [1] 231
 ## [1] 8
 ##   Operating_System Sessions New_Sessions New_Users Bounce_Rate
 <pre><code>## [1] 231
 ## [1] 8
 ##   Operating_System Sessions New_Sessions New_Users Bounce_Rate
@@ -243,17 +236,17 @@ summary.df(mobile)</code></pre>
 ## 5            2.10            0:02:24 01/01/2015 12:00:00 AM
 ## 6            1.82            0:01:01 01/01/2015 12:00:00 AM
 ##     Operating_System Sessions New_Sessions New_Users Bounce_Rate
 ## 5            2.10            0:02:24 01/01/2015 12:00:00 AM
 ## 6            1.82            0:01:01 01/01/2015 12:00:00 AM
 ##     Operating_System Sessions New_Sessions New_Users Bounce_Rate
-## 51           Samsung       59        44.07        26       77.97
-## 160            Nokia       12       100.00        12      100.00
-## 162       Firefox OS        6       100.00         6        0.00
-## 224        (not set)      419        87.11       365       74.22
-## 172               LG        6       100.00         6        0.00
+## 182 Playstation Vita        6       100.00         6       100.0
+## 214          Android   214077        47.17    100978        59.4
+## 194          Android   178625        47.32     84526        57.4
+## 92          Series40        8       100.00         8       100.0
+## 14  Playstation Vita        6       100.00         6       100.0
 ##     PagesPerSession AvgSessionDuration                  Month
 ##     PagesPerSession AvgSessionDuration                  Month
-## 51             1.54            0:03:01 04/01/2015 12:00:00 AM
-## 160            1.00            0:00:00 10/01/2015 12:00:00 AM
-## 162            2.00            0:00:02 10/01/2015 12:00:00 AM
-## 224            1.37            0:01:09 08/01/2016 12:00:00 AM
-## 172            1.83            0:01:37 12/01/2015 12:00:00 AM</code></pre>
+## 182            1.00            0:00:00 01/01/2016 12:00:00 AM
+## 214            3.65            0:04:45 07/01/2016 12:00:00 AM
+## 194            3.65            0:04:48 03/01/2016 12:00:00 AM
+## 92             1.00            0:00:00 07/01/2015 12:00:00 AM
+## 14             1.00            0:00:00 01/01/2015 12:00:00 AM</code></pre>
 <pre class="r"><code>summary.df(total)</code></pre>
 <pre><code>## [1] 1242
 ## [1] 7
 <pre class="r"><code>summary.df(total)</code></pre>
 <pre><code>## [1] 1242
 ## [1] 7
@@ -271,25 +264,354 @@ summary.df(mobile)</code></pre>
 ## 4       69.29        46.42 04/01/2015 12:00:00 AM
 ## 5       59.57        18.76 04/01/2015 12:00:00 AM
 ## 6       25.67        21.74 04/01/2015 12:00:00 AM
 ## 4       69.29        46.42 04/01/2015 12:00:00 AM
 ## 5       59.57        18.76 04/01/2015 12:00:00 AM
 ## 6       25.67        21.74 04/01/2015 12:00:00 AM
-##                              domain pageviews unique.pageviews
-## 963    sdotperformance.seattle.gov/        20               15
-## 1022            obrien.seattle.gov/       283              241
-## 914     lc317web.light.seattle.gov/         4                4
-## 455        mayormurray.seattle.gov/      9896             8925
-## 744  councilconnection.seattle.gov/         2                2
-##      average.time.on.page bounce.rate exit.percent                  month
-## 963               0:00:13       81.82        55.00 01/01/2016 12:00:00 AM
-## 1022              0:01:51        0.61         0.34 02/01/2016 12:00:00 AM
-## 914               0:00:04        0.00        50.00 01/01/2016 12:00:00 AM
-## 455               0:03:23       90.59        87.12 06/01/2015 12:00:00 AM
-## 744               0:00:00        1.00         1.00 09/01/2015 12:00:00 AM</code></pre>
-<pre class="r"><code>## PC3. Using the top 5000 dataset, create a new data frame that one
-## column per month (as described in the data) and a second column is
-## the total number of views made to all pages in the dataset over
-## that month.
-
-## first create a table/array using tapply
-total.views.bymonth.tbl &lt;- tapply(total$pageviews, total$month, sum)
+##                         domain pageviews unique.pageviews
+## 542 dpdwinw101.ad.seattle.gov/        52               25
+## 678        murray.seattle.gov/     41246            35629
+## 776   consultants.seattle.gov/      2790             2203
+## 808  perspectives.seattle.gov/        46               44
+## 644                                   NA               NA
+##     average.time.on.page bounce.rate exit.percent                  month
+## 542               125.76         0.0        11.54 07/01/2015 12:00:00 AM
+## 678              0:02:38         0.8         0.69 09/01/2015 12:00:00 AM
+## 776              0:01:10      5446.0      3391.00 10/01/2015 12:00:00 AM
+## 808              0:02:17      8667.0      4130.00 10/01/2015 12:00:00 AM
+## 644                               NA           NA</code></pre>
+<p>I can check for missing values and summarize the different columns using <code>lapply</code>:</p>
+<pre class="r"><code>lapply(total, summary)</code></pre>
+<pre><code>## $domain
+##                                               
+##                                            34 
+##                             2035.seattle.gov/ 
+##                                            15 
+##                          artbeat.seattle.gov/ 
+##                                            15 
+##                    atyourservice.seattle.gov/ 
+##                                            15 
+##                          bagshaw.seattle.gov/ 
+##                                            15 
+##                       bottomline.seattle.gov/ 
+##                                            15 
+##                       brainstorm.seattle.gov/ 
+##                                            15 
+##              buildingconnections.seattle.gov/ 
+##                                            15 
+##                  centerspotlight.seattle.gov/ 
+##                                            15 
+##                        cityclerk.seattle.gov/ 
+##                                            15 
+##                            clark.seattle.gov/ 
+##                                            15 
+##                            clerk.seattle.gov/ 
+##                                            15 
+##                    climatechange.seattle.gov/ 
+##                                            15 
+##                           conlin.seattle.gov/ 
+##                                            15 
+##                      consultants.seattle.gov/ 
+##                                            15 
+##                          council.seattle.gov/ 
+##                                            15 
+##                             find.seattle.gov/ 
+##                                            15 
+##                         fireline.seattle.gov/ 
+##                                            15 
+##                       frontporch.seattle.gov/ 
+##                                            15 
+##                           godden.seattle.gov/ 
+##                                            15 
+##                 grantsandfunding.seattle.gov/ 
+##                                            15 
+##                       greenspace.seattle.gov/ 
+##                                            15 
+##                   hackthecommute.seattle.gov/ 
+##                                            15 
+##                   humaninterests.seattle.gov/ 
+##                                            15 
+##                           licata.seattle.gov/ 
+##                                            15 
+##                          married.seattle.gov/ 
+##                                            15 
+##                      mayormcginn.seattle.gov/ 
+##                                            15 
+##                                m.seattle.gov/ 
+##                                            15 
+##                             news.seattle.gov/ 
+##                                            15 
+##                           obrien.seattle.gov/ 
+##                                            15 
+##                        onthemove.seattle.gov/ 
+##                                            15 
+##                         parkways.seattle.gov/ 
+##                                            15 
+##                     perspectives.seattle.gov/ 
+##                                            15 
+##                       powerlines.seattle.gov/ 
+##                                            15 
+##                        rasmussen.seattle.gov/ 
+##                                            15 
+##                          rectech.seattle.gov/ 
+##                                            15 
+##                           sawant.seattle.gov/ 
+##                                            15 
+##                         sdotblog.seattle.gov/ 
+##                                            15 
+##                  sdotperformance.seattle.gov/ 
+##                                            15 
+##                       seattlerdy.seattle.gov/ 
+##                                            15 
+##                       spdblotter.seattle.gov/ 
+##                                            15 
+##                         techtalk.seattle.gov/ 
+##                                            15 
+##                       thebuyline.seattle.gov/ 
+##                                            15 
+##                         thescoop.seattle.gov/ 
+##                                            15 
+##                             web6.seattle.gov/ 
+##                                            15 
+##                             www2.seattle.gov/ 
+##                                            15 
+##                        www.clerk.seattle.gov/ 
+##                                            15 
+##                            wwwqa.seattle.gov/ 
+##                                            15 
+##                           cmstrn.seattle.gov/ 
+##                                            14 
+##                             cms8.seattle.gov/ 
+##                                            13 
+##                           igxqa8.seattle.gov/ 
+##                                            13 
+##                                  seattle.gov/ 
+##                                            13 
+##                            cttab.seattle.gov/ 
+##                                            12 
+##                          okamoto.seattle.gov/ 
+##                                            12 
+##                             web5.seattle.gov/ 
+##                                            12 
+##                             web7.seattle.gov/ 
+##                                            12 
+##                        education.seattle.gov/ 
+##                                            11 
+##                             web1.seattle.gov/ 
+##                                            11 
+##                           webqa7.seattle.gov/ 
+##                                            11 
+##                             www4.seattle.gov/ 
+##                                            11 
+##                            alert.seattle.gov/ 
+##                                            10 
+##                           alerts.seattle.gov/ 
+##                                            10 
+##                             data.seattle.gov/ 
+##                                            10 
+##             seattle-govstat.demo.socrata.com/ 
+##                                            10 
+##                          connect.seattle.gov/ 
+##                                             9 
+##                             igx8.seattle.gov/ 
+##                                             9 
+##                           murray.seattle.gov/ 
+##                                             9 
+##                           webqa6.seattle.gov/ 
+##                                             9 
+##                              www.seattle.gov/ 
+##                                             9 
+##           www.seattle.gov.googleweblight.com/ 
+##                                             9 
+##                          alphaqa.seattle.gov/ 
+##                                             8 
+##                          cmsdev8.seattle.gov/ 
+##                                             8 
+##                    dpdwinw101.ad.seattle.gov/ 
+##                                             8 
+##          web6.seattle.gov.googleweblight.com/ 
+##                                             8 
+##                              cms.seattle.gov/ 
+##                                             7 
+##                             ctab.seattle.gov/ 
+##                                             7 
+##                     www.citylink.seattle.gov/ 
+##                                             7 
+##                   aboveandbeyond.seattle.gov/ 
+##                                             6 
+##                         citylink.seattle.gov/ 
+##                                             6 
+##                        langstoninstitute.org/ 
+##                                             6 
+##                      mayormurray.seattle.gov/ 
+##                                             6 
+##                    take21.seattlechannel.org/ 
+##                                             6 
+##                             web8.seattle.gov/ 
+##                                             6 
+##                           wwwdev.seattle.gov/ 
+##                                             6 
+##                        www.evergreenapps.org/ 
+##                                             6 
+##                     www.safeyouthseattle.org/ 
+##                                             6 
+##                            cityofseattle.gov/ 
+##                                             5 
+##                councilconnection.seattle.gov/ 
+##                                             5 
+##                     filmandmusic.seattle.gov/ 
+##                                             5 
+##                         gonzalez.seattle.gov/ 
+##                                             5 
+##                         homebase.seattle.gov/ 
+##                                             5 
+##                          igxdev8.seattle.gov/ 
+##                                             5 
+##                        www.mayor.seattle.gov/ 
+##                                             5 
+## www.seattle.gov.offcampus.lib.washington.edu/ 
+##                                             5 
+##                  capitalprojects.seattle.gov/ 
+##                                             4 
+##                    dpdwina307.ad.seattle.gov/ 
+##                                             4 
+##                          herbold.seattle.gov/ 
+##                                             4 
+##                          johnson.seattle.gov/ 
+##                                             4 
+##                           juarez.seattle.gov/ 
+##                                             4 
+##                                       (Other) 
+##                                            97 
+## 
+## $pageviews
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##       1      24     402   66417    2752 4172985      34 
+## 
+## $unique.pageviews
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##       1      17     285   28515    2204 3213093      34 
+## 
+## $average.time.on.page
+## 0:00:00         0:01:11 0:01:18    0.00 0:01:12 0:01:13 0:01:14 0:01:20 
+##     134      34      17      17      16      15      13      13      12 
+## 0:01:53 0:01:09 0:01:17 0:01:23 0:01:32 0:01:05 0:01:24 0:01:29 0:01:36 
+##      12      11      11      11      11      10      10      10      10 
+## 0:01:51 0:01:54 0:01:58 0:00:55 0:01:01 0:01:06 0:01:08 0:01:10 0:01:16 
+##      10      10      10       9       9       9       9       9       9 
+## 0:01:22 0:01:25 0:01:30 0:01:35 0:01:37 0:01:56 0:00:39 0:00:53 0:00:56 
+##       9       9       9       9       9       9       8       8       8 
+## 0:00:57 0:01:03 0:01:27 0:01:31 0:01:38 0:01:43 0:01:47 0:00:42 0:00:48 
+##       8       8       8       8       8       8       8       7       7 
+## 0:01:07 0:01:19 0:01:40 0:01:41 0:01:42 0:01:45 0:01:50 0:01:52 0:02:00 
+##       7       7       7       7       7       7       7       7       7 
+## 0:02:04 0:02:31 0:00:31 0:00:54 0:00:59 0:01:21 0:01:26 0:01:44 0:01:48 
+##       7       7       6       6       6       6       6       6       6 
+## 0:01:59 0:02:06 0:02:07 0:02:23 0:02:35 0:00:08 0:00:38 0:01:00 0:01:02 
+##       6       6       6       6       6       5       5       5       5 
+## 0:01:04 0:01:33 0:01:34 0:01:39 0:01:46 0:02:09 0:02:12 0:02:19 0:02:21 
+##       5       5       5       5       5       5       5       5       5 
+## 0:02:27 0:02:29 0:02:42 0:02:47 0:02:51 0:02:54 0:03:03 0:00:11 0:00:12 
+##       5       5       5       5       5       5       5       4       4 
+## 0:00:20 0:00:27 0:00:33 0:00:41 0:00:49 0:00:50 0:00:58 0:01:15 0:01:28 
+##       4       4       4       4       4       4       4       4       4 
+## (Other) 
+##     350 
+## 
+## $bounce.rate
+##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
+##     0.00    24.89    65.75   430.47    79.32 10000.00       34 
+## 
+## $exit.percent
+##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
+##     0.00    17.67    42.09   347.91    62.37 10000.00       34 
+## 
+## $month
+##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
+##                     34                     84                     84 
+## 02/01/2015 12:00:00 AM 02/01/2016 12:00:00 AM 03/01/2015 12:00:00 AM 
+##                     78                     79                     80 
+## 03/01/2016 12:00:00 AM 04/01/2015 12:00:00 AM 04/01/2016 12:00:00 AM 
+##                     88                     83                     87 
+## 05/01/2015 12:00:00 AM 06/01/2015 12:00:00 AM 07/01/2015 12:00:00 AM 
+##                     75                     84                     85 
+## 08/01/2015 12:00:00 AM 09/01/2015 12:00:00 AM 10/01/2015 12:00:00 AM 
+##                     70                     84                     77 
+## 12/01/2015 12:00:00 AM 
+##                     70</code></pre>
+<pre class="r"><code>lapply(mobile, summary)</code></pre>
+<pre><code>## $Operating_System
+##                           Android             Bada       BlackBerry 
+##               34               17                4               17 
+##       Firefox OS              iOS               LG              LGE 
+##                5               10               12                1 
+##              MOT     Nintendo 3DS            Nokia        (not set) 
+##                1                7               16               17 
+## Playstation Vita          Samsung         Series40        SymbianOS 
+##               12               17               10               17 
+##          Windows    Windows Phone 
+##               17               17 
+## 
+## $Sessions
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##       6      16     217   38469   10718  519563      34 
+## 
+## $New_Sessions
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##    0.44   45.53   84.62   72.65  100.00  100.00      34 
+## 
+## $New_Users
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##       6      13     124   17575    4853  236550      34 
+## 
+## $Bounce_Rate
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##    0.00   53.85   62.98   66.21   84.62  100.00      34 
+## 
+## $PagesPerSession
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##   1.000   1.210   1.860   2.082   2.500   9.000      34 
+## 
+## $AvgSessionDuration
+## 0:00:00         0:00:06 0:00:41 0:01:06 0:01:21 0:01:45 0:01:50 0:02:00 
+##      46      34       3       3       3       3       3       3       3 
+## 0:00:04 0:00:09 0:00:25 0:00:42 0:01:01 0:01:05 0:01:07 0:01:09 0:01:20 
+##       2       2       2       2       2       2       2       2       2 
+## 0:01:46 0:01:56 0:02:02 0:02:06 0:02:40 0:02:49 0:03:01 0:03:05 0:03:53 
+##       2       2       2       2       2       2       2       2       2 
+## 0:00:02 0:00:14 0:00:17 0:00:20 0:00:21 0:00:24 0:00:26 0:00:29 0:00:32 
+##       1       1       1       1       1       1       1       1       1 
+## 0:00:34 0:00:38 0:00:40 0:00:43 0:00:44 0:00:46 0:00:48 0:00:49 0:00:50 
+##       1       1       1       1       1       1       1       1       1 
+## 0:00:52 0:00:55 0:00:56 0:01:03 0:01:08 0:01:12 0:01:14 0:01:16 0:01:19 
+##       1       1       1       1       1       1       1       1       1 
+## 0:01:24 0:01:25 0:01:26 0:01:28 0:01:29 0:01:33 0:01:34 0:01:35 0:01:37 
+##       1       1       1       1       1       1       1       1       1 
+## 0:01:41 0:01:42 0:01:51 0:01:52 0:01:54 0:02:01 0:02:03 0:02:05 0:02:08 
+##       1       1       1       1       1       1       1       1       1 
+## 0:02:09 0:02:10 0:02:11 0:02:13 0:02:14 0:02:15 0:02:17 0:02:18 0:02:19 
+##       1       1       1       1       1       1       1       1       1 
+## 0:02:24 0:02:26 0:02:34 0:02:39 0:02:47 0:02:48 0:02:52 0:02:56 0:02:57 
+##       1       1       1       1       1       1       1       1       1 
+## 0:03:04 0:03:07 0:03:14 0:03:18 0:03:21 0:03:25 0:03:26 0:03:29 0:03:36 
+##       1       1       1       1       1       1       1       1       1 
+## (Other) 
+##      22 
+## 
+## $Month
+##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
+##                     34                     15                      9 
+## 02/01/2015 12:00:00 AM 02/01/2016 12:00:00 AM 03/01/2015 12:00:00 AM 
+##                     13                     11                     15 
+## 03/01/2016 12:00:00 AM 04/01/2015 12:00:00 AM 04/01/2016 12:00:00 AM 
+##                      9                     12                     10 
+## 05/01/2015 12:00:00 AM 06/01/2015 12:00:00 AM 07/01/2015 12:00:00 AM 
+##                     11                     14                     12 
+## 07/01/2016 12:00:00 AM 08/01/2015 12:00:00 AM 08/01/2016 12:00:00 AM 
+##                      9                     14                     10 
+## 09/01/2015 12:00:00 AM 10/01/2015 12:00:00 AM 12/01/2015 12:00:00 AM 
+##                     10                     12                     11</code></pre>
+</div>
+<div id="pc3" class="section level2">
+<h2>PC3</h2>
+<p>First let’s create a table/array using <code>tapply</code> that sums pageviews per month across all the sites:</p>
+<pre class="r"><code>total.views.bymonth.tbl &lt;- tapply(total$pageviews, total$month, sum)
 total.views.bymonth.tbl</code></pre>
 <pre><code>##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
 ##                     NA                6350440                3471121 
 total.views.bymonth.tbl</code></pre>
 <pre><code>##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
 ##                     NA                6350440                3471121 
@@ -303,13 +625,20 @@ total.views.bymonth.tbl</code></pre>
 ##                7045189                3067760                2961681 
 ## 12/01/2015 12:00:00 AM 
 ##                5745045</code></pre>
 ##                7045189                3067760                2961681 
 ## 12/01/2015 12:00:00 AM 
 ##                5745045</code></pre>
-<pre class="r"><code>## now construct a data frame
-total.views &lt;- data.frame(months=names(total.views.bymonth.tbl),
+<p>If you run <code>class</code> on <code>total.views.bymonth.tbl</code> you’ll notice it’s not a data frame yet. We can change that:</p>
+<pre class="r"><code>total.views &lt;- data.frame(months=names(total.views.bymonth.tbl),
                           total=total.views.bymonth.tbl)
 
                           total=total.views.bymonth.tbl)
 
-## zero out the rownames so it looks a bit better (this would all work
-## the same if i didn't do this part)
-rownames(total.views) &lt;- NULL
+head(total.views)</code></pre>
+<pre><code>##                                        months   total
+##                                                    NA
+## 01/01/2015 12:00:00 AM 01/01/2015 12:00:00 AM 6350440
+## 01/01/2016 12:00:00 AM 01/01/2016 12:00:00 AM 3471121
+## 02/01/2015 12:00:00 AM 02/01/2015 12:00:00 AM 5820453
+## 02/01/2016 12:00:00 AM 02/01/2016 12:00:00 AM 3366834
+## 03/01/2015 12:00:00 AM 03/01/2015 12:00:00 AM 6609602</code></pre>
+<p>Let’s cleanup the rownames (this would all work the same if i didn’t do this part).</p>
+<pre class="r"><code>rownames(total.views) &lt;- NULL
 
 head(total.views)</code></pre>
 <pre><code>##                   months   total
 
 head(total.views)</code></pre>
 <pre><code>##                   months   total
@@ -319,19 +648,14 @@ head(total.views)</code></pre>
 ## 4 02/01/2015 12:00:00 AM 5820453
 ## 5 02/01/2016 12:00:00 AM 3366834
 ## 6 03/01/2015 12:00:00 AM 6609602</code></pre>
 ## 4 02/01/2015 12:00:00 AM 5820453
 ## 5 02/01/2016 12:00:00 AM 3366834
 ## 6 03/01/2015 12:00:00 AM 6609602</code></pre>
-<pre class="r"><code>## PC4. Using the mobile dataset, create a new data frame where one
-## column is each month described in the data and the second is a
-## measure (estimate?) of the total number of views made by mobiles
-## (all platforms) over each month. This will will involve at least
-## two steps since total views are included. You'll need to first use
-## the data there to create a measure of the total views per platform.
-
-## first, multiply sessions by pages per session to get an estimate of
-## total pages
-mobile$total.pages &lt;- mobile$Sessions * mobile$PagesPerSession 
-
-# see above, this is more or less copy/pasted from above
-mobile.views.bymonth.tbl &lt;- tapply(mobile$total.pages, mobile$Month, sum)
+</div>
+<div id="pc4" class="section level2">
+<h2>PC4</h2>
+<p>Onwards to the mobile dataset!</p>
+<p>Here we have a challenge because we have to estimate total pageviews (it’s not given in the raw dataset). I’ll do this by multiplying sessions by pages-per-session. This assumes that the original pages-per-session calculation is precise, but I’m not sure what else we could do under the circumstances.</p>
+<pre class="r"><code>mobile$total.pages &lt;- mobile$Sessions * mobile$PagesPerSession </code></pre>
+<p>Then, making the views-per-month array is more or less copy/pasted from above:</p>
+<pre class="r"><code>mobile.views.bymonth.tbl &lt;- tapply(mobile$total.pages, mobile$Month, sum)
 mobile.views.bymonth.tbl</code></pre>
 <pre><code>##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
 ##                     NA              1399185.6               668275.2 
 mobile.views.bymonth.tbl</code></pre>
 <pre><code>##                        01/01/2015 12:00:00 AM 01/01/2016 12:00:00 AM 
 ##                     NA              1399185.6               668275.2 
@@ -346,52 +670,114 @@ mobile.views.bymonth.tbl</code></pre>
 ## 09/01/2015 12:00:00 AM 10/01/2015 12:00:00 AM 12/01/2015 12:00:00 AM 
 ##               564453.5              1285288.0              1223414.0</code></pre>
 <pre class="r"><code>mobile.views &lt;- data.frame(months=names(mobile.views.bymonth.tbl),
 ## 09/01/2015 12:00:00 AM 10/01/2015 12:00:00 AM 12/01/2015 12:00:00 AM 
 ##               564453.5              1285288.0              1223414.0</code></pre>
 <pre class="r"><code>mobile.views &lt;- data.frame(months=names(mobile.views.bymonth.tbl),
-                           mobile=mobile.views.bymonth.tbl)</code></pre>
-<pre class="r"><code>## PC5. Merge your two datasets together into a new dataset with
-## columns for each month, total views (across the top 5000 pages) and
-## total mobile views. Are there are missing data? Can you tell why?
-
-### TODO cleanup variable names to match
-
-views &lt;- merge(mobile.views, total.views, all.x=TRUE, all.y=TRUE, by=&quot;months&quot;)
-
-## these don't sort well at the moment because they're not really
-## dates, so lets recode them
-views$months &lt;- as.Date(views$months, format=&quot;%m/%d/%Y %H:%M:%S&quot;)
-
-## as then sort them
-views &lt;- views[sort.list(views$months),]
-
-## there's one line that is all missing, so lets drop that
-views &lt;- views[apply(views, 1, function (x) {!all(is.na(x))}),]
-
-## inspect it, looks like there's some missing data. lets drop
-## that. there are a few ways but complete.cases() might make most
-## cases
-views.complete &lt;- views[complete.cases(views),]</code></pre>
-<pre class="r"><code>## PC6. Create a new column in your merged dataset that describes your
-## best estimate of the proportion (or percentage, if you really
-## must!) of views that comes from mobile. Be able to talk about the
-## assumptions you've made here. Make sure that date, in this final
-## column, is a date or datetime object in R.
-
-views.complete$pct.mobile &lt;- views.complete$mobile / views.complete$total
-    
-## PC6. Graph this over time and be ready to describe: (a) your best
-## estimate of the proportion of views from mobiles to the Seattle
-## City website over time and (b) an indication of whether it's going
-## up or down.
-
-library(ggplot2)
-ggplot(data=views.complete) + aes(x=months, y=pct.mobile) + geom_point() + scale_y_continuous(limits=c(0, 1))</code></pre>
-<p><img src="data:image/png;base64,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" width="672" /></p>
+                           mobile=mobile.views.bymonth.tbl)
+rownames(mobile.views) &lt;- NULL</code></pre>
+</div>
+<div id="pc5" class="section level2">
+<h2>PC5</h2>
+<p>Now we merge the two datasets. Notice that I have created the <code>months</code> column in both datasets with <em>exactly</em> the same name.</p>
+<pre class="r"><code>views &lt;- merge(mobile.views, total.views, all.x=TRUE, all.y=TRUE, by=&quot;months&quot;)</code></pre>
+<p>These are sorted in strange ways and will be difficult to graph because the dates are stored as characters. Let’s convert them into Date objects. Then I can use <code>sort.list</code> to sort everything.</p>
+<pre class="r"><code>views$months &lt;- as.Date(views$months, format=&quot;%m/%d/%Y %H:%M:%S&quot;)
+
+views &lt;- views[sort.list(views$months),]</code></pre>
+<p>Take a look at the data. Some rows are missing observations. We can drop those rows using <code>complete.cases</code>:</p>
+<pre class="r"><code>lapply(views, summary)</code></pre>
+<pre><code>## $months
+##         Min.      1st Qu.       Median         Mean      3rd Qu. 
+## &quot;2015-01-01&quot; &quot;2015-05-01&quot; &quot;2015-09-01&quot; &quot;2015-09-20&quot; &quot;2016-02-01&quot; 
+##         Max.         NA's 
+## &quot;2016-08-01&quot;          &quot;1&quot; 
+## 
+## $mobile
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+##  564454  800843 1275315 1190013 1402086 1988848       1 
+## 
+## $total
+##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
+## 2961681 3557936 5820453 5348818 6576828 8084318       3</code></pre>
+<pre class="r"><code>views[rowSums(is.na(views)) &gt; 0,]</code></pre>
+<pre><code>##        months   mobile total
+## 13 2016-07-01 878142.6    NA
+## 15 2016-08-01 912435.4    NA
+## 1        &lt;NA&gt;       NA    NA</code></pre>
+<pre class="r"><code>views.complete &lt;- views[complete.cases(views),]</code></pre>
+</div>
+<div id="pc6" class="section level2">
+<h2>PC6</h2>
+<p>For my proportion measure, I’ll take the mobile views divided by the total views.</p>
+<pre class="r"><code>views.complete$prop.mobile &lt;- views.complete$mobile / views.complete$total</code></pre>
+</div>
+<div id="pc7." class="section level2">
+<h2>PC7.</h2>
+<pre class="r"><code>library(ggplot2)
+ggplot(data=views.complete) + aes(x=months, y=prop.mobile) + geom_point() + geom_line() + scale_y_continuous(limits=c(0, 1))</code></pre>
+<p><img src="data:image/png;base64,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" width="672" /></p>
+<ol style="list-style-type: lower-alpha">
+<li>For my estimate of the proportion I’ll just calculate an average from the monthly numbers:</li>
+</ol>
+<pre class="r"><code>mean(views.complete$prop.mobile)</code></pre>
+<pre><code>## [1] 0.2308486</code></pre>
+<ol start="2" style="list-style-type: lower-alpha">
+<li>From the graph, this proportion seems quite stable with the exception of a single outlier month in late 2015.</li>
+</ol>
 </div>
 </div>
 <div id="statistical-questions" class="section level1">
 <h1>Statistical questions</h1>
 </div>
 </div>
 <div id="statistical-questions" class="section level1">
 <h1>Statistical questions</h1>
+<div id="sq1-4.8" class="section level2">
+<h2>SQ1 — 4.8</h2>
+<p>The general formula for a confidence interval is <span class="math inline">\(point~estimate~±~z^*\times~SE\)</span>. First, identify the three different values. The point estimate is 45%, <span class="math inline">\(z^* = 2.58\)</span> for a 99% confidence level (that’s the number of standard deviations around the mean that ensure that 99% of a Z-score distribution is included), and <span class="math inline">\(SE = 2.4\%\)</span>.</p>
+<p>With this we can plug and chug:</p>
+<p><span class="math display">\[52\% ± 2.58 \times 2.4\% → (45.8\%, 58.2\%)\]</span></p>
+<p>From this data we are 99% confident that between 45.8% and 58.2% U.S. adult Twitter users get some news through the site.</p>
+</div>
+<div id="sq2-4.10" class="section level2">
+<h2>SQ2 — 4.10</h2>
+<ol style="list-style-type: lower-alpha">
+<li><p>False. See the answer to 4.8 above. With <span class="math inline">\(\alpha = 0.01\)</span>, we can consult the 99% confidence interval. It includes 50% but also goes lower.</p></li>
+<li><p>False. The standard error of the sample does not contain any information about the proportion of the population included in the sample. It measures the variability of the sample distribution.</p></li>
+<li><p>False. Increasing the sample size will decrease the standard error. Consider the formula: <span class="math inline">\(\frac{\sigma}{\sqrt{n}}\)</span>. A smaller <span class="math inline">\(n\)</span> will result in a larger standard error.</p></li>
+<li><p>False. All else being equal, a lower confidence interval will cover a narrower range. A higher interval will cover a wider range. To confirm this, revisit the formula in SQ1 above. and plug in the corresponding alpha value of .9, resulting in a <span class="math inline">\(z^*\)</span> value of 1.28 (see the Z-score table in the back of <em>OpenIntro</em>).</p></li>
+</ol>
+</div>
+<div id="sq3-4.19" class="section level2">
+<h2>SQ3 — 4.19</h2>
+<p>The hypotheses should be about the population mean (<span class="math inline">\(\mu\)</span>) and not the sample mean (<span class="math inline">\(\bar{x}\)</span>). The null hypothesis should have an equal sign. The alternative hypothesis should be about the critical value, not the sample mean. The following would have been better:</p>
+<p><span class="math display">\[H_0: \mu = 10~hours\]</span> <span class="math display">\[H_A: \mu \gt 10~hours\]</span></p>
+</div>
+<div id="sq4-4.32" class="section level2">
+<h2>SQ4 — 4.32</h2>
+<ol style="list-style-type: lower-alpha">
+<li>True. See part (d) of SQ2 above.</li>
+<li>False. A lower alpha value is the probability of Type 1 Error, so reducing the one reduces the other.</li>
+<li>False. Failure to reject the null is evidence that we cannot conclude that the true value is different from the null. This is <strong>very</strong> different from evidence that the null hypothesis is true.</li>
+<li>True. Consult the section of <em>OpenIntro</em> discussing statistical power and Type 2 Error.</li>
+<li>True. We’ll revisit this in a moment below, but consider the relationship between statistical test, the standard error, and the sample size. As the sample size increases towards infinity, the standard error approaches zero, resulting in arbitrarily precise point estimates that will result in rejecting the null hypothesis for <em>any</em> value of a test statistic for any critical value of <span class="math inline">\(\alpha\)</span>.</li>
+</ol>
+</div>
 </div>
 <div id="empirical-paper-questions" class="section level1">
 <h1>Empirical paper questions</h1>
 </div>
 <div id="empirical-paper-questions" class="section level1">
 <h1>Empirical paper questions</h1>
+<div id="eq1" class="section level2">
+<h2>EQ1</h2>
+<p>In my words (or rather formulas since I think that’s less ambiguous), the key pairs of null/alternative hypotheses look something like the following:</p>
+<p>Let <span class="math inline">\(\Delta\)</span> be the parameter estimate for the difference in mean percentage of positive (<span class="math inline">\(\mu_{pos}\)</span>) and negative (<span class="math inline">\(\mu_{neg}\)</span>) words between the experimental and control conditions for the treatments of reduced negative content (<span class="math inline">\(R_{neg}\)</span> and reduced positive content (<span class="math inline">\(R_{pos}\)</span>).</p>
+<p>For the reduced negative content conditions (the left-hand side of Figure 1), the paper tests:</p>
+<p><span class="math display">\[HR_{neg}1_0: \Delta_{\mu_{pos}} = 0\]</span> <span class="math display">\[HR_{neg}1_a: \Delta{\mu_{pos}} \gt 0\]</span> And: <span class="math display">\[HR_{neg}2_0: \Delta_{\mu_{neg}} = 0\]</span> <span class="math display">\[HR_{neg}2_a: \Delta_{\mu_{neg}} \lt 0\]</span> Then, for the reduced positive content conditions (the right-hand side of Figure 1), the paper tests:</p>
+<p><span class="math display">\[HR_{pos}1_0:~~ \Delta_{\mu_{pos}} = 0\]</span> <span class="math display">\[HR_{pos}1_a:~~ \Delta{\mu_{pos}} \lt 0\]</span></p>
+<p>And:</p>
+<p><span class="math display">\[HR_{pos}2_0:~~ \Delta_{\mu_{neg}} = 0\]</span> <span class="math display">\[HR_{pos}2_a:~~ \Delta_{\mu_{neg}} \gt 0\]</span> Note that the theories the authors used to motivate the study imply directions for the alternative hypotheses, but nothing in the description of the analysis suggests that they used one-tailed tests. I’ve written these all in terms of specific directions here to correspond with the theories stated in the paper. They could also (arguably more accurately) have been written in terms of inequalities (“<span class="math inline">\(\neq\)</span>”).</p>
+</div>
+<div id="eq2" class="section level2">
+<h2>EQ2</h2>
+<p>The authors’ estimates suggest that reduced negative News Feed content causes an increase in the percentage of positive words and a decrease in the percentage of negative words in subsequent News Feed posts by study participants (supporting <span class="math inline">\(HR_{neg}1_a\)</span> and <span class="math inline">\(HR_{neg}2_a\)</span> respectively).</p>
+<p>They also find that reduced positive News Feed content causes a decrease in the percentage of negative words and an increase in the percentage of positive words in susbequent News Feed posts (supporting <span class="math inline">\(HR_{pos}1_a\)</span> and <span class="math inline">\(HR_{pos}2_a\)</span>)</p>
+</div>
+<div id="eq3" class="section level2">
+<h2>EQ3</h2>
+<p>Cohen’s <span class="math inline">\(d\)</span> puts estimates of experimental effects in standardized units (much like a Z-score!) in order to help understand their size relative to the underlying distribution of the dependent variable(s). The d-values for each of the effects estimated in the paper are 0.02, 0.001, 0.02, and 0.008 respectively (in the order presented in the paper, not in order of the hypotheses above!). These are miniscule effects. However, the treatment itself is also quite narrow in scope, suggesting that the presence of any treatment effect at all is an indication of the underlying phenomenon (emotional contagion). Personally, I find it difficult to attribute much substantive significance to the results because I’m not even convinced that tiny shifts in the percentage of positive/negative words used in News Feed updates accurately index meaningful emotional shifts (maybe we could call it linguistic contagion instead?). Despite these concerns and the ethical considerations that attracted so much public attention, I consider this a clever, well-executed study and I think it’s quite compelling. I expect many of you will have different opinions of various kinds!</p>
+</div>
 </div>
 
 
 </div>
 
 

Community Data Science Collective || Want to submit a patch?