|
a |
|
b/research_paper_code/src/qtl.analyses.R |
|
|
1 |
# This data structure provides information about each QTL |
|
|
2 |
# analysis. Each analysis is specified by the following 3 parameters: |
|
|
3 |
# |
|
|
4 |
# pheno phenotype or trait to map |
|
|
5 |
# cov covariates included in regression model |
|
|
6 |
# outliers data points to remove according to their residuals |
|
|
7 |
# after removing linear effects of covariates. |
|
|
8 |
# |
|
|
9 |
# See comments below for additional details on the QTL analyses. |
|
|
10 |
analyses <- list( |
|
|
11 |
|
|
|
12 |
# MUSCLE AND BONE TRAITS |
|
|
13 |
# ---------------------- |
|
|
14 |
# For all five muscle weights (TA, EDL, soleus, plantaris and |
|
|
15 |
# gastrocnemius), we map QTLs conditioning on tibia length |
|
|
16 |
# ("tibia"). For tibia length, we map QTLs conditioned on body weight. |
|
|
17 |
# |
|
|
18 |
# Tibia length explains 12-18% of variance in the muscle weights. The |
|
|
19 |
# rationale for including tibia length as a covariate is bone length |
|
|
20 |
# may somehow regulate muscle weight as well, and we would like to |
|
|
21 |
# isolate the genetic factors that directly regulate development of |
|
|
22 |
# the muscle tissues. |
|
|
23 |
# |
|
|
24 |
# For bone-mineral density (BMD), we created a binary trait that |
|
|
25 |
# signals "abnormal" BMD. We do not include any covariates when |
|
|
26 |
# mapping QTLs for these traits. Note that body weight is also |
|
|
27 |
# uncorrelated with BMD. |
|
|
28 |
# |
|
|
29 |
# For all muscle and bone traits, we include a binary indicator for |
|
|
30 |
# round SW16 as a covariate because the mice from this round showed |
|
|
31 |
# substantial deviation in these traits compared to the rest of the |
|
|
32 |
# mice. |
|
|
33 |
TA = list(pheno="TA",cov=c("SW16","tibia"), |
|
|
34 |
outliers=function (x) x < (-18)), |
|
|
35 |
EDL = list(pheno="EDL",cov=c("SW16","tibia"), |
|
|
36 |
outliers=function (x) x < (-5) | x > 4), |
|
|
37 |
soleus = list(pheno="soleus",cov=c("SW16","tibia"), |
|
|
38 |
outliers=function (x) x < (-4) | x > 4), |
|
|
39 |
plant = list(pheno="plantaris",cov=c("SW16","tibia"), |
|
|
40 |
outliers=function (x) x < (-9) | x > 8), |
|
|
41 |
gastroc = list(pheno="gastroc",cov=c("SW16","tibia"), |
|
|
42 |
outliers=function (x) x < (-40) | x > 50), |
|
|
43 |
tibia = list(pheno="tibia",cov=c("SW6","SW16","sacweight"), |
|
|
44 |
outliers=function (x) x < (-1.5)), |
|
|
45 |
BMD = list(pheno="BMD",cov="SW16",outliers=function (x) x > 0.14), |
|
|
46 |
abBMD = list(pheno="abBMD",cov="SW16",outliers=NULL), |
|
|
47 |
|
|
|
48 |
# OTHER PHYSIOLOGICAL TRAITS |
|
|
49 |
# -------------------------- |
|
|
50 |
# Body weights bw1, bw2 and bw3 were measured on subsequent days of |
|
|
51 |
# the methamphetamine sensitivity tests, and are highly correlated |
|
|
52 |
# with each other (r^2 = 98%), so it is only necessary to map QTLs for |
|
|
53 |
# one of them. The body weight measurements after sacrifice |
|
|
54 |
# ("sacweight") show a considerable departure in Round SW17, so we |
|
|
55 |
# include a binary indicator for this round as a covariate for |
|
|
56 |
# sacweight. We include age as a covariate for the "bw0" body weight |
|
|
57 |
# because it was measured while the mouse was still growing. |
|
|
58 |
# |
|
|
59 |
# Fasting glucose levels are explained partially by body weight (PVE = |
|
|
60 |
# 6%), so we include body weight as a covariate for fasting glucose |
|
|
61 |
# levels. Rounds SW1 and SW11 showed a considerable departure in |
|
|
62 |
# fasting glucose levels from the other rounds, so we included binary |
|
|
63 |
# indicators for these two rounds as covariates for fasting glucose |
|
|
64 |
# levels. |
|
|
65 |
bw0 = list(pheno="bw0",cov="glucoseage", |
|
|
66 |
outliers=function (x) x < (-8.5) | x > 8.5), |
|
|
67 |
bw1 = list(pheno="bw1",cov=c("methage","SW17"), |
|
|
68 |
outliers=function (x) x < (-9) | x > 10), |
|
|
69 |
ppiwt = list(pheno="PPIweight",cov="SW17",outliers=NULL), |
|
|
70 |
sacwt = list(pheno="sacweight",cov="SW17",outliers=NULL), |
|
|
71 |
fastgl = list(pheno="fastglucose",cov=c("SW1","SW11","bw0"), |
|
|
72 |
outliers=function (x) x < (-60) | x > 60), |
|
|
73 |
tail = list(pheno="taillength",outliers = NULL, |
|
|
74 |
cov=c("bw0","glucoseage","SW3","SW4","SW19","SW20","SW22", |
|
|
75 |
"SW24")), |
|
|
76 |
testis = list(pheno="testisweight",cov="sacweight", |
|
|
77 |
outliers=function (x) x < (-0.075)), |
|
|
78 |
|
|
|
79 |
# FEAR CONDITIONING TRAITS |
|
|
80 |
# ------------------------ |
|
|
81 |
# For all fear conditioning traits, the cage used for testing appears |
|
|
82 |
# to have an effect on the phenotype, so we include binary indicators |
|
|
83 |
# for cage as covariates for all FC phenotypes. Further, the FC |
|
|
84 |
# phenotype measurements in Round SW17 show a noticeably different |
|
|
85 |
# distribution in the FC phenotypes from the other rounds, so we |
|
|
86 |
# include a binary indicator for round SW17 as a covariate in all FC |
|
|
87 |
# traits. |
|
|
88 |
# |
|
|
89 |
# These analyses control for proportion of freezing on day 1 during |
|
|
90 |
# exposure to the tone ("AvToneD1"). AvToneD1 explains 11-25% of the |
|
|
91 |
# variance in the Day 2 and Day 3 freezing measures. Note that here we |
|
|
92 |
# can map QTLs for freezing to the altered context on Day 3 |
|
|
93 |
# ("AvAltContextD3") as a quantitative trait after conditioning on |
|
|
94 |
# AvToneD1 because the distribution for this trait is no longer quite |
|
|
95 |
# so bimodal, and looks fairly "normal". So there is no need to map |
|
|
96 |
# QTLs for the binary version of this trait. |
|
|
97 |
# |
|
|
98 |
# PreTrainD1 is a very ugly trait with massive box effects and a lot |
|
|
99 |
# of low values, which might have to be removed as outliers. It is |
|
|
100 |
# quite likely that these outliers represent the "deaf" mice that |
|
|
101 |
# might be skewing the whole results. These outliers are present in |
|
|
102 |
# every box, so not a box-specific effect. |
|
|
103 |
d2ctxt = list(pheno="AvContextD2",outliers=NULL, |
|
|
104 |
cov=c("AvToneD1","FCbox1","FCbox2","FCbox3","SW17")), |
|
|
105 |
d3altc = list(pheno="AvAltContextD3",outliers=function (x) x > 1, |
|
|
106 |
cov=c("AvToneD1","FCbox1","FCbox2","FCbox3","SW17")), |
|
|
107 |
d3tone = list(pheno="AvToneD3",outliers=NULL, |
|
|
108 |
cov=c("AvToneD1","FCbox1","FCbox2","FCbox3","SW17")), |
|
|
109 |
pretraind1 = list(pheno="PreTrainD1",outliers=NULL, |
|
|
110 |
cov=c("FCbox1","FCbox2","FCbox3","SW10","SW16","SW17","SW20")), |
|
|
111 |
d1avtone = list(pheno="AvToneD1",outliers=NULL, |
|
|
112 |
cov=c("FCbox1","FCbox2","FCbox3","SW10","SW7","SW14","SW20")), |
|
|
113 |
|
|
|
114 |
# METHAMPHETAMINE SENSITIVITY, LOCOMOTOR ACTIVITY AND ANXIETY-LIKE BEHAVIOR |
|
|
115 |
# ------------------------------------------------------------------------- |
|
|
116 |
# We checked all the cages used in these tests to see whether the |
|
|
117 |
# phenotypes measured using any given cage departed noticeably from |
|
|
118 |
# the other cages. Cage #7 consistently has a large effect. |
|
|
119 |
d1dist0to15 = list(pheno="D1totaldist0to15",cov="methcage7", |
|
|
120 |
outliers=function (x) x < (-2000) | x > 2200), |
|
|
121 |
d2dist0to15 = list(pheno="D2totaldist0to15",cov="methcage7", |
|
|
122 |
outliers=function (x) x < (-2000) | x > 2500), |
|
|
123 |
d3dist0to15 = list(pheno="D3totaldist0to15",cov="methcage7", |
|
|
124 |
outliers=function (x) x > 8500), |
|
|
125 |
d1dist0to30 = list(pheno="D1totaldist0to30",cov="methcage7", |
|
|
126 |
outliers=function (x) x < (-3500) | x > 4000), |
|
|
127 |
d2dist0to30 = list(pheno="D2totaldist0to30",cov="methcage7", |
|
|
128 |
outliers=function (x) x > 4500), |
|
|
129 |
d3dist0to30 = list(pheno="D3totaldist0to30",cov="methcage7", |
|
|
130 |
outliers=function (x) x > 20000), |
|
|
131 |
|
|
|
132 |
d1totdist5 = list(pheno="D1TOTDIST5",cov="methcage7", |
|
|
133 |
outliers=function (x) x < (-1000) | x > 1000), |
|
|
134 |
d1totdist10 = list(pheno="D1TOTDIST10",cov="methcage7", |
|
|
135 |
outliers=function (x) x < (-750) | x > 750), |
|
|
136 |
d1totdist15 = list(pheno="D1TOTDIST15",cov="methcage7", |
|
|
137 |
outliers=function (x) x < (-750) | x > 750), |
|
|
138 |
d1totdist20 = list(pheno="D1TOTDIST20",cov="methcage7", |
|
|
139 |
outliers=function (x) x < (-750) | x > 750), |
|
|
140 |
d1totdist25 = list(pheno="D1TOTDIST25",cov="methcage7", |
|
|
141 |
outliers=function (x) x < (-750) | x > 750), |
|
|
142 |
d1totdist30 = list(pheno="D1TOTDIST30",cov="methcage7", |
|
|
143 |
outliers=function (x) x > 700), |
|
|
144 |
|
|
|
145 |
d2totdist5 = list(pheno="D2TOTDIST5",cov="methcage7", |
|
|
146 |
outliers=function (x) x < (-1250) | x > 1250), |
|
|
147 |
d2totdist10 = list(pheno="D2TOTDIST10",cov="methcage7", |
|
|
148 |
outliers=function (x) x > 1000), |
|
|
149 |
d2totdist15 = list(pheno="D2TOTDIST15",cov="methcage7", |
|
|
150 |
outliers=function (x) x > 850), |
|
|
151 |
d2totdist20 = list(pheno="D2TOTDIST20",cov="methcage7", |
|
|
152 |
outliers=function (x) x > 1000), |
|
|
153 |
d2totdist25 = list(pheno="D2TOTDIST25",cov="methcage7", |
|
|
154 |
outliers=NULL), |
|
|
155 |
d2totdist30 = list(pheno="D2TOTDIST30",cov="methcage7", |
|
|
156 |
outliers=function (x) x > 900), |
|
|
157 |
|
|
|
158 |
d3totdist5 = list(pheno="D3TOTDIST5",cov="methcage7", |
|
|
159 |
outliers=function (x) x > 2000), |
|
|
160 |
d3totdist10 = list(pheno="D3TOTDIST10",cov="methcage7", |
|
|
161 |
outliers=function (x) x > 4000), |
|
|
162 |
d3totdist15 = list(pheno="D3TOTDIST15",cov="methcage7", |
|
|
163 |
outliers=function (x) x > 4000), |
|
|
164 |
d3totdist20 = list(pheno="D3TOTDIST20",cov="methcage7", |
|
|
165 |
outliers=function (x) x > 4500), |
|
|
166 |
d3totdist25 = list(pheno="D3TOTDIST25",cov="methcage7", |
|
|
167 |
outliers=function (x) x > 4500), |
|
|
168 |
d3totdist30 = list(pheno="D3TOTDIST30",cov="methcage7", |
|
|
169 |
outliers=function (x) x > 3750), |
|
|
170 |
|
|
|
171 |
D1ctrtime0to15 = list(pheno="D1ctrtime0to15",cov="methcage7", |
|
|
172 |
outliers=function (x) x < (-0.5)), |
|
|
173 |
D2ctrtime0to15 = list(pheno="D2ctrtime0to15",cov="methcage7", |
|
|
174 |
outliers=function (x) x < (-0.75)), |
|
|
175 |
D3ctrtime0to15 = list(pheno="D3ctrtime0to15",cov="methcage7", |
|
|
176 |
outliers=function (x) x < (-0.75)), |
|
|
177 |
D1ctrtime0to30 = list(pheno="D1ctrtime0to30",cov="methcage7", |
|
|
178 |
outliers=function (x) x < (-0.6)), |
|
|
179 |
D2ctrtime0to30 = list(pheno="D2ctrtime0to30",cov="methcage7", |
|
|
180 |
outliers=function (x) x < (-0.75)), |
|
|
181 |
D3ctrtime0to30 = list(pheno="D3ctrtime0to30",cov="methcage7", |
|
|
182 |
outliers=function (x) x < (-0.85)), |
|
|
183 |
|
|
|
184 |
D1hact0to15 = list(pheno="D1hact0to15",cov="methcage7",outliers=NULL), |
|
|
185 |
D2hact0to15 = list(pheno="D2hact0to15",cov="methcage7",outliers=NULL), |
|
|
186 |
D3hact0to15 = list(pheno="D3hact0to15",cov="methcage7",outliers=NULL), |
|
|
187 |
D1hact0to30 = list(pheno="D1hact0to30",cov="methcage7",outliers=NULL), |
|
|
188 |
D2hact0to30 = list(pheno="D2hact0to30",cov="methcage7",outliers=NULL), |
|
|
189 |
D3hact0to30 = list(pheno="D3hact0to30",cov="methcage7",outliers=NULL), |
|
|
190 |
|
|
|
191 |
D1vact0to15 = list(pheno="D1vact0to15",cov=c("methcage7","methcage8", |
|
|
192 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
193 |
outliers=function (x) x < (-0.85) | x > 0.85), |
|
|
194 |
D2vact0to15 = list(pheno="D2vact0to15",cov=c("methcage7","methcage8", |
|
|
195 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
196 |
outliers=function (x) x < (-1) | x > 1), |
|
|
197 |
D3vact0to15 = list(pheno="D3vact0to15",cov=c("methcage7","methcage8", |
|
|
198 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
199 |
outliers=function (x) x < (-1.25) | x > 1.25), |
|
|
200 |
D1vact0to30 = list(pheno="D1vact0to30",cov=c("methcage7","methcage8", |
|
|
201 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
202 |
outliers=function (x) x < (-1) | x > 1), |
|
|
203 |
D2vact0to30 = list(pheno="D2vact0to30",cov=c("methcage7","methcage8", |
|
|
204 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
205 |
outliers=function (x) x < (-1) | x > 1), |
|
|
206 |
D3vact0to30 = list(pheno="D3vact0to30",cov=c("methcage7","methcage8", |
|
|
207 |
"methcage9","methcage10","methcage11","methcage12"), |
|
|
208 |
outliers=function (x) x > 1.5), |
|
|
209 |
|
|
|
210 |
# PREPULSE INHIBITION (PPI) PHENOTYPES |
|
|
211 |
# ------------------------------------ |
|
|
212 |
# All boxes appear to have some effect on some of the PPI phenotypes, |
|
|
213 |
# with Box #3 having a particularly large effect on some phenotypes, |
|
|
214 |
# so we include all PPI box indicators as covariates in analysis of the |
|
|
215 |
# PPI phenotypes. |
|
|
216 |
# |
|
|
217 |
# We also map QTLs for habituation to pulses by analyzing the startle |
|
|
218 |
# response during the fourth block of pulse-alone trials against the |
|
|
219 |
# startle response during the first block of pulse-alone trials. |
|
|
220 |
pp3PPIavg = list(pheno="pp3PPIavg",outliers=function (x) x < (-0.9), |
|
|
221 |
cov=c("PPIbox1","PPIbox2","PPIbox3","PPIbox4")), |
|
|
222 |
pp6PPIavg = list(pheno="pp6PPIavg",outliers=function (x) x < (-1.1), |
|
|
223 |
cov=c("PPIbox1","PPIbox2","PPIbox3","PPIbox4")), |
|
|
224 |
pp12PPIavg = list(pheno="pp12PPIavg",outliers=function (x) x < (-1), |
|
|
225 |
cov=c("PPIbox1","PPIbox2","PPIbox3","PPIbox4")), |
|
|
226 |
PPIavg = list(pheno="PPIavg",outliers=function (x) x < (-1), |
|
|
227 |
cov=c("PPIbox1","PPIbox2","PPIbox3","PPIbox4")), |
|
|
228 |
PPIstartle = list(pheno="startle",outliers=function (x) x > 250, |
|
|
229 |
cov=c("PPIbox1","PPIbox2","PPIbox3","PPIbox4")), |
|
|
230 |
PPIhabit = list(pheno="p120b4",outliers=function (x) x < (-140) | x > (140), |
|
|
231 |
cov=c("p120b1","PPIbox1","PPIbox2","PPIbox3","PPIbox4"))) |