[R] Coding question for behavioral data analysis

Romain DOUMENC rd6137 at gmail.com
Fri Aug 19 09:38:25 CEST 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

as far as I understood your problem, this function might do the trick:

CountNextBehavior <- function (data.source, interest.behavior,
			       lev.ignore, interest.timeframe) {
  ## ------------------------------
  ## Returns the number of occuring behavior in a given timeframe
  ##
  ## Args:
  ##   data.source is the source dataframe, with columns Behavior and
  ##    Time. Behavior is assumed to be a factor and Time an integer
  ##   interest.behavior is the seeked level of the behavior
  ##   lev.ignore is a vector of behavior levels to ignore
  ##   interest.timeframe fixes the time frame for observation count
  ##
  ## Returns:
  ##   a matrix named according to the behaviors

  # First, get rid of unwanted behavioral levels
  data.source <- with(data.source[!data.source$Behavior %in%
				   lev.ignore, ],
		      data.frame(Time = Time,
				 Behavior = factor(Behavior)))
  # Creates the return matrix
  seeked.blevels <- levels(data.source$Behavior)
  count.behavior <- matrix(rep(0,length(seeked.blevels)), nrow=1,
			   dimnames=list("Count", seeked.blevels))
  # Look when the behavior occurs
  seeked.behavior <- data.source$Behavior == interest.behavior
  occuring.time <- data.source$Time[seeked.behavior]

  # Iterate over occuring times
  for (obs.time in occuring.time) {
    # Get all the observed behavior in the given timeframe
    this.timeframe <- data.source$Time > obs.time &
		      data.source$Time <= obs.time + interest.timeframe
    this.behavior <- data.source$Behavior[this.timeframe]
    # Get the level of the first observed behavior
    first.behavior <- this.behavior[1]
    # Count the number of occurences
    this.count <- sum(this.behavior == first.behavior)
    # Add the count to the given behavior
    count.behavior[first.behavior] <- count.behavior[first.behavior] +
				      this.count
    }

  return(count.behavior)
}

Am 18.08.2011 19:29, schrieb jabroesch:
> Hello all,
> I have a question which I have been struggling with for several weeks
> now, that I think might be easy for more proficient coders than
> myself. I have a large behavioral dataset, with behaviors and the
> times (milliseconds) that they occurred. Each subject has a separate
> file, and a sample subject file can be generated using the following
> syntax:
> 
> Time <- c(1000, 1050, 1100, 1500, 2500, 5000, 6500, 6600, 7000)
> Behavior <- c("g", "a", "s", "5", " z", "g", "z", "g", "a")
> mydata <- data.frame(Time,Behavior)
> 
> My basic goal is to be able to extract some details about what
> behaviors follow another specific behavior within a time window
> (say1000 milliseconds). I figured out how to determine if one specific
> behavior follows another specific behavior within that window with the
> following syntax.
> 
> TimeG=mydata$Time[mydata$Behavior == "g"]
> TimeA=mydata$Time[mydata$Behavior == "a"]
> out=rep(NA, length(TimeG))
> 
> for (i in 1:length(TimeG)){tmp = TimeA-TimeG[i]
> out[i]=(sum(0 < tmp & tmp <=1000 )>0 ) }
> 
> number_of_behaviors<-length(TimeG)
> number_of_affectmirroring<-sum(out)
> 
> This generates 2 values: the number of times that the target behavior
> "g" occurred, and the number of times that it was followed by the
> behavior "a" within 1000 milliseconds.
> 
> Question:
> What I can't seem to figure out is a to generate a count of the number
> of times that multiple different types of behaviors immediately follow
> a specific behavior within 1000 milliseconds. So say the behavior of
> interest is �g� as it is in the example above. I want to determine
> 1)what was the next behavior (from a specified list of possible
> behaviors bellow) that followed it within 1000 milliseconds.
> 
> Ideally the output would 1 row with be 13 columns. The first column
> would be the number of times that the target behavior, "g" in this
> example occurs. The next 12 columns would be the number of times that
> one of the specific behaviors was the next behavior that followed
> within 1000 milliseconds.  So one column for each of these behaviors :
> a s d z x c v q w e r t.
> 
> The two complicating factors are: 1)there might be multiple behaviors
> that followed within 1000 milliseconds, and I only want to count the
> first one; and 2)there are additional behaviors that I would like to
> ignore (like the "5" in the example above).
> 
> Any help or suggestions are appreciated.
> 
> Thank you,
> James Broesch
> 
> 
> --
> View this message in context: http://r.789695.n4.nabble.com/Coding-question-for-behavioral-data-analysis-tp3753151p3753151.html
> Sent from the R help mailing list archive at Nabble.com.
> 	[[alternative HTML version deleted]]
> 
> 
> 
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

- -- 
- --
RD
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQEcBAEBAgAGBQJOThLwAAoJEPy6W3H9JxwxdiUH+gItFSU2shX/82vbZdffIs6l
NyGgNP6FSQBSI8zJB+jZQG/+g6s18Lf7E1idcvcY9lbaU8jwsL5cj7eeyV3mTKgq
HQbDthNkvrrMofQwFbTo5m0DesRMHPzNa9H9SChxXH8hYTxX1eEzEBAtDRsEeBL6
Tx4FbYH6FLBSr7IZ2dlNlw/9QbbLVg1a1w5IkKvyDQUwKPqCtIoCnKX55JYC0CYR
S3TeaxC1jJw6mMdJkO2xNsXxKvsU5zS+HC6AeK6GdKzXw76rQucUJExea2Z+tAtc
uPBc9gtObP4/BsRnmv5NikCVaZNZzJg8TZZbnh2/Siw1isUSPPtm46P38EUhx94=
=ruSU
-----END PGP SIGNATURE-----



More information about the R-help mailing list