Deben Oldert 9 лет назад
Родитель
Сommit
a7fad766a5
3 измененных файлов с 154 добавлено и 0 удалено
  1. 38 0
      code/head.R
  2. 49 0
      code/main.R
  3. 67 0
      code/state.R

+ 38 - 0
code/head.R

@@ -0,0 +1,38 @@
+#color <- rainbow(length(STATE))
+color <- c("red", "blue", "blue", "green")
+
+#Plot graph
+plot(DATA$Head.y,
+     type = "l",
+     ylab = "Hoogte hoofd"
+)
+
+for(i in 1:nrow(DATA)){
+  print(i)
+  points(i, DATA[i,]$Head.y, col = color[DATA[i,]$state])
+}
+
+
+#Check if patient is walking straight enough
+differ_ <- 0.4
+
+WALKING <- strtoi(rownames(DATA[DATA$state==1,]))
+
+start <- min(WALKING)
+stop <- max(WALKING)
+
+
+segments(start, mean(c(DATA[start,]$Head.y, DATA[stop,]$Head.y)), stop, col = "black")
+
+base <- mean(c(DATA[start,]$Head.y, DATA[stop,]$Head.y))
+size_ <- 7
+for(i in seq(start, stop, size_)){
+
+  step <- mean(DATA[i:(i+size_),]$Head.y) - base
+
+  for(j in 0:(size_ -1)){
+    if(DATA[i+j,]$state != 1) next
+    points(i+j, DATA[i+j,]$Head.y - step, p = "*")
+  }
+
+}

+ 49 - 0
code/main.R

@@ -0,0 +1,49 @@
+suppressMessages(library(dplyr))
+suppressMessages(library(stringr))
+
+WD <- getwd()
+
+specify_decimal <- function(x, k) format(round(x, k), nsmall=k)
+
+CSV <- file.choose()
+
+CSV <- read.csv(CSV)
+
+# CONVERT
+DATA <- NULL
+
+for(i in 1:(nrow(CSV) / 3)) {
+  x <- NULL
+  y <- NULL
+  z <- NULL
+
+  if(i > 1) { i <- i * 3 - 2 }
+
+  x <- CSV[i,]
+  y <- CSV[i+1,]
+  z <- CSV[i+2,]
+
+  cnv_ <- merge(x, y, all = TRUE, suffixes = c(".x", ".y"), by = "Time")
+  cnv_ <- merge(cnv_, z, all = TRUE, suffixes = c("", ".z"), by = "Time")
+
+  if(i == 1) {
+    DATA <- cnv_
+  }
+  else {
+    DATA <- bind_rows(DATA, cnv_)
+  }
+
+}
+
+DATA$state = NA
+
+remove(x)
+remove(y)
+remove(z)
+remove(cnv_)
+
+source("code/state.R")
+
+source("code/head.R")
+#source("code/ankle.R")
+#source("code/back.R")

+ 67 - 0
code/state.R

@@ -0,0 +1,67 @@
+# CALCULATE PATIENT STATE ALGORITHM
+STATE = c("WALK", "UP", "DOWN", "SIT")
+size_ <- 7
+differ_ <- 0.1
+
+POINTS <- data.frame(
+  index = integer(1)
+)
+POINTS["state"] <- 0
+POINTS["probability"] <- 0
+
+for(i in 1:size_){
+  POINTS[LETTERS[i]] <- 0
+}
+
+for(i in size_:(nrow(DATA)-size_)){
+  start <- DATA[i,]$Head.y
+  end <- DATA[i+size_,]$Head.y
+
+  state_ <- NULL
+
+  if(((start - end) < differ_) && (start - end) > -differ_){
+    if(start >= mean(DATA$Head.y)){ #WALK (4)
+      state_ <- 1
+    }
+    else{ #SIT (4)
+      state_ <- 4
+    }
+  }
+  else if((start - end) < differ_) { #UP (2)
+    state_ <- 2
+  }
+  else if((start - end) > differ_) { #UP (3)
+    state_ <- 3
+  }
+  else {
+    state_ <- 1
+  }
+
+  for(j in 0:size_-1){
+    POINTS[i-j,LETTERS[j+1]] <- state_
+    #POINTS[i,LETTERS[j+1]] <- state_
+  }
+  POINTS[i,]$index <- DATA[i,]$Time
+
+  if(i>size_*2 && i<=((nrow(DATA) - size_))){
+    tmp_ <- (
+      tbl_df(
+        table(
+          POINTS[i-size_,] %>%
+            unlist(., use.names=FALSE)
+        )
+      ) %>%
+        arrange(
+          desc(n)
+        )
+    )
+    POINTS[i-size_,]$state <- tmp_[1,]$Var1
+    POINTS[i-size_,]$probability <- ((1 / size_) * tmp_[1,]$n)
+  }
+  DATA[i,]$state = state_
+  print(i)
+}
+print("STATE DONE")
+remove(tmp_)
+DATA <- DATA[complete.cases(DATA),]
+rownames(DATA) <- 1:nrow(DATA)