Link to Home

Question 1

# Using a for loop, write a function to calculate the number of zeroes in a numeric vector. Before entering the loop, set up a counter variable counter <- 0. Inside the loop, add 1 to counter each time you have a zero in the matrix. Finally, use return(counter) for the output.

my_vec <- sample(0:10, size=10)
print(my_vec)
##  [1]  7  9 10  8  5  0  2  1  6  4
counter <- 0

for(i in 1:length(my_vec)){
  if(my_vec[i] == 0){
    counter <- counter + 1
  }
}

print(counter)
## [1] 1

Question 2

# Use subsetting instead of a loop to rewrite the function as a single line of code.

my_vec <- sample(0:10, size=10)
print(my_vec)
##  [1] 10  5  1  8  2  9  7  6  3  4
count <- sum(my_vec == 0)
print(count)
## [1] 0

Question 3

# Write a function that takes as input two integers representing the number of rows and columns in a matrix. The output is a matrix of these dimensions in which each element is the product of the row number x the column number.

# Making the matrix

x <- 5
y <- 10

fake.matrix <- matrix(data=NA,nrow=x,ncol=y)
print(fake.matrix)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA
## [2,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA
## [3,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA
## [4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA
## [5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA
for (i in 1:nrow(fake.matrix)) {
  for (j in 1:ncol(fake.matrix)) {
    fake.matrix[i,j] <- i*j
  } # end of column j loop
} # end of row i loop

print(fake.matrix)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,]    1    2    3    4    5    6    7    8    9    10
## [2,]    2    4    6    8   10   12   14   16   18    20
## [3,]    3    6    9   12   15   18   21   24   27    30
## [4,]    4    8   12   16   20   24   28   32   36    40
## [5,]    5   10   15   20   25   30   35   40   45    50
# Creating the custom function to multiple col # by row #
row.times.col <- function(x=2,y=3){
  fake.matrix <- matrix(data=NA,nrow=x,ncol=y)
  for (i in 1:nrow(fake.matrix)) {
    for (j in 1:ncol(fake.matrix)) {
      fake.matrix[i,j] <- i*j
  } # end of column j loop
} # end of row i loop
return(fake.matrix)

}

# Testing with default values
row.times.col()
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    2    4    6
# Testing with inputting values
row.times.col(3,6)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    2    3    4    5    6
## [2,]    2    4    6    8   10   12
## [3,]    3    6    9   12   15   18
# In the next few lectures, you will learn how to do a randomization test on your data. We will complete some of the steps today to practice calling custom functions within a for loop. Use the code from the March 31st lecture (Randomization Tests) to complete the following steps:

# Simulate a dataset with 3 groups of data, each group drawn from a distribution with a different mean. The final data frame should have 1 column for group and 1 column for the response variable.

library(ggplot2)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble  3.1.6     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.4     ✓ stringr 1.4.0
## ✓ readr   2.1.1     ✓ forcats 0.5.1
## ✓ purrr   0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
group1 <- rnorm(100, mean = 50, sd = 5)
group2 <- rnorm(100, mean = 60, sd = 5)
group3 <- rnorm(100, mean = 40, sd = 5)

