| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- # CALCULATE PATIENT STATE ALGORITHM
- STATE = c("WALK", "UP", "DOWN", "SIT")
- size_ <- 5
- 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,]$index <- DATA[i,]$Time
- remove(j)
- 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_
- }
- remove(tmp_)
- remove(state_)
- remove(i)
- remove(start)
- remove(end)
- DATA <- DATA[complete.cases(DATA),]
- rownames(DATA) <- 1:nrow(DATA)
- DATA$index = as.integer(rownames(DATA))
- print("STATE CALCULATION DONE")
- # USE PATIENT ENVIRONMENT
- source("code/patient.R")
- patient$WALKING <- group(strtoi(rownames(DATA[DATA$state==1,])), 10)
- patient$SITTING <- group(strtoi(rownames(DATA[DATA$state==4,])), 10)
- patient$UP <- group(strtoi(rownames(DATA[DATA$state==2,])), 5)
- patient$DOWN <- group(strtoi(rownames(DATA[DATA$state==3,])), 5)
- patient$SITBASE <- mean(c(DATA[as.integer(unlist(patient$SITTING)),]$FootLeft.y, DATA[as.integer(unlist(patient$SITTING)),]$FootRight.y))
- if(!consistent(as.integer(unlist(patient$WALKING)))){
- stop("Patient not consistently walking, (Maybe he/she fell). Anyway, we can't analyse this data", call. = FALSE)
- }
- patient$WALKING <- as.integer(unlist(patient$WALKING))
- # CALCULATE STRAIGHT WALKING PATH
- yPrediction <-lm(Head.y ~ I(index^2)+index, data=DATA[min(patient$WALKING):max(patient$WALKING),])
- yPredicted <- as.vector(predict(yPrediction, data.frame(index=patient$WALKING)))
- patient$WALKBASE <- mean(c(yPredicted[1], tail(yPredicted, n=1)))
- for(i in patient$WALKING[1]:(length(patient$WALKING) + patient$WALKING[1] - 1)){
- DATA[i,]$Head.y <- DATA[i,]$Head.y - (yPredicted[i-patient$WALKING[1]+1] - patient$WALKBASE)
- }
- plot(POINTS$probability, type = "l")
- remove(yPrediction)
- remove(yPredicted)
- print("FILLING PATIENT CLASS DONE")
- # http://stats.stackexchange.com/questions/30975/how-to-add-non-linear-trend-line-to-a-scatter-plot-in-r
- # http://www.mathsisfun.com/geometry/parabola.html
|