I have made a graph with four growth curves using ggplot2.
Hopefully the code below should produce the graph if anyone wants to try.
I want to find a value for the maximum slopes on each of the lines, taken over say 4 time points.
Can anyone give any ideas how to go about this?
library(ggplot2)
dat <- structure(list(TIME = c(0L, 2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L,
18L, 20L, 22L, 24L, 26L, 28L, 30L, 0L, 2L, 4L, 6L, 8L, 10L, 12L,
14L, 16L, 18L, 20L, 22L, 24L, 26L, 28L, 30L, 0L, 2L, 4L, 6L,
8L, 10L, 12L, 14L, 16L, 18L, 20L, 22L, 24L, 26L, 28L, 30L, 0L,
2L, 4L, 6L, 8L, 10L, 12L, 14L, 16L, 18L, 20L, 22L, 24L, 26L,
28L, 30L), OD600 = c(0.2202, 0.2177, 0.2199, 0.2471, 0.2834,
0.357, 0.4734, 0.647, 0.898, 1.1959, 1.3765, 1.3978, 1.3948,
1.3928, 1.3961, 1.4018, 0.24, 0.2317, 0.2328, 0.2522, 0.2748,
0.3257, 0.4098, 0.5455, 0.7387, 0.9904, 1.2516, 1.3711, 1.3713,
1.3703, 1.3686, 1.3761, 0.2266, 0.2219, 0.2245, 0.2401, 0.2506,
0.2645, 0.3018, 0.3484, 0.4216, 0.5197, 0.666, 0.872, 1.1181,
1.2744, 1.3079, 1.2949, 0.2389, 0.2242, 0.2315, 0.2364, 0.2372,
0.2373, 0.2306, 0.2385, 0.236, 0.2331, 0.2379, 0.2334, 0.2336,
0.2339, 0.2389, 0.2349), MMS = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005,
0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01,
0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02,
0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02)), .Names = c("TIME",
"OD600", "MMS"), class = "data.frame", row.names = c(NA, -64L
))
graph = ggplot(data=dat, aes(x=TIME, y=OD600))
graph + geom_line(aes(colour=factor(MMS)), alpha=1) +
opts(title="Log growth curves: change in cell density with increasing concentrations of MMS")+
scale_y_log10()
Many thanks
If you do not need interpolation, @lockedoff 's solution is fine, but are you sure you want 14 for both initial concentrations?
To get better values, you should find the time of inclination, i.e. where the second derivative is zero. This can be tricky with real data, and you should plot the derivatives first to see if this is possible.
You will note that concentration 0.02 is hopeless, and if this were my experiment, I would go back to the lab to check if this really was 0.02 or rather 0.2. If not, you have a VERY unusual substance, be careful, the reviewer will send it back without a good explanation.
Use predict.smooth.spline to compute the derivatives, and uniroot to find the point where the slope ==0.
library(plyr)
smoothingDf = 8 # Adujst this. Larger values-> Smoother curves
# Check smoothing of second derivatives
deriv2 = ddply(dat,.(MMS),function(x){
data.frame(predict(smooth.spline(x$TIME,x$OD600,df=smoothingDf),0:max(x$TIME),2))
})
ggplot(data=deriv2, aes(x=x, y=y))+ geom_line(aes(colour=factor(MMS)))
# No chance to get a good value for 0.02, remove it
dat1 = dat[dat$MMS != 0.02,]
ld50 = ddply(dat1,.(MMS),function(x){
sp = smooth.spline(x$TIME, x$OD600, df=smoothingDf)
# Try to find a good initial range
app = predict(sp,min(x$TIME):max(x$TIME),2)
lower = app$x[which.max(app$y)]
upper = app$x[which.min(app$y)]
uniroot(function(t) predict(sp,t,2)$y ,lower=lower,upper=upper )$root
})
Result look ok, but without 0.02
MMS V1
1 0.000 16.23093
2 0.005 17.43714
3 0.010 22.29317
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With