fake.data <- data.frame(group1, group2, group3)
print(fake.data)
##       group1   group2   group3
## 1   55.30097 60.98448 42.85358
## 2   45.77565 59.22336 41.29632
## 3   51.38747 49.45846 45.63879
## 4   53.66245 62.04339 40.17344
## 5   51.06825 58.20708 41.06396
## 6   51.15420 65.32038 44.57150
## 7   51.97781 60.01888 32.40184
## 8   54.98691 57.50200 50.46375
## 9   41.63882 61.77415 34.34152
## 10  55.57577 61.60411 36.66160
## 11  46.27885 61.29964 37.17992
## 12  53.30185 67.39351 35.96299
## 13  49.02449 65.98577 44.57832
## 14  51.34115 69.77518 46.57497
## 15  54.31033 64.31145 39.29983
## 16  51.35365 64.39120 40.19305
## 17  62.98269 59.44709 51.64911
## 18  41.30722 61.92355 32.19416
## 19  52.45012 68.25243 46.34583
## 20  51.12666 60.44221 38.44537
## 21  49.05181 56.84259 37.10303
## 22  57.85593 61.06153 41.16618
## 23  49.88636 58.53969 36.13779
## 24  46.66330 60.87513 41.56003
## 25  56.62993 51.77832 39.03001
## 26  56.55011 57.80312 38.08675
## 27  42.77633 61.95143 35.90583
## 28  47.49895 52.38177 38.46150
## 29  59.80305 66.80519 44.89225
## 30  55.19911 54.21044 34.05764
## 31  50.24445 58.30597 44.32619
## 32  46.49787 52.87537 40.01252
## 33  50.23836 52.95241 40.62626
## 34  51.25605 56.79428 42.22000
## 35  47.56662 71.74984 44.29766
## 36  49.39292 61.61667 48.45131
## 37  46.19662 67.04370 37.68822
## 38  47.71977 65.07772 37.05480
## 39  51.08094 55.78217 41.09816
## 40  44.61554 60.76949 41.51295
## 41  43.22816 62.72169 39.14270
## 42  50.26643 59.21150 50.85195
## 43  44.16160 63.86662 39.17627
## 44  53.22452 56.06127 41.43312
## 45  53.63191 53.50250 43.25869
## 46  46.95865 67.77312 43.63369
## 47  41.25335 64.22656 35.34603
## 48  50.62465 61.28932 50.13056
## 49  59.35419 65.71384 44.82918
## 50  56.41965 63.62600 33.94373
## 51  52.48291 61.05220 38.31894
## 52  41.88035 63.38647 42.91044
## 53  49.68522 54.91015 35.22213
## 54  59.27907 61.11253 38.64890
## 55  49.28418 61.25511 39.32895
## 56  49.65478 56.06732 36.84174
## 57  57.11773 62.37078 43.91306
## 58  50.13534 71.90059 38.24910
## 59  47.62843 56.47954 37.51796
## 60  41.98729 54.92327 40.18343
## 61  52.87563 55.36410 41.41148
## 62  47.72086 61.36580 37.84263
## 63  52.18359 61.29872 43.08481
## 64  47.35765 63.73366 35.50619
## 65  47.37532 44.67721 30.32574
## 66  45.68275 62.31464 33.72601
## 67  57.30089 59.74162 34.18659
## 68  62.47331 62.72486 44.51307
## 69  53.66123 62.54045 36.54830
## 70  45.28103 60.66052 35.54133
## 71  50.59687 60.25908 43.02132
## 72  53.64101 61.15459 37.24795
## 73  52.40548 58.62926 36.94701
## 74  54.67887 57.35500 44.80676
## 75  42.39649 51.82093 34.57114
## 76  49.91240 55.25407 33.76411
## 77  54.15359 53.31707 47.44069
## 78  50.24536 56.50488 39.62786
## 79  42.90786 67.55624 37.61046
## 80  50.81316 60.36892 33.38712
## 81  51.34679 59.09417 46.56143
## 82  55.10470 54.39782 36.15953
## 83  43.02123 60.41130 39.13486
## 84  46.20166 54.41029 38.82865
## 85  47.99529 56.46540 43.68443
## 86  45.11881 58.02866 41.77820
## 87  48.52488 52.55712 37.39302
## 88  48.28497 65.01679 36.73925
## 89  49.74533 61.75086 48.34594
## 90  49.07039 52.77490 39.27309
## 91  43.45748 65.46900 48.83552
## 92  54.95214 56.83170 39.74026
## 93  46.16332 53.45894 36.21345
## 94  47.61805 60.24934 36.21725
## 95  47.69296 59.81827 44.02914
## 96  45.20360 62.62147 42.80025
## 97  51.85081 55.50383 36.90362
## 98  52.74112 61.82861 25.04598
## 99  42.94049 53.86556 39.68609
## 100 52.24439 60.24970 33.77494
new.fake.data <- fake.data %>%
  pivot_longer(cols=group1:group3,
               names_to = "Group",
               values_to = "ResponseVariable")
