state.R 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. # CALCULATE PATIENT STATE ALGORITHM
  2. STATE = c("WALK", "UP", "DOWN", "SIT")
  3. size_ <- 7
  4. differ_ <- 0.1
  5. POINTS <- data.frame(
  6. index = integer(1)
  7. )
  8. POINTS["state"] <- 0
  9. POINTS["probability"] <- 0
  10. for(i in 1:size_){
  11. POINTS[LETTERS[i]] <- 0
  12. }
  13. for(i in size_:(nrow(DATA)-size_)){
  14. start <- DATA[i,]$Head.y
  15. end <- DATA[i+size_,]$Head.y
  16. state_ <- NULL
  17. if(((start - end) < differ_) && (start - end) > -differ_){
  18. if(start >= mean(DATA$Head.y)){ #WALK (4)
  19. state_ <- 1
  20. }
  21. else{ #SIT (4)
  22. state_ <- 4
  23. }
  24. }
  25. else if((start - end) < differ_) { #UP (2)
  26. state_ <- 2
  27. }
  28. else if((start - end) > differ_) { #UP (3)
  29. state_ <- 3
  30. }
  31. else {
  32. state_ <- 1
  33. }
  34. for(j in 0:size_-1){
  35. POINTS[i-j,LETTERS[j+1]] <- state_
  36. #POINTS[i,LETTERS[j+1]] <- state_
  37. }
  38. POINTS[i,]$index <- DATA[i,]$Time
  39. if(i>size_*2 && i<=((nrow(DATA) - size_))){
  40. tmp_ <- (
  41. tbl_df(
  42. table(
  43. POINTS[i-size_,] %>%
  44. unlist(., use.names=FALSE)
  45. )
  46. ) %>%
  47. arrange(
  48. desc(n)
  49. )
  50. )
  51. POINTS[i-size_,]$state <- tmp_[1,]$Var1
  52. POINTS[i-size_,]$probability <- ((1 / size_) * tmp_[1,]$n)
  53. }
  54. DATA[i,]$state = state_
  55. print(i)
  56. }
  57. print("STATE DONE")
  58. remove(tmp_)
  59. DATA <- DATA[complete.cases(DATA),]
  60. rownames(DATA) <- 1:nrow(DATA)