Git Product home page Git Product logo

actmon's Introduction

actmon

This package provides a set of functions designed to streamline the analysis of datasets produced by TriKinetics hardware using R. Complex operations like syncronizing an experiment to its light cycle or calculating sleep are reduced to simple 1-line functions like syncLightCycle(). actmon also calculates basic statistics on your data and creates basic plots using the ggplot2 package.

Installation

Getting the required dependencies

You will need Hadley Wickham's devtools package. To install, enter the following command into the R console:

install.packages("devtools")

If you are on Windows, building R packages from source requires installing RTools. You can get it from here. Make sure you get the correct version of RTools for your version of R (you can check your version of R from the message you get on starting a new R session).

Installing actmon

Type the following into the R console:

devtools::install_github("kazi11/actmon")

That's it! You're done! You can now access the functions provided by this package in R using library(actmon).

License

This software is licensed under the GNU-GPL 3 license.

Quick tutorial

Let's go through an example workflow with actmon.

Examine raw activity

library(actmon)
library(ggplot2) # Needed for some plotting helper functions (i.e. labels)

# Remove dead animals from our example dataset
demoData <- dropDead(DAM_DD)

## [1] "Vial # 28 have been detected as dead and will be dropped."

Note that we are just using the demo data for the above example. To create a DAM experiment object from your own data, you would use the following syntax:

yourData <- newExperiment(dataFile = "filePath/yourActivityMonitorOutput.txt", infoFile = "filePath/yourMetadata.csv")

Note that the metadata files are simply a csv file with the genotype/conditions of each animal. See the example_smpinfo.csv file in this repository as an example of what one should look like. There are no requirements of the file aside from that first row supplies column labels, and the first column be the numbers 1-32. Anyhow, back to the workflow...

# Collapse our data to one data point per hour (instead of one every 5min), aggregating by sum
activity <- toInterval(demoData, 1, units = "hours", aggregateBy = "sum")
# Which "attribute" of our metadata (like genotype) do we want to examine our data by?
listAttributes(activity)

## [1] "vial_number" "genotype"    "sex"

# Make a plot using actmons's built in ggplot2 functionality.
label <- guide_legend(title = "Genotype")
linePlot(activity, "genotype") + ylab("Activity (raw counts/hour)") +
  xlab("Time (hours)") + guides(fill = label, color = label)

Imgur

So we have an activity phenotype, what about sleep? Note that the graph background is auto-colored a light gray to correspond with the lighting in the incubator where this experiment was performed. Experiments with cycling lighting will have light changes visible in their graphs.

# Calculate sleep
sleep <- calcSleep(demoData)
# Aggregate by average this time, sleep values are percents.
sleep <- toInterval(sleep, 1, units = "hours", aggregateBy = "average")
label <- guide_legend(title = "Genotype")
linePlot(sleep, "genotype") + ylab("Percent of time asleep/hour") +
  xlab("Time (hours)") + guides(fill = label, color = label)

Imgur

Can we quantify that more precisely?

# Collapse our data to single, averaged day
avgSleep <- toAvgDay(sleep, incomplete.rm = TRUE)
avgSleep <- toInterval(avgSleep, 1, units = "days", aggregateBy = "average")
barPlot(avgSleep, "genotype") + ylab("Percent of time asleep/hour") + xlab("Time (hours)")

Imgur

What are the stats on that?

model <- calcANOVA(avgSleep, "genotype")

##             Df Sum Sq Mean Sq F value   Pr(>F)    
## attributes   2   7081    3541   19.78 4.41e-06 ***
## Residuals   28   5012     179                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

calcTukeyHSD(model)

##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = dat ~ attributes)
## 
## $attributes
##                              diff       lwr        upr     p adj
## control B-control A     -7.928241 -22.73264   6.876157 0.3934604
## experimental-control A -34.843224 -49.30725 -20.379202 0.0000060
## experimental-control B -26.914983 -41.37900 -12.450962 0.0002348

It's significant! Awesome. What about other measures of activity sleep behavior?

# Calculate number of sleep bouts
rawSleep <- calcSleep(demoData)
numBouts <- calcNumBouts(rawSleep)
# Overloaded operators for plotting functions allow us to plot vectorized data along 
# with metadata from the parent DAM object the vector was generated from.
barPlot(rawSleep, "genotype", vector = numBouts) + ylab("Mean number of sleep bouts") +
  xlab("")

Imgur

# Calculate mean duration of sleep bouts
meanBouts <- calcMeanBout(rawSleep)
barPlot(rawSleep, "genotype", vector = meanBouts) + ylab("Mean bout duration") + xlab("")

Imgur

# Calculate activity index (activity normalized to time awake)
activityIdx <- calcActivityIndex(demoData)
barPlot(rawSleep, "genotype", vector = activityIdx) + ylab("Activity index") + xlab("")

Imgur

Mean bout duration appears to have decreased in our experimental flies, and they appear to be more active in general.

Wasn't that easy? We've discovered and characterized a novel phenotype in ~5 minutes of data analysis. We could do more with the dataset here, but that should give a new user basic idea of what this package is capable of. All functions are well documented, so you can easily look up what something does.

actmon's People

Contributors

jstaf avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.