head(new.fake.data)
## # A tibble: 6 × 2
##   Group  ResponseVariable
##   <chr>             <dbl>
## 1 group1             55.3
## 2 group2             61.0
## 3 group3             42.9
## 4 group1             45.8
## 5 group2             59.2
## 6 group3             41.3
# Write a custom function that 1) reshuffles the response variable, and 2) calculates the mean of each group in the reshuffled data. Store the means in a vector of length 3.

##################################################
# function: shuffleData
# randomize data for regression analysis and get the mean of newly shuffled values
# input: 2-column data frame (group, response)
# output: 2-column data frame (group, response)
#------------------------------------------------- 
shuffleData <- function(z=dataframe) {
                z$ResponseVariable <- sample(z$ResponseVariable)
                
z1 <- z[z$Group == "group1",]
z2 <- z[z$Group == "group2",]
z3 <- z[z$Group == "group3",]

mean1 <- mean(z1$ResponseVariable)
mean2 <- mean(z2$ResponseVariable)
mean3 <- mean(z3$ResponseVariable)

mean_vec <- c(mean1,mean2,mean3)

return(mean_vec)
}

shuffleData(new.fake.data)
## [1] 49.27772 50.16815 50.47529
# Use a for loop to repeat the function in b 100 times. Store the results in a data frame that has 1 column indicating the replicate number and 1 column for each new group mean, for a total of 4 columns.

# Make an empty matrix to start

a.matrix <- matrix(data = NA, nrow = 100, ncol = 3)
print(a.matrix)
##        [,1] [,2] [,3]
##   [1,]   NA   NA   NA
##   [2,]   NA   NA   NA
##   [3,]   NA   NA   NA
##   [4,]   NA   NA   NA
##   [5,]   NA   NA   NA
##   [6,]   NA   NA   NA
##   [7,]   NA   NA   NA
##   [8,]   NA   NA   NA
##   [9,]   NA   NA   NA
##  [10,]   NA   NA   NA
##  [11,]   NA   NA   NA
##  [12,]   NA   NA   NA
##  [13,]   NA   NA   NA
##  [14,]   NA   NA   NA
##  [15,]   NA   NA   NA
##  [16,]   NA   NA   NA
##  [17,]   NA   NA   NA
##  [18,]   NA   NA   NA
##  [19,]   NA   NA   NA
##  [20,]   NA   NA   NA
##  [21,]   NA   NA   NA
##  [22,]   NA   NA   NA
##  [23,]   NA   NA   NA
##  [24,]   NA   NA   NA
##  [25,]   NA   NA   NA
##  [26,]   NA   NA   NA
##  [27,]   NA   NA   NA
##  [28,]   NA   NA   NA
##  [29,]   NA   NA   NA
##  [30,]   NA   NA   NA
##  [31,]   NA   NA   NA
##  [32,]   NA   NA   NA
##  [33,]   NA   NA   NA
##  [34,]   NA   NA   NA
##  [35,]   NA   NA   NA
##  [36,]   NA   NA   NA
##  [37,]   NA   NA   NA
##  [38,]   NA   NA   NA
##  [39,]   NA   NA   NA
##  [40,]   NA   NA   NA
##  [41,]   NA   NA   NA
##  [42,]   NA   NA   NA
##  [43,]   NA   NA   NA
##  [44,]   NA   NA   NA
##  [45,]   NA   NA   NA
##  [46,]   NA   NA   NA
##  [47,]   NA   NA   NA
##  [48,]   NA   NA   NA
##  [49,]   NA   NA   NA
##  [50,]   NA   NA   NA
##  [51,]   NA   NA   NA
##  [52,]   NA   NA   NA
##  [53,]   NA   NA   NA
##  [54,]   NA   NA   NA
##  [55,]   NA   NA   NA
##  [56,]   NA   NA   NA
##  [57,]   NA   NA   NA
##  [58,]   NA   NA   NA
##  [59,]   NA   NA   NA
##  [60,]   NA   NA   NA
##  [61,]   NA   NA   NA
##  [62,]   NA   NA   NA
##  [63,]   NA   NA   NA
##  [64,]   NA   NA   NA
##  [65,]   NA   NA   NA
##  [66,]   NA   NA   NA
##  [67,]   NA   NA   NA
##  [68,]   NA   NA   NA
##  [69,]   NA   NA   NA
##  [70,]   NA   NA   NA
##  [71,]   NA   NA   NA
##  [72,]   NA   NA   NA
##  [73,]   NA   NA   NA
##  [74,]   NA   NA   NA
##  [75,]   NA   NA   NA
##  [76,]   NA   NA   NA
##  [77,]   NA   NA   NA
##  [78,]   NA   NA   NA
##  [79,]   NA   NA   NA
##  [80,]   NA   NA   NA
##  [81,]   NA   NA   NA
##  [82,]   NA   NA   NA
##  [83,]   NA   NA   NA
##  [84,]   NA   NA   NA
##  [85,]   NA   NA   NA
##  [86,]   NA   NA   NA
##  [87,]   NA   NA   NA
##  [88,]   NA   NA   NA
##  [89,]   NA   NA   NA
##  [90,]   NA   NA   NA
##  [91,]   NA   NA   NA
##  [92,]   NA   NA   NA
##  [93,]   NA   NA   NA
##  [94,]   NA   NA   NA
##  [95,]   NA   NA   NA
##  [96,]   NA   NA   NA
##  [97,]   NA   NA   NA
##  [98,]   NA   NA   NA
##  [99,]   NA   NA   NA
## [100,]   NA   NA   NA
# Write a for loop to get 100 rows of means
for(i in 1:100){
  a.matrix[i,] <- shuffleData(new.fake.data)
}

