/
FeatureSelection.Rmd
105 lines (82 loc) · 4.82 KB
/
FeatureSelection.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
---
title: "R Notebook"
output: html_notebook
---
Install packages
```{r}
if(!require(mlbench)){install.packages("mlbench"); require(mlbench)} # common datasets to use
if(!require(caret)){install.packages("caret", dependencies = c("Depends", "Suggests")); require(caret)} # ML package and its dependencies. This will take awhile!
if(!require(dplyr)){install.packages("dplyr"); require(dplyr)}
if(!require(ModelMetrics)){install.packages("ModelMetrics"); require(ModelMetrics)}
if(!require(recipes)){install.packages("recipes"); require(recipes)}
if(!require(DEoptimR)){install.packages("DEoptimR"); require(DEoptimR)}
set.seed(370)
```
# Yuxing => read data
```{r}
baseline <- read.csv(file = '/Users/eunicewu/Documents/INFO370/project-fragile-families/data/Baseline_Features.csv')
year1 <- read.csv(file = '/Users/eunicewu/Documents/INFO370/project-fragile-families/data/Year1_Features.csv')
year3 <- read.csv(file = '/Users/eunicewu/Documents/INFO370/project-fragile-families/data/Year3_Features.csv')
year5 <- read.csv(file = '/Users/eunicewu/Documents/INFO370/project-fragile-families/data/Year5_Features.csv')
year9 <- read.csv(file = '/Users/eunicewu/Documents/INFO370/project-fragile-families/data/Year9_Features.csv')
```
# Jared => read data
```{r}
baseline <- read.csv(file="/Users/jaredpraino/Documents/University of Washington/Senior Year/INFO370/final_project/project-fragile-families/data/Baseline_Features.csv",header=TRUE,sep=",")
year1 <- read.csv(file="/Users/jaredpraino/Documents/University of Washington/Senior Year/INFO370/final_project/project-fragile-families/data/Year1_Features.csv", header=TRUE,sep=",")
year3 <- read.csv(file="/Users/jaredpraino/Documents/University of Washington/Senior Year/INFO370/final_project/project-fragile-families/data/Year3_Features.csv",header=TRUE,sep=",")
year5 <- read.csv(file="/Users/jaredpraino/Documents/University of Washington/Senior Year/INFO370/final_project/project-fragile-families/data/Year5_Features.csv",header=TRUE,sep=",")
year9 <- read.csv(file="/Users/jaredpraino/Documents/University of Washington/Senior Year/INFO370/final_project/project-fragile-families/data/Year9_Features.csv",header=TRUE,sep=",")
```
```{r}
## HAND SELECTED FEATURES OF CURIOUSITY
# FILTERED TO CONTAIN ONLY VALID AND MEANINGFUL RESPONSES
# BASELINE
combine0 <- baseline %>% select(idnum, m1a4, m1a11a, m1a11b) %>%
filter(idnum>-1, m1a4>-1, m1a11a>-1, m1a11b>-1)
# YEAR 1
combine1 <- year1 %>% select(idnum,m2b18a,m2b18b,m2b18c,m2b18d,m2b18e,m2b18f,m2b18g,m2b18h,m2c3a,m2c3b, m2c3c,m2c3d,m2c3e,m2c3f,m2c3h,m2c3i,m2c3j) %>% filter(m2b18a>-1,m2b18b>-1,m2b18c>-1,m2b18d>-1,m2b18e>-1,m2b18f>-1,m2b18g>-1,m2b18h>-1,m2c3a>-1,m2c3b>-1, m2c3c>-1,m2c3d>-1,m2c3e>-1,m2c3f>-1,m2c3h>-1,m2c3i>-1,m2c3j>-1)
# YEAR 3
combine3 <- year3 %>% select(idnum,m3b4a,m3b4b,m3b4c,m3b4d,m3b4e,m3b4f,m3b4g,m3b4h,m3b4i,m3b4k,m3b4l,m3b5,m3c3a,m3c3b,m3c3c,m3c3d,m3c3e,m3c3f,m3c3g,m3c3h,m3c3i,m3c3j,m3c3k,m3c3l) %>%
filter(m3b4a>-1,m3b4b>-1,m3b4c>-1,m3b4d>-1,m3b4e>-1,m3b4f>-1,m3b4g>-1,m3b4h>-1,m3b4i>-1,m3b4k>-1,m3b4l>-1,m3b5>-1,m3c3a>-1,m3c3b>-1,m3c3c>-1,m3c3d>-1,m3c3e>-1,m3c3f>-1,m3c3g>-1,m3c3h>-1,m3c3i>-1,m3c3j>-1,m3c3k>-1,m3c3l>-1)
# YEAR 5
combine5 <- year5 %>% select(idnum,m4b4a1,m4b4a2,m4b4a3,m4b4a4,m4b4a5,m4b4a6,m4b4a7,m4b4a8) %>%
filter(m4b4a1>-1,m4b4a2>-1,m4b4a3>-1,m4b4a4>-1,m4b4a5>-1,m4b4a6>-1,m4b4a7>-1,m4b4a8>-1)
# YEAR 9
combine9 <- year9 %>% select(idnum,t5c13a,t5c13b,t5c13c) %>%
filter(t5c13a>-1,t5c13b>-1,t5c13c>-1)
# JOIN EACH SELECTED FEATURE ON FAMILY ID
join1 <- inner_join(combine0,combine1, by="idnum")
join2 <- inner_join(join1,combine3, by="idnum")
join3 <- inner_join(join2,combine5, by="idnum")
finalCombined <- inner_join(join3,combine9, by="idnum")
# ADD OUTCOME VARIABLES
finalCombined$t5c13a <- as.factor(finalCombined$t5c13a)
finalCombined$t5c13b <- as.factor(finalCombined$t5c13b)
finalCombined$t5c13c <- as.factor(finalCombined$t5c13c)
```
```{r}
## Automatic Feature Selection With Cross Validation
# control using random forest
control <- rfeControl(functions = rfFuncs, method="cv", number=5)
results <- rfe(finalCombined[,2:53], finalCombined[,56], sizes = c(1:52), rfeControl = control) # this will take AWHILE
results
ggplot(results)
# chosen features
predictors(results)
selected_features <- predictors(results)[1:10]
selected_features
```
## Ranking features by importance
Rank features by importance using K-Nearest Neighbors (KNN). Plot the performance
- Use a k-fold cross-validation ("repeatedcv") with k=5 folds, repeated 3 times for control.
```{r}
# Repeated Cross validation for feature selection
control <- trainControl(method="repeatedcv", number = 5, repeats = 3)
finalCombined$t5c13a <- NULL
finalCombined$t5c13b <- NULL
model <- train(t5c13c ~., data=finalCombined, method = "knn", trControl = control)
importance <- varImp(model)
ggplot(importance)
selected_features_2 <- c("m3c3e","m4b4a1","m3b4h","m4b4a5")
```