From 82e618634cbc2798676131c42a6b267d7fe8ae74 Mon Sep 17 00:00:00 2001 From: Emma Rand Date: Thu, 4 Apr 2024 14:43:00 +0100 Subject: [PATCH] Calculate Change in VFA g/l with time Recalculate the data into grams per litre - convert to molar: 1 millimolar to molar = 0.001 molar - multiply by the molecular weight of each VFA Calculate the percent representation of each VFA, by mM and by weight --- .../Octanoic VFA_inverse model example.xlsx | Bin 0 -> 31650 bytes omics/kelly/data-raw/ph.csv | 130 +++++ omics/kelly/data-raw/vfa2.csv | 171 +++++++ omics/kelly/temp/example.R | 3 - omics/kelly/temp/example.csv | 42 -- omics/kelly/workshop.qmd | 465 ++++++++++++++++++ 6 files changed, 766 insertions(+), 45 deletions(-) create mode 100644 omics/kelly/Octanoic VFA_inverse model example.xlsx create mode 100644 omics/kelly/data-raw/ph.csv create mode 100644 omics/kelly/data-raw/vfa2.csv delete mode 100644 omics/kelly/temp/example.R delete mode 100644 omics/kelly/temp/example.csv diff --git a/omics/kelly/Octanoic VFA_inverse model example.xlsx b/omics/kelly/Octanoic VFA_inverse model example.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d87ce04a7bd42e84503ae9eef5c279fb8ded1b15 GIT binary patch literal 31650 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 literal 0 HcmV?d00001 diff --git a/omics/kelly/data-raw/ph.csv b/omics/kelly/data-raw/ph.csv new file mode 100644 index 0000000..7c584c3 --- /dev/null +++ b/omics/kelly/data-raw/ph.csv @@ -0,0 +1,130 @@ +Feedstock,Replicate,Time (hours),pH +N/A,1,-1,7.72 +N/A,2,-1,7.73 +N/A,3,-1,7.71 +N/A,4,-1,7.73 +Casein,1,0,7.70 +Casein,2,0,7.71 +Casein,3,0,7.64 +Casein,4,0,7.67 +Casein,1,3,7.87 +Casein,2,3,7.74 +Casein,3,3,7.86 +Casein,4,3,7.97 +Casein,1,6,7.71 +Casein,2,6,7.74 +Casein,3,6,7.75 +Casein,4,6,7.69 +Casein,1,24,7.95 +Casein,2,24,7.93 +Casein,3,24,7.94 +Casein,4,24,7.89 +Casein,1,48,8.02 +Casein,2,48,7.93 +Casein,3,48,7.96 +Casein,4,48,7.94 +Casein,1,54,7.96 +Casein,2,54,7.91 +Casein,3,54,7.90 +Casein,4,54,7.93 +Casein,1,72,7.87 +Casein,2,72,7.89 +Casein,3,72,7.89 +Casein,4,72,7.90 +Casein,1,96,7.96 +Casein,2,96,8.01 +Casein,3,96,7.98 +Casein,4,96,7.95 +Casein,1,168,7.92 +Casein,2,168,7.90 +Casein,3,168,7.93 +Casein,4,168,7.93 +Casein,1,192,7.90 +Casein,2,192,7.97 +Casein,3,192,7.98 +Casein,4,192,8.00 +Keratin,1,0,7.57 +Keratin,2,0,7.72 +Keratin,3,0,7.41 +Keratin,4,0,7.56 +Keratin,1,3,n/a +Keratin,2,3,n/a +Keratin,3,3,n/a +Keratin,4,3,n/a +Keratin,1,6,7.64 +Keratin,2,6,7.82 +Keratin,3,6,7.73 +Keratin,4,6,7.7 +Keratin,1,24,8.12 +Keratin,2,24,7.99 +Keratin,3,24,7.77 +Keratin,4,24,7.92 +Keratin,1,48,8.02 +Keratin,2,48,7.93 +Keratin,3,48,8.02 +Keratin,4,48,7.88 +Keratin,1,54,7.86 +Keratin,2,54,7.87 +Keratin,3,54,7.8 +Keratin,4,54,7.82 +Keratin,1,72,7.8 +Keratin,2,72,7.81 +Keratin,3,72,7.82 +Keratin,4,72,7.8 +Keratin,1,96,8.02 +Keratin,2,96,7.97 +Keratin,3,96,8.04 +Keratin,4,96,8.12 +Keratin,1,168,7.87 +Keratin,2,168,7.98 +Keratin,3,168,8.03 +Keratin,4,168,7.96 +Keratin,1,192,7.88 +Keratin,2,192,7.69 +Keratin,3,192,7.78 +Keratin,4,192,7.85 +Acetate,1,0,7.83 +Acetate,2,0,7.85 +Acetate,3,0,7.81 +Acetate,1,3,7.69 +Acetate,2,3,7.67 +Acetate,3,3,7.71 +Acetate,1,6,7.75 +Acetate,2,6,7.74 +Acetate,3,6,7.76 +Acetate,1,24,7.93 +Acetate,2,24,7.95 +Acetate,3,24,7.96 +Acetate,1,48,7.75 +Acetate,2,48,7.77 +Acetate,3,48,7.77 +Hexanoate,1,0,7.85 +Hexanoate,2,0,7.85 +Hexanoate,3,0,7.85 +Hexanoate,1,3,7.75 +Hexanoate,2,3,7.79 +Hexanoate,3,3,7.80 +Hexanoate,1,6,7.71 +Hexanoate,2,6,7.78 +Hexanoate,3,6,7.76 +Hexanoate,1,24,7.92 +Hexanoate,2,24,7.84 +Hexanoate,3,24,7.92 +Hexanoate,1,48,7.92 +Hexanoate,2,48,7.85 +Hexanoate,3,48,7.93 +Decanoate,1,0,7.73 +Decanoate,2,0,7.66 +Decanoate,3,0,7.69 +Decanoate,1,3,7.88 +Decanoate,2,3,7.79 +Decanoate,3,3,7.80 +Decanoate,1,6,7.71 +Decanoate,2,6,7.76 +Decanoate,3,6,7.74 +Decanoate ,1,24,7.71 +Decanoate ,2,24,7.00 +Decanoate,3,24,7.73 +Decanoate,1,48,7.61 +Decanoate,2,48,7.68 +Decanoate ,3,48,7.65 \ No newline at end of file diff --git a/omics/kelly/data-raw/vfa2.csv b/omics/kelly/data-raw/vfa2.csv new file mode 100644 index 0000000..2ed980d --- /dev/null +++ b/omics/kelly/data-raw/vfa2.csv @@ -0,0 +1,171 @@ +Set number,replicate,Treatment,Time day,Acetate,Propanoate,Isobutyrate,Butyrate,Isopentanoate,Pentanoate,Isohexanoate,Hexanoate +2,1,Acetate,1,10.9,0,0,0,0,0,0,0 +2,2,Acetate,1,11.2,0,0,0,0,0,0,0 +2,3,Acetate,1,12.8,0,0,0,0,0,0,0 +2,1,Acetate,2,5.6,0,0,0,0,0,0,0 +2,2,Acetate,2,5.3,0,0,0,0,0,0,0 +2,3,Acetate,2,6.1,0,0,0,0,0,0,0 +2,1,Acetate,3,1.2,0,0,0,0,0,0,0 +2,2,Acetate,3,0.9,0,0,0,0,0,0,0 +2,3,Acetate,3,1.1,0,0,0,0,0,0,0 +2,1,Acetate,4,0.1,0,0,0,0,0,0,0 +2,2,Acetate,4,0,0,0,0,0,0,0,0 +2,3,Acetate,4,0,0,0,0,0,0,0,0 +2,1,Acetate,5,0,0,0,0,0,0,0,0 +2,2,Acetate,5,0,0,0,0,0,0,0,0 +2,3,Acetate,5,0,0,0,0,0,0,0,0 +2,1,Acetate,6,11.8,0,0,0,0,0,0,0 +2,2,Acetate,6,11.2,0,0,0,0,0,0,0 +2,3,Acetate,6,12,0,0,0,0,0,0,0 +2,1,Acetate,7,4.9,0,0,0,0,0,0,0 +2,2,Acetate,7,4.3,0,0,0,0,0,0,0 +2,3,Acetate,7,4.8,0,0,0,0,0,0,0 +2,1,Acetate,8,0.3,0,0,0,0,0,0,0 +2,2,Acetate,8,0.5,0,0,0,0,0,0,0 +2,3,Acetate,8,0.9,0,0,0,0,0,0,0 +2,1,Acetate,9,0,0,0,0,0,0,0,0 +2,2,Acetate,9,0,0,0,0,0,0,0,0 +2,3,Acetate,9,0,0,0,0,0,0,0,0 +2,1,Acetate,10,0,0,0,0,0,0,0,0 +2,2,Acetate,10,0,0,0,0,0,0,0,0 +2,3,Acetate,10,0,0,0,0,0,0,0,0 +2,1,Hexanoic,1,0,0,0,0,0,0,0,4.8 +2,2,Hexanoic,1,0,0,0,0,0,0,0,5.2 +2,3,Hexanoic,1,0,0,0,0,0,0,0,5.3 +2,1,Hexanoic,2,0,0,0,0,0,0,0,4 +2,2,Hexanoic,2,0,0,0,0,0,0,0,4.2 +2,3,Hexanoic,2,0,0,0,0,0,0,0,4.5 +2,1,Hexanoic,3,2.4,0,0,0,0,0,0,2.3 +2,2,Hexanoic,3,2.7,0,0,0,0,0,0,2.6 +2,3,Hexanoic,3,1.9,0,0,0,0,0,0,2.4 +2,1,Hexanoic,4,1,0,0,0,0,0,0,0 +2,2,Hexanoic,4,1.2,0,0,0,0,0,0,0 +2,3,Hexanoic,4,0.9,0,0,0,0,0,0,0 +2,1,Hexanoic,5,0,0,0,0,0,0,0,0 +2,2,Hexanoic,5,0,0,0,0,0,0,0,0 +2,3,Hexanoic,5,0,0,0,0,0,0,0,0 +2,1,Hexanoic,6,0.5,0,0,0,0,0,0,4.2 +2,2,Hexanoic,6,0.3,0,0,0,0,0,0,4.1 +2,3,Hexanoic,6,0.6,0,0,0,0,0,0,3.9 +2,1,Hexanoic,7,2.1,0,0,0,0,0,0,3.6 +2,2,Hexanoic,7,2.4,0,0,0,0,0,0,3.2 +2,3,Hexanoic,7,2.7,0,0,0,0,0,0,3.5 +2,1,Hexanoic,8,1.2,0,0,0,0,0,0,1.3 +2,2,Hexanoic,8,1.5,0,0,0,0,0,0,1.1 +2,3,Hexanoic,8,1.3,0,0,0,0,0,0,1.6 +2,1,Hexanoic,9,0.2,0,0,0,0,0,0,0 +2,2,Hexanoic,9,0.6,0,0,0,0,0,0,0 +2,3,Hexanoic,9,0.1,0,0,0,0,0,0,0 +2,1,Hexanoic,10,0,0,0,0,0,0,0,0 +2,2,Hexanoic,10,0,0,0,0,0,0,0,0 +2,3,Hexanoic,10,0,0,0,0,0,0,0,0 +2,1,Decanoic,1,0,0,0,0,0,0,0,0 +2,2,Decanoic,1,0,0,0,0,0,0,0,0 +2,3,Decanoic,1,0,0,0,0,0,0,0,0 +2,1,Decanoic,2,0,0,0,0,0,0,0,0 +2,2,Decanoic,2,0,0,0,0,0,0,0,0 +2,3,Decanoic,2,0,0,0,0,0,0,0,0 +2,1,Decanoic,3,0.3,0,0,0,0,0,0,0.1 +2,2,Decanoic,3,0.4,0,0,0,0,0,0,0 +2,3,Decanoic,3,0.5,0,0,0,0,0,0,0.2 +2,1,Decanoic,4,3,0,0,0,0,0,0,0.8 +2,2,Decanoic,4,3.2,0,0,0,0,0,0,0.9 +2,3,Decanoic,4,4,0,0,0,0,0,0,1.1 +2,1,Decanoic,5,1.1,0,0,0,0,0,0,0 +2,2,Decanoic,5,1.3,0,0,0,0,0,0,0 +2,3,Decanoic,5,0.8,0,0,0,0,0,0,0 +2,1,Decanoic,6,0,0,0,0,0,0,0,0 +2,2,Decanoic,6,0,0,0,0,0,0,0,0 +2,3,Decanoic,6,0,0,0,0,0,0,0,0 +2,1,Decanoic,7,0,0,0,0,0,0,0,0 +2,2,Decanoic,7,0,0,0,0,0,0,0,0 +2,3,Decanoic,7,0,0,0,0,0,0,0,0 +2,1,Decanoic,8,0.6,0,0,0,0,0,0,0.1 +2,2,Decanoic,8,0.9,0,0,0,0,0,0,0.1 +2,3,Decanoic,8,0.8,0,0,0,0,0,0,0.3 +2,1,Decanoic,9,3.7,0,0,0,0,0,0,1.3 +2,2,Decanoic,9,4.1,0,0,0,0,0,0,1.7 +2,3,Decanoic,9,3.9,0,0,0,0,0,0,1.5 +2,1,Decanoic,10,0.9,0,0,0,0,0,0,0 +2,2,Decanoic,10,0.6,0,0,0,0,0,0,0 +2,3,Decanoic,10,0.4,0,0,0,0,0,0,0 +1,1,Casein,1,0,0,0,0,0,0,0,0 +1,2,Casein,1,0,0,0,0,0,0,0,0 +1,3,Casein,1,0,0,0,0,0,0,0,0 +1,4,Casein,1,0,0,0,0,0,0,0,0 +1,1,Casein,2,0,0,0,0,0,0,0,0 +1,2,Casein,2,0,0,0,0,0,0,0,0 +1,3,Casein,2,0,0,0,0,0,0,0,0 +1,4,Casein,2,0,0,0,0,0,0,0,0 +1,1,Casein,3,0,0,0,0,0,0,0,0 +1,2,Casein,3,0,0,0,0,0,0,0,0 +1,3,Casein,3,0,0,0,0,0,0,0,0 +1,4,Casein,3,0,0,0,0,0,0,0,0 +1,1,Casein,4,0,0,0,0,0,0,0,0 +1,2,Casein,4,0,0,0,0,0,0,0,0 +1,3,Casein,4,0,0,0,0,0,0,0,0 +1,4,Casein,4,0,0,0,0,0,0,0,0 +1,1,Casein,5,4.3,1.2,2,4.1,0.3,1,3,5.1 +1,2,Casein,5,3.9,1.4,1.7,3.8,0.2,1.1,2.8,4.8 +1,3,Casein,5,4.1,0.8,2.2,4,0.4,1.2,2.7,6 +1,4,Casein,5,4,1.3,2.1,4.2,0.3,1.3,3.1,5.5 +1,1,Casein,6,6.4,0.2,0.1,3.5,0,0.2,0.7,3.4 +1,2,Casein,6,6.2,0.3,0,3.2,0,0.3,0.8,3 +1,3,Casein,6,6.6,0.1,0,3.8,0,0.1,0.3,3.6 +1,4,Casein,6,5.8,0.2,0.3,3.4,0,0.1,1.1,3.1 +1,1,Casein,7,7.5,0,0,2.1,0,0,0,1.5 +1,2,Casein,7,7.9,0,0,1.6,0,0,0,1.9 +1,3,Casein,7,8.1,0,0,1.9,0,0,0,2.1 +1,4,Casein,7,7.3,0,0,2,0,0,0,1.2 +1,1,Casein,8,9,0,0,0.1,0,0,0,0.5 +1,2,Casein,8,9.7,0,0,0.3,0,0,0,0.3 +1,3,Casein,8,10.1,0,0,0.2,0,0,0,0.1 +1,4,Casein,8,8.9,0,0,0.1,0,0,0,0.5 +1,1,Casein,9,8.7,0.7,1.1,3.3,0,0.2,1.8,4.2 +1,2,Casein,9,7.9,0.6,1.3,3.1,0,0,2.1,4.7 +1,3,Casein,9,8.2,0.3,1,2.9,0,0.1,1.6,4.1 +1,4,Casein,9,8.1,0.9,1.4,3,0,0,2.2,4.5 +1,1,Casein,10,8.8,0.2,0,1.4,0,0,0.1,3.1 +1,2,Casein,10,8.3,0,0.1,1.2,0,0,0.3,2.6 +1,3,Casein,10,7.8,0.1,0,1.7,0,0,0,2.8 +1,4,Casein,10,8.5,0,0,1.1,0,0,0.1,2.3 +1,1,Keratin,1,0,0,0,0,0,0,0,0 +1,2,Keratin,1,0,0,0,0,0,0,0,0 +1,3,Keratin,1,0,0,0,0,0,0,0,0 +1,4,Keratin,1,0,0,0,0,0,0,0,0 +1,1,Keratin,2,0,0,0,0,0,0,0,0 +1,2,Keratin,2,0,0,0,0,0,0,0,0 +1,3,Keratin,2,0,0,0,0,0,0,0,0 +1,4,Keratin,2,0,0,0,0,0,0,0,0 +1,1,Keratin,3,0,0,0,0,0,0,0,0 +1,2,Keratin,3,0,0,0,0,0,0,0,0 +1,3,Keratin,3,0,0,0,0,0,0,0,0 +1,4,Keratin,3,0,0,0,0,0,0,0,0 +1,1,Keratin,4,0,0,0,0,0,0,0,0 +1,2,Keratin,4,0,0,0,0,0,0,0,0 +1,3,Keratin,4,0,0,0,0,0,0,0,0 +1,4,Keratin,4,0,0,0,0,0,0,0,0 +1,1,Keratin,5,0,0,0,0,0,0,0,0 +1,2,Keratin,5,0,0,0,0,0,0,0,0 +1,3,Keratin,5,0,0,0,0,0,0,0,0 +1,4,Keratin,5,0,0,0,0,0,0,0,0 +1,1,Keratin,6,2.1,0,0,0.3,0,0,0,0.4 +1,2,Keratin,6,2.4,0,0,0.4,0,0,0,0.2 +1,3,Keratin,6,1.7,0,0,0.2,0,0,0,0.5 +1,4,Keratin,6,2.5,0,0,0.1,0,0,0,0.3 +1,1,Keratin,7,5,0,0,3,0,0,0,1.4 +1,2,Keratin,7,5.6,0,0,4.2,0,0,0,1.6 +1,3,Keratin,7,4.7,0,0,4,0,0,0,1.2 +1,4,Keratin,7,5.2,0,0,2,0,0,0,1.5 +1,1,Keratin,8,7.1,5,2.6,0.2,4.4,3.7,1.2,3.1 +1,2,Keratin,8,7.3,4.8,2.2,0.4,4.2,3.5,1.4,3.5 +1,3,Keratin,8,6.9,4.9,2.4,0.3,3.8,3.4,0.7,3.2 +1,4,Keratin,8,7,5.3,2.3,0.1,2.9,4.1,1.1,3.3 +1,1,Keratin,9,9.8,5.3,0.4,0,6,5.2,0.1,3.3 +1,2,Keratin,9,10.1,5.4,0.3,0,6.3,4.9,0.3,3 +1,3,Keratin,9,9.6,5.3,0.3,0,6.2,5.1,0.2,2.9 +1,4,Keratin,9,9.9,5.7,0.2,0,5.9,5,0.1,2.8 +1,1,Keratin,10,10.1,5.2,0,0,5.3,6,0,3.4 +1,2,Keratin,10,9.7,5.3,0,0,5.2,6.1,0,3.6 +1,3,Keratin,10,9.9,3.8,0,0,5.5,7.3,0,3.2 +1,4,Keratin,10,10.3,5.9,0,0,5.6,6.4,0,3.5 \ No newline at end of file diff --git a/omics/kelly/temp/example.R b/omics/kelly/temp/example.R deleted file mode 100644 index 46db641..0000000 --- a/omics/kelly/temp/example.R +++ /dev/null @@ -1,3 +0,0 @@ -library(tidyverse) -example <- read_csv("omics/kelly/temp/example.csv") |> janitor::clean_names() - diff --git a/omics/kelly/temp/example.csv b/omics/kelly/temp/example.csv deleted file mode 100644 index 5327aab..0000000 --- a/omics/kelly/temp/example.csv +++ /dev/null @@ -1,42 +0,0 @@ -"","t","fluorI" -"1",0,10.1385967718684 -"2",1,8.35533475533268 -"3",2,6.76788471742473 -"4",3,5.36280912133003 -"5",4,4.48247204833858 -"6",5,4.18185893519706 -"7",6,3.34896480340668 -"8",7,2.71315594667858 -"9",8,2.62614956633054 -"10",9,2.06087018509515 -"11",10,1.86074194679208 -"12",11,1.97873314323764 -"13",12,1.83378700440039 -"14",13,1.51439267158402 -"15",14,1.30714846254938 -"16",15,0.741412075403802 -"17",16,0.631299882299171 -"18",17,1.02965656564605 -"19",18,0.902298811540632 -"20",19,0.558746438644141 -"21",20,0.400682660920331 -"22",21,0.802962302399545 -"23",22,0.515497522312792 -"24",23,0.905477723273229 -"25",24,0.344178788232269 -"26",25,0.103340446000128 -"27",26,0.879290356441754 -"28",27,0.577592309885709 -"29",28,0.493046226597491 -"30",29,0.366163886781245 -"31",30,0.125189162368687 -"32",31,0.466644952642418 -"33",32,-0.095514224245819 -"34",33,0.177120019463404 -"35",34,0.20511866185474 -"36",35,0.312909299607934 -"37",36,0.184261436760406 -"38",37,0.151930611035154 -"39",38,0.216249309890573 -"40",39,-0.0782341680185992 -"41",40,0.32520930978664 diff --git a/omics/kelly/workshop.qmd b/omics/kelly/workshop.qmd index 3810f06..c7c17c1 100644 --- a/omics/kelly/workshop.qmd +++ b/omics/kelly/workshop.qmd @@ -635,6 +635,471 @@ ggplot(data = vfa_delta, aes(x = time_day, colour = treatment)) + I have not yet worked out the best way to plot the modelled reaction rate + +# Workflow 2024-04-04 + +This workflow has been written for the data files I now have! Bear in mind that what you might need from here is going to depend on the narrative of your report. You only need include in the compendium things that support your report. + +- [VFAs](https://docs.google.com/spreadsheets/d/1evdDxURggeYih0e4WX1mer9-qjwi0ADZsqlN3JEj3-o/edit#gid=191095748) + + +- [pH](https://docs.google.com/spreadsheets/d/19nDa1EXuZ9Yf7SSwnVPjHQm9MU_zqpaaCeO3VuZtRsk/edit#gid=0) + +I fixed some inconsistent formatting and unhelpful naming (sigh!) and down loaded these as csv files and saved them in the data-raw folder as: + +- [vfa2.csv](data-raw/vfa2.csv) + +- [ph.csv](data-raw/ph.csv) + +- We also have the Molecular weights for each VFA in grams per mole + [mol_wt.txt](data-raw/mol_wt.txt) + +I recommend restarting R before you start this workflow: Control-Shift-F10 (or use the Session menu) + + + +## VFA data + + +🎬 Load packages +```{r} +library(tidyverse) +``` + + + +```{r} + +vfa_cummul <- read_csv("data-raw/vfa2.csv") |> janitor::clean_names() +``` + +This what I think we have: +- set_number Two data sets, one about VFA treatment (2) and one about Protein treatments (1) + +- replicate + + - for set 1: 1-4 + - for set 2: 1-3 + +- treatment + + - for set 1: Casein, Keratin + - for set 2: Acetate, Hexanoic, Decanoic + +- time_day time in days (note time in the ph data in in hours) + +- then columns for each of the 8 measured VFA: acetate, propanoate, isobutyrate, butyrate, isopentanoate, pentanoate, isohexanoate, hexanoate + + +I think some of the data have been mislabelled as set 2 when it is set 1. I changed these in the csv file. + + +I'm going to split these into the two data sets and work on them separately + +🎬 Split the data into the two sets. Note we also remove the set number column as it is no longer needed + +```{r} +vfa_cummul_protein <- vfa_cummul |> + filter(set_number == 1) |> + select(-set_number) + +vfa_cummul_vfa <- vfa_cummul |> + filter(set_number == 2) |> + select(-set_number) +``` + + +`vfa_cummul_protein` has 2 treatments, four replicates and 10 days = 2 x 4 x 10 = 80 rows + +`vfa_cummul_vfa` has 3 treatments, 3 replicates and 10 days = 3 x 3 x 10 = 90 rows + +🎬 import molecular weight data + +```{r} +mol_wt <- read_table("data-raw/mol_wt.txt") |> + mutate(vfa = tolower(vfa)) +``` + +### Set 1: Protein treatments + +#### 1. Calculate *Change* in VFA g/l with time + +🎬 Create dataframe for the change in VFA the change in time + +```{r} +vfa_delta_protein <- vfa_cummul_protein |> + group_by(treatment, replicate) |> + arrange(treatment, replicate, time_day) |> + mutate(acetate = acetate - lag(acetate), + propanoate = propanoate - lag(propanoate), + isobutyrate = isobutyrate - lag(isobutyrate), + butyrate = butyrate - lag(butyrate), + isopentanoate = isopentanoate - lag(isopentanoate), + pentanoate = pentanoate - lag(pentanoate), + isohexanoate = isohexanoate - lag(isohexanoate), + hexanoate = hexanoate - lag(hexanoate), + delta_time = time_day - lag(time_day)) +``` + +Now we have two dataframes, one for the cumulative data and one for the +change in VFA and time. Note that the VFA values have been replaced by the change in VFA but the change in time is in a separate column. I have done this because we later want to plot flux. Note that unlike the sample data, the time steps are all 1 day so the change in time is always 1 and not really needed. I have included it here to make more clear that the units of flux are which is the change in VFA concentration per unit of time per unit of weight or volume of material + +#### 2. Recalculate the data into grams per litre + +To make conversions from mM to g/l we need to do mM \* 0.001 \* MW. We +will pivot the VFA data to long format +and join the molecular weight data to the VFA data. Then we can +calculate the g/l. We will do this for both the cumulative and delta +dataframes. + + + +🎬 Pivot the cumulative data to long format: + +```{r} + +vfa_cummul_protein <- vfa_cummul_protein |> + pivot_longer(cols = -c(treatment, + replicate, + time_day), + values_to = "conc_mM", + names_to = "vfa") +``` + +View `vfa_cummul_protein` to check you understand what you have done. + +🎬 Join molecular weight to data and calculate g/l (mutate to convert to +g/l \* 0.001 \* MW): + +```{r} +vfa_cummul_protein <- vfa_cummul_protein |> + left_join(mol_wt, by = "vfa") |> + mutate(conc_g_l = conc_mM * 0.001 * mw) +``` + +View `vfa_cummul_protein` to check you understand what you have done. + +Repeat for the delta data. + +🎬 Pivot the change data, `vfa_delta_protein` to long format (📢 delta_time is added to the list of columns that do not need to be pivoted but repeated): + +```{r} +vfa_delta_protein <- vfa_delta_protein |> + pivot_longer(cols = -c(treatment, + replicate, + time_day), + values_to = "conc_mM", + names_to = "vfa") +``` + +View `vfa_delta_protein` to check it looks like `vfa_cummul_protein`. + +🎬 Join molecular weight to data and calculate g/l (mutate to convert to +g/l \* 0.001 \* MW): + +```{r} + +vfa_delta_protein <- vfa_delta_protein |> + left_join(mol_wt, by = "vfa") |> + mutate(conc_g_l = conc_mM * 0.001 * mw) +``` + +## 3. Calculate the percent representation of each VFA + +by mM and by weight + +🎬 Add a column which is the percent representation of each VFA for mM +and g/l: + +```{r} +vfa_cummul_protein <- vfa_cummul_protein |> + group_by(treatment, replicate, time_day) |> + mutate(percent_conc_g_l = conc_g_l / sum(conc_g_l) * 100, + percent_conc_mM = conc_mM / sum(conc_mM) * 100) + +``` + +## Graphs for info so far + +🎬 Make summary data for graphing + +```{r} +vfa_cummul_protein_summary <- vfa_cummul_protein |> + group_by(treatment, time_day, vfa) |> + summarise(mean_g_l = mean(conc_g_l), + se_g_l = sd(conc_g_l)/sqrt(length(conc_g_l)), + mean_mM = mean(conc_mM), + se_mM = sd(conc_mM)/sqrt(length(conc_mM))) |> + ungroup() +``` + +```{r} +vfa_delta_protein_summary <- vfa_delta_protein |> + group_by(treatment, time_day, vfa) |> + summarise(mean_g_l = mean(conc_g_l), + se_g_l = sd(conc_g_l)/sqrt(length(conc_g_l)), + mean_mM = mean(conc_mM), + se_mM = sd(conc_mM)/sqrt(length(conc_mM))) |> + ungroup() +``` + +🎬 Graph the cumulative data, grams per litre: + +```{r} + +vfa_cummul_protein_summary |> + ggplot(aes(x = time_day, colour = vfa)) + + geom_line(aes(y = mean_g_l), + linewidth = 1) + + geom_errorbar(aes(ymin = mean_g_l - se_g_l, + ymax = mean_g_l + se_g_l), + width = 0.5, + show.legend = F, + linewidth = 1) + + scale_color_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean VFA concentration (g/l)") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) + + + +``` + +🎬 Graph the change data, grams per litre: + +```{r} + +vfa_delta_protein_summary |> + ggplot(aes(x = time_day, colour = vfa)) + + geom_line(aes(y = mean_g_l), + linewidth = 1) + + geom_errorbar(aes(ymin = mean_g_l - se_g_l, + ymax = mean_g_l + se_g_l), + width = 0.5, + show.legend = F, + linewidth = 1) + + scale_color_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean change in VFA concentration (g/l)") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) + + + +``` + +🎬 Graph the mean percent representation of each VFA g/l. Note +`geom_col()` will plot proportion if we set`position = "fill"` + +```{r} +vfa_cummul_protein_summary |> + ggplot(aes(x = time_day, y = mean_g_l, fill = vfa)) + + geom_col(position = "fill") + + scale_fill_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean Proportion VFA") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) +``` + + + +### Set 2: VFA treatments + +#### 1. Calculate *Change* in VFA g/l with time + +🎬 Create dataframe for the change in VFA the change in time + +```{r} +vfa_delta_vfa <- vfa_cummul_vfa |> + group_by(treatment, replicate) |> + arrange(treatment, replicate, time_day) |> + mutate(acetate = acetate - lag(acetate), + propanoate = propanoate - lag(propanoate), + isobutyrate = isobutyrate - lag(isobutyrate), + butyrate = butyrate - lag(butyrate), + isopentanoate = isopentanoate - lag(isopentanoate), + pentanoate = pentanoate - lag(pentanoate), + isohexanoate = isohexanoate - lag(isohexanoate), + hexanoate = hexanoate - lag(hexanoate), + delta_time = time_day - lag(time_day)) +``` + +Now we have two dataframes, one for the cumulative data and one for the +change in VFA and time. Note that the VFA values have been replaced by the change in VFA but the change in time is in a separate column. I have done this because we later want to plot flux. Note that unlike the sample data, the time steps are all 1 day so the change in time is always 1 and not really needed. I have included it here to make more clear that the units of flux are which is the change in VFA concentration per unit of time per unit of weight or volume of material + +#### 2. Recalculate the data into grams per litre + +To make conversions from mM to g/l we need to do mM \* 0.001 \* MW. We +will pivot the VFA data to long format +and join the molecular weight data to the VFA data. Then we can +calculate the g/l. We will do this for both the cumulative and delta +dataframes. + + +🎬 Pivot the cumulative data to long format: + +```{r} + +vfa_cummul_vfa <- vfa_cummul_vfa |> + pivot_longer(cols = -c(treatment, + replicate, + time_day), + values_to = "conc_mM", + names_to = "vfa") +``` + +View `vfa_cummul_vfa` to check you understand what you have done. + +🎬 Join molecular weight to data and calculate g/l (mutate to convert to +g/l \* 0.001 \* MW): + +```{r} +vfa_cummul_vfa <- vfa_cummul_vfa |> + left_join(mol_wt, by = "vfa") |> + mutate(conc_g_l = conc_mM * 0.001 * mw) +``` + +View `vfa_cummul_vfa` to check you understand what you have done. + +Repeat for the delta data. + +🎬 Pivot the change data, `vfa_delta_vfa` to long format (📢 delta_time is added to the list of columns that do not need to be pivoted but repeated): + +```{r} +vfa_delta_vfa <- vfa_delta_vfa |> + pivot_longer(cols = -c(treatment, + replicate, + time_day), + values_to = "conc_mM", + names_to = "vfa") +``` + +View `vfa_delta_vfa` to check it looks like `vfa_cummul_vfa`. + +🎬 Join molecular weight to data and calculate g/l (mutate to convert to +g/l \* 0.001 \* MW): + +```{r} + +vfa_delta_vfa <- vfa_delta_vfa |> + left_join(mol_wt, by = "vfa") |> + mutate(conc_g_l = conc_mM * 0.001 * mw) +``` + +## 3. Calculate the percent representation of each VFA + +by mM and by weight + +🎬 Add a column which is the percent representation of each VFA for mM +and g/l: + +```{r} +vfa_cummul_vfa <- vfa_cummul_vfa |> + group_by(treatment, replicate, time_day) |> + mutate(percent_conc_g_l = conc_g_l / sum(conc_g_l) * 100, + percent_conc_mM = conc_mM / sum(conc_mM) * 100) + +``` + +## Graphs for info so far + +🎬 Make summary data for graphing + +```{r} +vfa_cummul_vfa_summary <- vfa_cummul_vfa |> + group_by(treatment, time_day, vfa) |> + summarise(mean_g_l = mean(conc_g_l), + se_g_l = sd(conc_g_l)/sqrt(length(conc_g_l)), + mean_mM = mean(conc_mM), + se_mM = sd(conc_mM)/sqrt(length(conc_mM))) |> + ungroup() +``` + +```{r} +vfa_delta_vfa_summary <- vfa_delta_vfa |> + group_by(treatment, time_day, vfa) |> + summarise(mean_g_l = mean(conc_g_l), + se_g_l = sd(conc_g_l)/sqrt(length(conc_g_l)), + mean_mM = mean(conc_mM), + se_mM = sd(conc_mM)/sqrt(length(conc_mM))) |> + ungroup() +``` + +🎬 Graph the cumulative data, grams per litre: + +```{r} + +vfa_cummul_vfa_summary |> + ggplot(aes(x = time_day, colour = vfa)) + + geom_line(aes(y = mean_g_l), + linewidth = 1) + + geom_errorbar(aes(ymin = mean_g_l - se_g_l, + ymax = mean_g_l + se_g_l), + width = 0.5, + show.legend = F, + linewidth = 1) + + scale_color_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean VFA concentration (g/l)") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) + + + +``` + +🎬 Graph the change data, grams per litre: + +```{r} + +vfa_delta_vfa_summary |> + ggplot(aes(x = time_day, colour = vfa)) + + geom_line(aes(y = mean_g_l), + linewidth = 1) + + geom_errorbar(aes(ymin = mean_g_l - se_g_l, + ymax = mean_g_l + se_g_l), + width = 0.5, + show.legend = F, + linewidth = 1) + + scale_color_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean change in VFA concentration (g/l)") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) + + + +``` + +🎬 Graph the mean percent representation of each VFA g/l. Note +`geom_col()` will plot proportion if we set`position = "fill"` + +```{r} +vfa_cummul_vfa_summary |> + ggplot(aes(x = time_day, y = mean_g_l, fill = vfa)) + + geom_col(position = "fill") + + scale_fill_viridis_d(name = NULL) + + scale_x_continuous(name = "Time (days)") + + scale_y_continuous(name = "Mean Proportion VFA") + + theme_bw() + + facet_wrap(~treatment) + + theme(strip.background = element_blank()) +``` + + + + + + + + Pages made with R [@R-core], Quarto [@allaire2022], `knitr` [@knitr], `kableExtra` [@kableExtra]