print(a.matrix)
##            [,1]     [,2]     [,3]
##   [1,] 49.56520 49.42432 50.93164
##   [2,] 49.59777 49.71924 50.60415
##   [3,] 50.74859 50.45956 48.71301
##   [4,] 50.40429 48.75417 50.76270
##   [5,] 49.52512 49.51331 50.88273
##   [6,] 50.37519 51.13974 48.40622
##   [7,] 49.63123 51.03217 49.25775
##   [8,] 48.90228 50.52105 50.49782
##   [9,] 50.56713 48.92518 50.42884
##  [10,] 50.26123 49.91411 49.74582
##  [11,] 50.97213 50.07621 48.87282
##  [12,] 50.63818 50.34431 48.93867
##  [13,] 51.13927 49.82303 48.95885
##  [14,] 49.31764 51.84669 48.75682
##  [15,] 50.49465 50.09101 49.33549
##  [16,] 49.56411 50.12179 50.23526
##  [17,] 50.79521 50.51684 48.60911
##  [18,] 51.81986 49.04791 49.05338
##  [19,] 50.67494 49.26055 49.98567
##  [20,] 51.68262 47.73954 50.49899
##  [21,] 50.97656 49.40913 49.53546
##  [22,] 50.09640 50.33018 49.49458
##  [23,] 48.62717 49.79804 51.49595
##  [24,] 50.49658 49.41832 50.00625
##  [25,] 49.16149 50.07934 50.68032
##  [26,] 50.03147 49.39242 50.49727
##  [27,] 50.57866 49.67055 49.67194
##  [28,] 50.24559 50.50290 49.17266
##  [29,] 52.06625 49.60013 48.25477
##  [30,] 50.88575 48.98989 50.04552
##  [31,] 50.67517 49.95514 49.29084
##  [32,] 49.44379 49.98997 50.48739
##  [33,] 50.62756 48.83930 50.45430
##  [34,] 50.10892 49.86489 49.94735
##  [35,] 48.88577 51.87744 49.15794
##  [36,] 50.72743 49.58743 49.60629
##  [37,] 49.84595 49.78865 50.28656
##  [38,] 51.05728 49.11600 49.74787
##  [39,] 50.45568 49.51532 49.95015
##  [40,] 49.68201 49.73170 50.50744
##  [41,] 51.56163 48.84211 49.51742
##  [42,] 49.73373 49.92721 50.26022
##  [43,] 49.70035 50.05146 50.16934
##  [44,] 49.90030 49.90702 50.11384
##  [45,] 49.25240 50.70263 49.96612
##  [46,] 51.32316 49.47232 49.12567
##  [47,] 49.35023 50.41710 50.15382
##  [48,] 49.93892 49.52535 50.45688
##  [49,] 50.27982 48.66893 50.97240
##  [50,] 49.96475 50.85805 49.09835
##  [51,] 51.18943 50.89785 47.83387
##  [52,] 50.12051 49.96953 49.83111
##  [53,] 48.72980 50.17171 51.01964
##  [54,] 49.42641 50.75895 49.73580
##  [55,] 50.17688 49.25840 50.48587
##  [56,] 49.52078 48.92639 51.47398
##  [57,] 50.49788 49.73707 49.68620
##  [58,] 50.65865 50.22817 49.03433
##  [59,] 51.28374 48.12991 50.50750
##  [60,] 50.36521 49.65817 49.89778
##  [61,] 49.24566 49.72720 50.94829
##  [62,] 51.25993 48.60685 50.05438
##  [63,] 48.72299 50.93070 50.26746
##  [64,] 49.39807 49.77322 50.74987
##  [65,] 49.44599 50.07493 50.40023
##  [66,] 49.90826 50.52176 49.49113
##  [67,] 51.20428 48.56637 50.15050
##  [68,] 50.85065 50.41722 48.65328
##  [69,] 50.26122 49.81571 49.84422
##  [70,] 50.67528 48.83598 50.40990
##  [71,] 50.20796 49.15654 50.55666
##  [72,] 49.53343 51.25624 49.13148
##  [73,] 48.95657 49.75533 51.20925
##  [74,] 50.09220 51.89943 47.92952
##  [75,] 49.51442 50.05303 50.35370
##  [76,] 50.29542 49.71398 49.91175
##  [77,] 50.43317 50.20685 49.28113
##  [78,] 48.76473 50.29352 50.86291
##  [79,] 49.47644 50.67994 49.76477
##  [80,] 50.40284 50.00620 49.51211
##  [81,] 50.05727 49.77762 50.08626
##  [82,] 48.56179 49.43953 51.91984
##  [83,] 49.47744 50.49402 49.94969
##  [84,] 48.53113 49.86756 51.52246
##  [85,] 49.84799 50.42591 49.64725
##  [86,] 49.92818 50.12505 49.86792
##  [87,] 49.85766 49.65011 50.41338
##  [88,] 49.69983 49.02535 51.19598
##  [89,] 48.50595 49.98493 51.43028
##  [90,] 51.66151 48.91436 49.34529
##  [91,] 49.51921 50.15646 50.24548
##  [92,] 48.89101 50.39824 50.63190
##  [93,] 51.10344 49.85502 48.96270
##  [94,] 49.94332 49.80656 50.17127
##  [95,] 48.53647 51.66915 49.71554
##  [96,] 49.93945 49.08219 50.89951
##  [97,] 50.20218 49.27575 50.44322
##  [98,] 50.45164 50.70828 48.76123
##  [99,] 48.88061 49.88466 51.15588
## [100,] 48.88296 50.09452 50.94367
# Making that into a data frame
rep_number <- seq(1:100)

