-
Notifications
You must be signed in to change notification settings - Fork 231
/
Copy pathassignment5.Rmd
114 lines (66 loc) · 4.81 KB
/
assignment5.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
---
title: "Principle Component Aanalysis"
output: html_document
---
## Data
The data you will be using comes from the Assistments online intelligent tutoring system (https://www.assistments.org/). It describes students working through online math problems. Each student has the following data associated with them:
- id
- prior_prob_count: How many problems a student has answered in the system prior to this session
- prior_percent_correct: The percentage of problems a student has answered correctly prior to this session
- problems_attempted: The number of problems the student has attempted in the current session
- mean_correct: The average number of correct answers a student made on their first attempt at problems in the current session
- mean_hint: The average number of hints a student asked for in the current session
- mean_attempt: The average number of attempts a student took to answer a problem in the current session
- mean_confidence: The average confidence each student has in their ability to answer the problems in the current session
## Start by uploading the data
```{r}
D1 <-
```
## Create a correlation matrix of the relationships between the variables, including correlation coefficients for each pair of variables/features.
```{r}
#You can install the corrplot package to plot some pretty correlation matrices (sometimes called correlograms)
library(ggplot2)
library(GGally)
ggpairs(D1, 2:8, progress = FALSE) #ggpairs() draws a correlation plot between all the columns you identify by number (second option, you don't need the first column as it is the student ID) and progress = FALSE stops a progress bar appearing as it renders your plot
ggcorr(D1[,-1], method = c("everything", "pearson")) #ggcorr() doesn't have an explicit option to choose variables so we need to use matrix notation to drop the id variable. We then need to choose a "method" which determines how to treat missing values (here we choose to keep everything, and then which kind of correlation calculation to use, here we are using Pearson correlation, the other options are "kendall" or "spearman")
#Study your correlogram images and save them, you will need them later. Take note of what is strongly related to the outcome variable of interest, mean_correct.
```
## Create a new data frame with the mean_correct variable removed, we want to keep that variable intact. The other variables will be included in our PCA.
```{r}
D2 <-
```
## Now run the PCA on the new data frame
```{r}
pca <- prcomp(D2, scale. = TRUE)
```
## Although princomp does not generate the eigenvalues directly for us, we can print a list of the standard deviation of the variance accounted for by each component.
```{r}
pca$sdev
#To convert this into variance accounted for we can square it, these numbers are proportional to the eigenvalue
pca$sdev^2
#A summary of our pca will give us the proportion of variance accounted for by each component
summary(pca)
#We can look at this to get an idea of which components we should keep and which we should drop
plot(pca, type = "lines")
```
## Decide which components you would drop and remove them from your data set.
## Part II
```{r}
#Now, create a data frame of the transformed data from your pca.
D3 <-
#Attach the variable "mean_correct" from your original data frame to D3.
#Now re-run your correlation plots between the transformed data and mean_correct. If you had dropped some components would you have lost important infomation about mean_correct?
```
## Now print out the loadings for the components you generated:
```{r}
pca$rotation
#Examine the eigenvectors, notice that they are a little difficult to interpret. It is much easier to make sense of them if we make them proportional within each component
loadings <- abs(pca$rotation) #abs() will make all eigenvectors positive
#Now examine your components and try to come up with substantive descriptions of what some might represent?
#You can generate a biplot to help you, though these can be a bit confusing. They plot the transformed data by the first two components. Therefore, the axes represent the direction of maximum variance accounted for. Then mapped onto this point cloud are the original directions of the variables, depicted as red arrows. It is supposed to provide a visualization of which variables "go together". Variables that possibly represent the same underlying construct point in the same direction.
biplot(pca)
```
# Part III
Also in this repository is a data set collected from TC students (tc-program-combos.csv) that shows how many students thought that a TC program was related to andother TC program. Students were shown three program names at a time and were asked which two of the three were most similar. Use PCA to look for components that represent related programs. Explain why you think there are relationships between these programs.
```{r}
```