Switch to unified view

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")))