b.matrix <- cbind(rep_number, a.matrix)

# Renaming the columns so they make sense
colnames(b.matrix) <- c("Replicate_Number","Group_1_Mean","Group_2_Mean","Group_3_Mean")

print(b.matrix)
##        Replicate_Number Group_1_Mean Group_2_Mean Group_3_Mean
##   [1,]                1     49.56520     49.42432     50.93164
##   [2,]                2     49.59777     49.71924     50.60415
##   [3,]                3     50.74859     50.45956     48.71301
##   [4,]                4     50.40429     48.75417     50.76270
##   [5,]                5     49.52512     49.51331     50.88273
##   [6,]                6     50.37519     51.13974     48.40622
##   [7,]                7     49.63123     51.03217     49.25775
##   [8,]                8     48.90228     50.52105     50.49782
##   [9,]                9     50.56713     48.92518     50.42884
##  [10,]               10     50.26123     49.91411     49.74582
##  [11,]               11     50.97213     50.07621     48.87282
##  [12,]               12     50.63818     50.34431     48.93867
##  [13,]               13     51.13927     49.82303     48.95885
##  [14,]               14     49.31764     51.84669     48.75682
##  [15,]               15     50.49465     50.09101     49.33549
##  [16,]               16     49.56411     50.12179     50.23526
##  [17,]               17     50.79521     50.51684     48.60911
##  [18,]               18     51.81986     49.04791     49.05338
##  [19,]               19     50.67494     49.26055     49.98567
##  [20,]               20     51.68262     47.73954     50.49899
##  [21,]               21     50.97656     49.40913     49.53546
##  [22,]               22     50.09640     50.33018     49.49458
##  [23,]               23     48.62717     49.79804     51.49595
##  [24,]               24     50.49658     49.41832     50.00625
##  [25,]               25     49.16149     50.07934     50.68032
##  [26,]               26     50.03147     49.39242     50.49727
##  [27,]               27     50.57866     49.67055     49.67194
##  [28,]               28     50.24559     50.50290     49.17266
##  [29,]               29     52.06625     49.60013     48.25477
##  [30,]               30     50.88575     48.98989     50.04552
##  [31,]               31     50.67517     49.95514     49.29084
##  [32,]               32     49.44379     49.98997     50.48739
##  [33,]               33     50.62756     48.83930     50.45430
##  [34,]               34     50.10892     49.86489     49.94735
##  [35,]               35     48.88577     51.87744     49.15794
##  [36,]               36     50.72743     49.58743     49.60629
##  [37,]               37     49.84595     49.78865     50.28656
##  [38,]               38     51.05728     49.11600     49.74787
##  [39,]               39     50.45568     49.51532     49.95015
##  [40,]               40     49.68201     49.73170     50.50744
##  [41,]               41     51.56163     48.84211     49.51742
##  [42,]               42     49.73373     49.92721     50.26022
##  [43,]               43     49.70035     50.05146     50.16934
##  [44,]               44     49.90030     49.90702     50.11384
##  [45,]               45     49.25240     50.70263     49.96612
##  [46,]               46     51.32316     49.47232     49.12567
##  [47,]               47     49.35023     50.41710     50.15382
##  [48,]               48     49.93892     49.52535     50.45688
##  [49,]               49     50.27982     48.66893     50.97240
##  [50,]               50     49.96475     50.85805     49.09835
##  [51,]               51     51.18943     50.89785     47.83387
##  [52,]               52     50.12051     49.96953     49.83111
##  [53,]               53     48.72980     50.17171     51.01964
##  [54,]               54     49.42641     50.75895     49.73580
##  [55,]               55     50.17688     49.25840     50.48587
##  [56,]               56     49.52078     48.92639     51.47398
##  [57,]               57     50.49788     49.73707     49.68620
##  [58,]               58     50.65865     50.22817     49.03433
##  [59,]               59     51.28374     48.12991     50.50750
##  [60,]               60     50.36521     49.65817     49.89778
##  [61,]               61     49.24566     49.72720     50.94829
##  [62,]               62     51.25993     48.60685     50.05438
##  [63,]               63     48.72299     50.93070     50.26746
##  [64,]               64     49.39807     49.77322     50.74987
##  [65,]               65     49.44599     50.07493     50.40023
##  [66,]               66     49.90826     50.52176     49.49113
##  [67,]               67     51.20428     48.56637     50.15050
##  [68,]               68     50.85065     50.41722     48.65328
##  [69,]               69     50.26122     49.81571     49.84422
##  [70,]               70     50.67528     48.83598     50.40990
##  [71,]               71     50.20796     49.15654     50.55666
##  [72,]               72     49.53343     51.25624     49.13148
##  [73,]               73     48.95657     49.75533     51.20925
##  [74,]               74     50.09220     51.89943     47.92952
##  [75,]               75     49.51442     50.05303     50.35370
##  [76,]               76     50.29542     49.71398     49.91175
##  [77,]               77     50.43317     50.20685     49.28113
##  [78,]               78     48.76473     50.29352     50.86291
##  [79,]               79     49.47644     50.67994     49.76477
##  [80,]               80     50.40284     50.00620     49.51211
##  [81,]               81     50.05727     49.77762     50.08626
##  [82,]               82     48.56179     49.43953     51.91984
##  [83,]               83     49.47744     50.49402     49.94969
##  [84,]               84     48.53113     49.86756     51.52246
##  [85,]               85     49.84799     50.42591     49.64725
##  [86,]               86     49.92818     50.12505     49.86792
##  [87,]               87     49.85766     49.65011     50.41338
##  [88,]               88     49.69983     49.02535     51.19598
##  [89,]               89     48.50595     49.98493     51.43028
##  [90,]               90     51.66151     48.91436     49.34529
##  [91,]               91     49.51921     50.15646     50.24548
##  [92,]               92     48.89101     50.39824     50.63190
##  [93,]               93     51.10344     49.85502     48.96270
##  [94,]               94     49.94332     49.80656     50.17127
##  [95,]               95     48.53647     51.66915     49.71554
##  [96,]               96     49.93945     49.08219     50.89951
##  [97,]               97     50.20218     49.27575     50.44322
##  [98,]               98     50.45164     50.70828     48.76123
##  [99,]               99     48.88061     49.88466     51.15588
## [100,]              100     48.88296     50.09452     50.94367
# Use qplot() to create a histogram of the means for each reshuffled group. Or, if you want a challenge, use ggplot() to overlay all 3 histograms in the same figure. How do the distributions of reshuffled means compare to the original means?

