---
title: "Unbiased N-Back"
date: "5/12/2019"
output:
ioslides_presentation: default
slidy_presentation: default
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(ggplot2)
library(tidyverse)
library(GA)
```
## Intro
$\dots$
Problem:
## Method
## Constraints
- fixed number of targets
- fixed number of lures (a.k.a, foils)
- uniform distribution of choices
- controlled local lumpiness
## Constraint Satisfaction Problem
```{r}
trials <- c('a','b','c','d','c','d','b','a','a','d','b','a','c','c','a','c')
min_len <-4
max_len <-4
contig_seqs = list()
for (st in 1:length(trials)) {
min_fin_index <- st + min_len - 1
max_fin_index <- min(st + max_len -1, length(trials))
for (fin in min_fin_index:max_fin_index) {
seq <- list(trials[st:fin])
contig_seqs <- c(contig_seqs, seq)
}
}
```
Each constraint is a cost function to minimize for each sequence of stimuli
```
history <- contig_seqs
targets <- 4
lures <- 2
targets_fitness <- function(x) 1.0 - 10*dnorm(x,mean=0,sd=4)
lures_fitness <- function(x) 1.0 - 10*dnorm(x,mean=0,sd=4)
# calc skewness
skewness_fitness <- function(x, choices) {
uniform_ratio <- length(x) / length(choices)
deviation_from_uniform <- setNames(vector('numeric', length(choices)), choices)
for (c in choices) {
deviation_from_uniform[c] = abs(length(x[x==c]) - uniform_ratio)
}
#TODO convert to gaussian loss
max(deviation_from_uniform)
}
ralph2014_skewed <- function(x, choices) {
#trials = len(seq)
#freqs = [float(seq.count(c)) for c in choices]
#ralph_skewed = sum(heapq.nlargest(int(len(choices) / 2), freqs)) > (trials * 2 / 3)
#return ralph_skewed
F
}
merged_fitness <- function(x) targets_fitness(x) + lures_fitness(x) + skewness_fitness(x)
GA <- ga(type = "real-valued", fitness = fitness, lower = -10, upper = 10)
plot(GA)
targets_sample <- data.frame(x=-targets:targets)
targets_sample %>%
ggplot(aes(x,y=targets_fitness(x))) +
geom_line()
```
```{r}
load('./data/CL2015.RData')
library(stringi)
with_lures <- function(stim, stim_type, history) {
# extend to 2-back/3-back
if (length(history)<3)
return(as.character(stim_type))
lapply(
1:length(stim),
function(i) {
ifelse(
stim[i]==stri_sub(history[i],-2,-2) || stim[i]==stri_sub(history[i],-4,-4),
'lure',
as.character(stim_type[i]))
})
}
with_targets_ratio <- function(correct, history = c(), block_size=NA) {
if (is.na(block_size)) block_size = str_length(history)
lapply(1:length(correct), function(i) {
0 #TODO
})
}
with_lures_ratio <- function(history) {
lapply(1:length(history), function(i) 0)
}
with_skewness_score <- function(history) {
lapply(1:length(history), function(i) 0)
}
with_lumpiness_score <- function(history) {
lapply(1:length(history), function(i) 0)
}
with_history <- function(stims, max=8) {
res <- c('')
for (i in 2:length(stims)) {
res[i] <- stri_sub(paste(res[i-1], stims[i], sep=''),from=-max,length=max)
}
res
}
normalize_scores <- function(trials) {
sapply(trials, function(t) t)
}
NB %>%
group_by(participant, condition, block) %>%
mutate(history = with_history(stimulus)) %>%
#mutate(stimulus_type = map_chr(.x=stimulus, stim_type=stimulus_type, history=history,.f=with_lures))
mutate(stimulus_type = with_lures(stimulus, stimulus_type, history)) %>%
mutate(targets_ratio = with_targets_ratio(correct)) %>%
mutate(lures_ratio = with_lures_ratio(correct)) %>%
mutate(skewness = with_skewness_score(history)) %>%
mutate(lumpiness = with_lumpiness_score(history)) %>%
normalize_scores()
```
#TODO
modified_NB <- NB %>%
mutate(constraint1=fitness1(history), constrain2=fitness2(history), constraint3=fitness(history))
kmeans(NB)
ggplot(kmeans$accuracy)
ggplot(kmeans$rt)