# Group 1 Means
qplot(b.matrix[,2]) # how do I change the x-axes?
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Group 2 Means
qplot(b.matrix[,3])
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Group 3 Means
qplot(b.matrix[,4])
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Making a layered histogram

head(b.matrix)
##      Replicate_Number Group_1_Mean Group_2_Mean Group_3_Mean
## [1,]                1     49.56520     49.42432     50.93164
## [2,]                2     49.59777     49.71924     50.60415
## [3,]                3     50.74859     50.45956     48.71301
## [4,]                4     50.40429     48.75417     50.76270
## [5,]                5     49.52512     49.51331     50.88273
## [6,]                6     50.37519     51.13974     48.40622
c.matrix <- b.matrix[,-1]
head(c.matrix)
##      Group_1_Mean Group_2_Mean Group_3_Mean
## [1,]     49.56520     49.42432     50.93164
## [2,]     49.59777     49.71924     50.60415
## [3,]     50.74859     50.45956     48.71301
## [4,]     50.40429     48.75417     50.76270
## [5,]     49.52512     49.51331     50.88273
## [6,]     50.37519     51.13974     48.40622
mean.df <- as.data.frame(c.matrix)
head(mean.df)
##   Group_1_Mean Group_2_Mean Group_3_Mean
## 1     49.56520     49.42432     50.93164
## 2     49.59777     49.71924     50.60415
## 3     50.74859     50.45956     48.71301
## 4     50.40429     48.75417     50.76270
## 5     49.52512     49.51331     50.88273
## 6     50.37519     51.13974     48.40622
# Use ggplot to put three histos on top of eachother 

ggplot(data=mean.df)+
  geom_histogram(aes(x=Group_1_Mean),fill="blueviolet")+
  geom_histogram(aes(x=Group_2_Mean),fill="chocolate2")+
  geom_histogram(aes(x=Group_3_Mean),fill="cyan4")+
  geom_vline(xintercept = mean(fake.data$group1), color="blueviolet")+
  geom_vline(xintercept = mean(fake.data$group2), color="chocolate2")+
  geom_vline(xintercept = mean(fake.data$group3), color="cyan4")+
  labs(title = "Layered Histograms",
       y="Mean 'Infection Rates'",
       x="Three Sample Groups")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# Makeshift legend: blueviolet = Group 1, chocolate2 = Group 2, cyan4 = Group 3