train.R.html 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <title></title>
  6. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  7. <style type="text/css">
  8. td.linenos { background-color: #f0f0f0; padding-right: 10px; }
  9. span.lineno { background-color: #f0f0f0; padding: 0 5px 0 5px; }
  10. pre { line-height: 125%; }
  11. body .hll { background-color: #ffffcc }
  12. body { background: #f8f8f8; }
  13. body .c { color: #408080; font-style: italic } /* Comment */
  14. body .err { border: 1px solid #FF0000 } /* Error */
  15. body .k { color: #008000; font-weight: bold } /* Keyword */
  16. body .o { color: #666666 } /* Operator */
  17. body .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
  18. body .cm { color: #408080; font-style: italic } /* Comment.Multiline */
  19. body .cp { color: #BC7A00 } /* Comment.Preproc */
  20. body .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
  21. body .c1 { color: #408080; font-style: italic } /* Comment.Single */
  22. body .cs { color: #408080; font-style: italic } /* Comment.Special */
  23. body .gd { color: #A00000 } /* Generic.Deleted */
  24. body .ge { font-style: italic } /* Generic.Emph */
  25. body .gr { color: #FF0000 } /* Generic.Error */
  26. body .gh { color: #000080; font-weight: bold } /* Generic.Heading */
  27. body .gi { color: #00A000 } /* Generic.Inserted */
  28. body .go { color: #888888 } /* Generic.Output */
  29. body .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
  30. body .gs { font-weight: bold } /* Generic.Strong */
  31. body .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
  32. body .gt { color: #0044DD } /* Generic.Traceback */
  33. body .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
  34. body .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
  35. body .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
  36. body .kp { color: #008000 } /* Keyword.Pseudo */
  37. body .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
  38. body .kt { color: #B00040 } /* Keyword.Type */
  39. body .m { color: #666666 } /* Literal.Number */
  40. body .s { color: #BA2121 } /* Literal.String */
  41. body .na { color: #7D9029 } /* Name.Attribute */
  42. body .nb { color: #008000 } /* Name.Builtin */
  43. body .nc { color: #0000FF; font-weight: bold } /* Name.Class */
  44. body .no { color: #880000 } /* Name.Constant */
  45. body .nd { color: #AA22FF } /* Name.Decorator */
  46. body .ni { color: #999999; font-weight: bold } /* Name.Entity */
  47. body .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
  48. body .nf { color: #0000FF } /* Name.Function */
  49. body .nl { color: #A0A000 } /* Name.Label */
  50. body .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
  51. body .nt { color: #008000; font-weight: bold } /* Name.Tag */
  52. body .nv { color: #19177C } /* Name.Variable */
  53. body .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
  54. body .w { color: #bbbbbb } /* Text.Whitespace */
  55. body .mb { color: #666666 } /* Literal.Number.Bin */
  56. body .mf { color: #666666 } /* Literal.Number.Float */
  57. body .mh { color: #666666 } /* Literal.Number.Hex */
  58. body .mi { color: #666666 } /* Literal.Number.Integer */
  59. body .mo { color: #666666 } /* Literal.Number.Oct */
  60. body .sa { color: #BA2121 } /* Literal.String.Affix */
  61. body .sb { color: #BA2121 } /* Literal.String.Backtick */
  62. body .sc { color: #BA2121 } /* Literal.String.Char */
  63. body .dl { color: #BA2121 } /* Literal.String.Delimiter */
  64. body .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
  65. body .s2 { color: #BA2121 } /* Literal.String.Double */
  66. body .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
  67. body .sh { color: #BA2121 } /* Literal.String.Heredoc */
  68. body .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
  69. body .sx { color: #008000 } /* Literal.String.Other */
  70. body .sr { color: #BB6688 } /* Literal.String.Regex */
  71. body .s1 { color: #BA2121 } /* Literal.String.Single */
  72. body .ss { color: #19177C } /* Literal.String.Symbol */
  73. body .bp { color: #008000 } /* Name.Builtin.Pseudo */
  74. body .fm { color: #0000FF } /* Name.Function.Magic */
  75. body .vc { color: #19177C } /* Name.Variable.Class */
  76. body .vg { color: #19177C } /* Name.Variable.Global */
  77. body .vi { color: #19177C } /* Name.Variable.Instance */
  78. body .vm { color: #19177C } /* Name.Variable.Magic */
  79. body .il { color: #666666 } /* Literal.Number.Integer.Long */
  80. </style>
  81. </head>
  82. <body>
  83. <h2></h2>
  84. <div class="highlight"><pre><span></span><span class="c1">#!/usr/bin/env Rscript</span>
  85. <span class="kn">library</span><span class="p">(</span>xlsx<span class="p">)</span>
  86. <span class="kn">library</span><span class="p">(</span>frmaTools<span class="p">)</span>
  87. <span class="kn">library</span><span class="p">(</span>stringr<span class="p">)</span>
  88. <span class="kn">library</span><span class="p">(</span>magrittr<span class="p">)</span>
  89. <span class="kn">library</span><span class="p">(</span>plyr<span class="p">)</span>
  90. <span class="kn">library</span><span class="p">(</span>affy<span class="p">)</span>
  91. <span class="kn">library</span><span class="p">(</span>preprocessCore<span class="p">)</span>
  92. training.data.dir <span class="o">&lt;-</span> <span class="s">&quot;Training Data&quot;</span>
  93. datasets <span class="o">&lt;-</span> <span class="kt">data.frame</span><span class="p">(</span>Dataset<span class="o">=</span><span class="kp">list.files</span><span class="p">(</span>training.data.dir<span class="p">))</span>
  94. <span class="kp">rownames</span><span class="p">(</span>datasets<span class="p">)</span> <span class="o">&lt;-</span> datasets<span class="o">$</span>Dataset
  95. datasets<span class="o">$</span>Tissue <span class="o">&lt;-</span> <span class="kp">factor</span><span class="p">(</span>str_extract<span class="p">(</span>datasets<span class="o">$</span>Dataset<span class="p">,</span> <span class="s">&quot;\\b(PAX|BX)\\b&quot;</span><span class="p">))</span>
  96. tsmsg <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span><span class="kc">...</span><span class="p">)</span> <span class="p">{</span>
  97. <span class="kp">message</span><span class="p">(</span><span class="kp">date</span><span class="p">(),</span> <span class="s">&quot;: &quot;</span><span class="p">,</span> <span class="kc">...</span><span class="p">)</span>
  98. <span class="p">}</span>
  99. <span class="c1">## Some Scan Dates are marked as identical for multiple batches, which</span>
  100. <span class="c1">## is bad. But the dates embedded in the file names for these batches</span>
  101. <span class="c1">## are different, so we use those dates instead.</span>
  102. parse.date.from.filename <span class="o">&lt;-</span> <span class="kr">function</span><span class="p">(</span>fname<span class="p">)</span> <span class="p">{</span>
  103. res1 <span class="o">&lt;-</span> str_match<span class="p">(</span>fname<span class="p">,</span> <span class="s">&quot;^(\\d\\d)(\\d\\d)(\\d\\d)&quot;</span><span class="p">)[,</span><span class="kt">c</span><span class="p">(</span><span class="m">4</span><span class="p">,</span><span class="m">2</span><span class="p">,</span><span class="m">3</span><span class="p">)]</span>
  104. res2 <span class="o">&lt;-</span> str_match<span class="p">(</span>fname<span class="p">,</span> <span class="s">&quot;^20(\\d\\d)_(\\d\\d)_(\\d\\d)&quot;</span><span class="p">)[,</span><span class="m">-1</span><span class="p">]</span>
  105. res1<span class="p">[</span><span class="kp">is.na</span><span class="p">(</span>res1<span class="p">)]</span> <span class="o">&lt;-</span> res2<span class="p">[</span><span class="kp">is.na</span><span class="p">(</span>res1<span class="p">)]</span>
  106. <span class="kp">colnames</span><span class="p">(</span>res1<span class="p">)</span> <span class="o">&lt;-</span> <span class="kt">c</span><span class="p">(</span><span class="s">&quot;year&quot;</span><span class="p">,</span> <span class="s">&quot;month&quot;</span><span class="p">,</span> <span class="s">&quot;day&quot;</span><span class="p">)</span>
  107. res1<span class="p">[,</span><span class="s">&quot;year&quot;</span><span class="p">]</span> <span class="o">%&lt;&gt;%</span> str_c<span class="p">(</span><span class="s">&quot;20&quot;</span><span class="p">,</span> <span class="m">.</span><span class="p">)</span>
  108. <span class="kp">as.Date</span><span class="p">(</span><span class="kp">do.call</span><span class="p">(</span><span class="kp">ISOdate</span><span class="p">,</span> <span class="kt">data.frame</span><span class="p">(</span>res1<span class="p">)))</span>
  109. <span class="p">}</span>
  110. makeVectorsAffyBatch <span class="o">&lt;-</span> <span class="kr">function</span> <span class="p">(</span>files<span class="p">,</span> batch.id<span class="p">,</span> background <span class="o">=</span> <span class="s">&quot;rma&quot;</span><span class="p">,</span> normalize <span class="o">=</span> <span class="s">&quot;quantile&quot;</span><span class="p">,</span>
  111. normVec <span class="o">=</span> <span class="kc">NULL</span><span class="p">,</span> cdfname <span class="o">=</span> <span class="kc">NULL</span><span class="p">,</span> file.dir <span class="o">=</span> <span class="s">&quot;.&quot;</span><span class="p">,</span> verbose <span class="o">=</span> <span class="kc">TRUE</span><span class="p">)</span>
  112. <span class="p">{</span>
  113. wd <span class="o">&lt;-</span> <span class="kp">getwd</span><span class="p">()</span>
  114. <span class="kp">setwd</span><span class="p">(</span>file.dir<span class="p">)</span>
  115. object <span class="o">&lt;-</span> ReadAffy<span class="p">(</span>filenames <span class="o">=</span> files<span class="p">,</span> cdfname <span class="o">=</span> cdfname<span class="p">,</span>
  116. verbose <span class="o">=</span> verbose<span class="p">)</span>
  117. <span class="kp">setwd</span><span class="p">(</span>wd<span class="p">)</span>
  118. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  119. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Data loaded \n&quot;</span><span class="p">)</span>
  120. batch.size <span class="o">&lt;-</span> <span class="kp">table</span><span class="p">(</span>batch.id<span class="p">)[</span><span class="m">1</span><span class="p">]</span>
  121. <span class="kr">if</span> <span class="p">(</span><span class="o">!</span><span class="kp">all</span><span class="p">(</span><span class="kp">table</span><span class="p">(</span>batch.id<span class="p">)</span> <span class="o">==</span> batch.size<span class="p">))</span>
  122. <span class="kp">stop</span><span class="p">(</span><span class="s">&quot;Batches must be of the same size.&quot;</span><span class="p">)</span>
  123. <span class="kr">if</span> <span class="p">(</span>background <span class="o">==</span> <span class="s">&quot;rma&quot;</span><span class="p">)</span> <span class="p">{</span>
  124. object <span class="o">&lt;-</span> bg.correct.rma<span class="p">(</span>object<span class="p">)</span>
  125. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  126. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Background Corrected \n&quot;</span><span class="p">)</span>
  127. <span class="kp">gc</span><span class="p">()</span>
  128. <span class="p">}</span>
  129. pms <span class="o">&lt;-</span> pm<span class="p">(</span>object<span class="p">)</span>
  130. pns <span class="o">&lt;-</span> probeNames<span class="p">(</span>object<span class="p">)</span>
  131. pmi <span class="o">&lt;-</span> <span class="kp">unlist</span><span class="p">(</span>pmindex<span class="p">(</span>object<span class="p">))</span>
  132. <span class="kr">if</span> <span class="p">(</span><span class="o">!</span><span class="kp">all</span><span class="p">(</span><span class="kp">sprintf</span><span class="p">(</span><span class="s">&quot;%i&quot;</span><span class="p">,</span> pmi<span class="p">)</span> <span class="o">==</span> <span class="kp">rownames</span><span class="p">(</span>pms<span class="p">)))</span>
  133. <span class="kp">stop</span><span class="p">(</span><span class="s">&quot;Mismatch between pmindex and rownames of pms&quot;</span><span class="p">)</span>
  134. <span class="kp">rm</span><span class="p">(</span>object<span class="p">)</span>
  135. <span class="kp">gc</span><span class="p">()</span>
  136. <span class="kr">if</span> <span class="p">(</span>normalize <span class="o">==</span> <span class="s">&quot;quantile&quot;</span><span class="p">)</span> <span class="p">{</span>
  137. <span class="kr">if</span> <span class="p">(</span><span class="kp">is.null</span><span class="p">(</span>normVec<span class="p">))</span>
  138. normVec <span class="o">&lt;-</span> normalize.quantiles.determine.target<span class="p">(</span>pms<span class="p">)</span>
  139. pms <span class="o">&lt;-</span> normalize.quantiles.use.target<span class="p">(</span>pms<span class="p">,</span> normVec<span class="p">)</span>
  140. <span class="kp">names</span><span class="p">(</span>normVec<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">as.character</span><span class="p">(</span>pmi<span class="p">)</span>
  141. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  142. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Normalized \n&quot;</span><span class="p">)</span>
  143. <span class="p">}</span>
  144. pms <span class="o">&lt;-</span> <span class="kp">log2</span><span class="p">(</span>pms<span class="p">)</span>
  145. <span class="kp">gc</span><span class="p">()</span>
  146. N <span class="o">&lt;-</span> <span class="m">1</span><span class="o">:</span><span class="kp">dim</span><span class="p">(</span>pms<span class="p">)[</span><span class="m">1</span><span class="p">]</span>
  147. S <span class="o">&lt;-</span> <span class="kp">split</span><span class="p">(</span>N<span class="p">,</span> pns<span class="p">)</span>
  148. nc <span class="o">&lt;-</span> <span class="kp">ncol</span><span class="p">(</span>pms<span class="p">)</span>
  149. nr <span class="o">&lt;-</span> <span class="kp">nrow</span><span class="p">(</span>pms<span class="p">)</span>
  150. resids <span class="o">&lt;-</span> <span class="kt">matrix</span><span class="p">(</span>ncol <span class="o">=</span> nc<span class="p">,</span> nrow <span class="o">=</span> nr<span class="p">)</span>
  151. probeVec <span class="o">&lt;-</span> <span class="kt">vector</span><span class="p">(</span>length <span class="o">=</span> nr<span class="p">)</span>
  152. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  153. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Beginning Probe Effect Calculation ... \n&quot;</span><span class="p">)</span>
  154. <span class="kr">for</span> <span class="p">(</span>k <span class="kr">in</span> <span class="m">1</span><span class="o">:</span><span class="kp">length</span><span class="p">(</span>S<span class="p">))</span> <span class="p">{</span>
  155. fit <span class="o">&lt;-</span> rcModelPLM<span class="p">(</span>pms<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]],</span> <span class="p">,</span> drop <span class="o">=</span> <span class="kc">FALSE</span><span class="p">])</span>
  156. resids<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]],</span> <span class="p">]</span> <span class="o">&lt;-</span> fit<span class="o">$</span>Residuals
  157. probeVec<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]]]</span> <span class="o">&lt;-</span> fit<span class="o">$</span>Estimates<span class="p">[(</span>nc <span class="o">+</span> <span class="m">1</span><span class="p">)</span><span class="o">:</span><span class="kp">length</span><span class="p">(</span>fit<span class="o">$</span>Estimates<span class="p">)]</span>
  158. <span class="kr">if</span> <span class="p">((</span>k<span class="o">%%</span><span class="m">1000</span><span class="p">)</span> <span class="o">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span>
  159. <span class="kp">message</span><span class="p">(</span><span class="kp">paste</span><span class="p">(</span><span class="s">&quot;Finished probeset:&quot;</span><span class="p">,</span> k<span class="p">,</span> <span class="s">&quot;\n&quot;</span><span class="p">))</span>
  160. <span class="kp">gc</span><span class="p">()</span>
  161. <span class="p">}</span>
  162. <span class="p">}</span>
  163. <span class="kp">names</span><span class="p">(</span>probeVec<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">as.character</span><span class="p">(</span>pmi<span class="p">)</span>
  164. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  165. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Probe Effects Calculated \n&quot;</span><span class="p">)</span>
  166. <span class="kp">gc</span><span class="p">()</span>
  167. tmp <span class="o">&lt;-</span> <span class="kp">split</span><span class="p">(</span><span class="kp">t</span><span class="p">(</span>resids<span class="p">),</span> batch.id<span class="p">)</span>
  168. withinMean <span class="o">&lt;-</span> <span class="kp">lapply</span><span class="p">(</span>tmp<span class="p">,</span> frmaTools<span class="o">:::</span>getProbeMean<span class="p">,</span> batch.size<span class="p">)</span>
  169. withinVar <span class="o">&lt;-</span> <span class="kp">lapply</span><span class="p">(</span>tmp<span class="p">,</span> frmaTools<span class="o">:::</span>getProbeVar<span class="p">,</span> batch.size<span class="p">)</span>
  170. withinAvgVar <span class="o">&lt;-</span> <span class="kp">rowMeans</span><span class="p">(</span><span class="kt">matrix</span><span class="p">(</span><span class="kp">unlist</span><span class="p">(</span>withinVar<span class="p">),</span> ncol <span class="o">=</span> <span class="kp">length</span><span class="p">(</span>withinVar<span class="p">)))</span>
  171. btwVar <span class="o">&lt;-</span> <span class="kp">apply</span><span class="p">(</span><span class="kt">matrix</span><span class="p">(</span><span class="kp">unlist</span><span class="p">(</span>withinMean<span class="p">),</span> ncol <span class="o">=</span> <span class="kp">length</span><span class="p">(</span>withinMean<span class="p">)),</span>
  172. <span class="m">1</span><span class="p">,</span> var<span class="p">)</span>
  173. <span class="kp">rm</span><span class="p">(</span>tmp<span class="p">)</span>
  174. <span class="kp">rm</span><span class="p">(</span>withinMean<span class="p">)</span>
  175. <span class="kp">rm</span><span class="p">(</span>withinVar<span class="p">)</span>
  176. <span class="kp">names</span><span class="p">(</span>withinAvgVar<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">names</span><span class="p">(</span>btwVar<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">as.character</span><span class="p">(</span>pmi<span class="p">)</span>
  177. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  178. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Probe Variances Calculated \n&quot;</span><span class="p">)</span>
  179. <span class="kp">gc</span><span class="p">()</span>
  180. tmp <span class="o">&lt;-</span> <span class="kp">split</span><span class="p">(</span>resids<span class="p">,</span> pns<span class="p">)</span>
  181. psetMAD <span class="o">&lt;-</span> <span class="kp">unlist</span><span class="p">(</span><span class="kp">lapply</span><span class="p">(</span>tmp<span class="p">,</span> frmaTools<span class="o">:::</span>getPsetMAD<span class="p">,</span> nc<span class="p">,</span> batch.id<span class="p">))</span>
  182. <span class="kp">names</span><span class="p">(</span>psetMAD<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">names</span><span class="p">(</span>tmp<span class="p">)</span>
  183. <span class="kp">rm</span><span class="p">(</span>tmp<span class="p">)</span>
  184. <span class="kp">rm</span><span class="p">(</span>resids<span class="p">)</span>
  185. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  186. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Probe Set SDs Calculated \n&quot;</span><span class="p">)</span>
  187. <span class="kp">gc</span><span class="p">()</span>
  188. w <span class="o">&lt;-</span> <span class="m">1</span><span class="o">/</span><span class="p">(</span>withinAvgVar <span class="o">+</span> btwVar<span class="p">)</span>
  189. w<span class="p">[</span>w <span class="o">==</span> <span class="kc">Inf</span><span class="p">]</span> <span class="o">&lt;-</span> <span class="m">1</span>
  190. medianSE <span class="o">&lt;-</span> <span class="kt">vector</span><span class="p">(</span>length <span class="o">=</span> <span class="kp">length</span><span class="p">(</span>psetMAD<span class="p">))</span>
  191. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  192. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Beginning Median SE Calculation ... \n&quot;</span><span class="p">)</span>
  193. <span class="kr">for</span> <span class="p">(</span>k <span class="kr">in</span> <span class="m">1</span><span class="o">:</span><span class="kp">length</span><span class="p">(</span>S<span class="p">))</span> <span class="p">{</span>
  194. fit <span class="o">&lt;-</span> frmaTools<span class="o">:::</span>rwaFit2<span class="p">(</span>pms<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]],</span> <span class="p">,</span> drop <span class="o">=</span> <span class="kc">FALSE</span><span class="p">],</span> w<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]]],</span>
  195. probeVec<span class="p">[</span>S<span class="p">[[</span>k<span class="p">]]],</span> psetMAD<span class="p">[</span>k<span class="p">])</span>
  196. medianSE<span class="p">[</span>k<span class="p">]</span> <span class="o">&lt;-</span> median<span class="p">(</span>fit<span class="o">$</span>StdErrors<span class="p">)</span>
  197. <span class="kr">if</span> <span class="p">((</span>k<span class="o">%%</span><span class="m">1000</span><span class="p">)</span> <span class="o">==</span> <span class="m">0</span><span class="p">)</span> <span class="p">{</span>
  198. <span class="kp">message</span><span class="p">(</span><span class="kp">paste</span><span class="p">(</span><span class="s">&quot;Finished probeset:&quot;</span><span class="p">,</span> k<span class="p">,</span> <span class="s">&quot;\n&quot;</span><span class="p">))</span>
  199. <span class="kp">gc</span><span class="p">()</span>
  200. <span class="p">}</span>
  201. <span class="p">}</span>
  202. <span class="kp">names</span><span class="p">(</span>medianSE<span class="p">)</span> <span class="o">&lt;-</span> <span class="kp">names</span><span class="p">(</span>psetMAD<span class="p">)</span>
  203. <span class="kr">if</span> <span class="p">(</span>verbose<span class="p">)</span>
  204. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Median SEs Calculated \n&quot;</span><span class="p">)</span>
  205. <span class="kp">gc</span><span class="p">()</span>
  206. <span class="kp">rm</span><span class="p">(</span>w<span class="p">)</span>
  207. <span class="kp">rm</span><span class="p">(</span>pms<span class="p">)</span>
  208. <span class="kp">rm</span><span class="p">(</span>pns<span class="p">)</span>
  209. <span class="kp">gc</span><span class="p">()</span>
  210. <span class="kr">if</span> <span class="p">(</span><span class="kp">is.null</span><span class="p">(</span>cdfname<span class="p">))</span> <span class="p">{</span>
  211. vers <span class="o">&lt;-</span> <span class="s">&quot;&quot;</span>
  212. <span class="p">}</span> <span class="kr">else</span> <span class="p">{</span>
  213. vers <span class="o">&lt;-</span> <span class="kp">as.character</span><span class="p">(</span>packageVersion<span class="p">(</span>cdfname<span class="p">))</span>
  214. <span class="p">}</span>
  215. <span class="c1">## vers &lt;- ifelse(!is.null(cdfname), as.character(packageVersion(cdfname)),</span>
  216. <span class="c1">## &quot;&quot;)</span>
  217. <span class="kr">return</span><span class="p">(</span><span class="kt">list</span><span class="p">(</span>normVec <span class="o">=</span> normVec<span class="p">,</span> probeVec <span class="o">=</span> probeVec<span class="p">,</span> probeVarWithin <span class="o">=</span> withinAvgVar<span class="p">,</span>
  218. probeVarBetween <span class="o">=</span> btwVar<span class="p">,</span> probesetSD <span class="o">=</span> psetMAD<span class="p">,</span> medianSE <span class="o">=</span> medianSE<span class="p">,</span>
  219. version <span class="o">=</span> vers<span class="p">))</span>
  220. <span class="p">}</span>
  221. <span class="c1">## This reads in the xlsx file for each of the 7 datasets and combines</span>
  222. <span class="c1">## them into one big table of all samples. The Batch column contains</span>
  223. <span class="c1">## the partitioning of samples into unique combinations of Dataset,</span>
  224. <span class="c1">## Scan Date, and Phenotype. Finally, we split based on Tissue type to</span>
  225. <span class="c1">## get one table for biopsies (BX), and one for blood (PAX).</span>
  226. sample.tables <span class="o">&lt;-</span> ddply<span class="p">(</span>datasets<span class="p">,</span> <span class="m">.</span><span class="p">(</span>Dataset<span class="p">),</span> <span class="kr">function</span><span class="p">(</span>df<span class="p">)</span> <span class="p">{</span>
  227. df <span class="o">&lt;-</span> df<span class="p">[</span><span class="m">1</span><span class="p">,]</span>
  228. <span class="kp">rownames</span><span class="p">(</span>df<span class="p">)</span> <span class="o">&lt;-</span> <span class="kc">NULL</span>
  229. dset.dir <span class="o">&lt;-</span> <span class="kp">file.path</span><span class="p">(</span>training.data.dir<span class="p">,</span> df<span class="o">$</span>Dataset<span class="p">)</span>
  230. x <span class="o">&lt;-</span> read.xlsx<span class="p">(</span><span class="kp">list.files</span><span class="p">(</span>dset.dir<span class="p">,</span> pattern<span class="o">=</span>glob2rx<span class="p">(</span><span class="s">&quot;*.xlsx&quot;</span><span class="p">),</span> full.names<span class="o">=</span><span class="kc">TRUE</span><span class="p">)[</span><span class="m">1</span><span class="p">],</span> <span class="m">1</span><span class="p">)</span> <span class="o">%&gt;%</span>
  231. setNames<span class="p">(</span><span class="kt">c</span><span class="p">(</span><span class="s">&quot;Filename&quot;</span><span class="p">,</span> <span class="s">&quot;Phenotype&quot;</span><span class="p">,</span> <span class="s">&quot;ScanDate&quot;</span><span class="p">))</span>
  232. x<span class="o">$</span>Filename <span class="o">&lt;-</span> <span class="kp">as.character</span><span class="p">(</span>x<span class="o">$</span>Filename<span class="p">)</span>
  233. missing.CEL <span class="o">&lt;-</span> <span class="o">!</span>str_detect<span class="p">(</span>x<span class="o">$</span>Filename<span class="p">,</span> <span class="s">&quot;\\.CEL$&quot;</span><span class="p">)</span>
  234. x<span class="o">$</span>Filename<span class="p">[</span>missing.CEL<span class="p">]</span> <span class="o">&lt;-</span> str_c<span class="p">(</span>x<span class="o">$</span>Filename<span class="p">[</span>missing.CEL<span class="p">],</span> <span class="s">&quot;.CEL&quot;</span><span class="p">)</span>
  235. <span class="kp">stopifnot</span><span class="p">(</span><span class="kp">all</span><span class="p">(</span>str_detect<span class="p">(</span>x<span class="o">$</span>Filename<span class="p">,</span> <span class="s">&quot;\\.CEL$&quot;</span><span class="p">)))</span>
  236. parsed.date <span class="o">&lt;-</span> parse.date.from.filename<span class="p">(</span>x<span class="o">$</span>Filename<span class="p">)</span>
  237. x<span class="o">$</span>ScanDate<span class="p">[</span><span class="o">!</span><span class="kp">is.na</span><span class="p">(</span>parsed.date<span class="p">)]</span> <span class="o">&lt;-</span> parsed.date<span class="p">[</span><span class="o">!</span><span class="kp">is.na</span><span class="p">(</span>parsed.date<span class="p">)]</span>
  238. x <span class="o">%&gt;%</span> <span class="kp">cbind</span><span class="p">(</span>df<span class="p">)</span> <span class="o">%&gt;%</span>
  239. <span class="kp">transform</span><span class="p">(</span>Filename<span class="o">=</span><span class="kp">file.path</span><span class="p">(</span>dset.dir<span class="p">,</span> Filename<span class="p">),</span>
  240. Batch<span class="o">=</span><span class="kp">droplevels</span><span class="p">(</span>Tissue<span class="o">:</span>Dataset<span class="o">:</span><span class="kp">factor</span><span class="p">(</span>ScanDate<span class="p">)</span><span class="o">:</span>Phenotype<span class="p">))</span> <span class="o">%&gt;%</span>
  241. <span class="kp">subset</span><span class="p">(</span><span class="o">!</span> Filename <span class="o">%in%</span> blacklist<span class="p">)</span> <span class="o">%&gt;%</span>
  242. <span class="kp">subset</span><span class="p">(</span><span class="o">!</span><span class="kp">duplicated</span><span class="p">(</span>Filename<span class="p">))</span>
  243. <span class="p">})</span> <span class="o">%&gt;%</span>
  244. <span class="kp">split</span><span class="p">(</span><span class="m">.</span><span class="o">$</span>Tissue<span class="p">)</span> <span class="o">%&gt;%</span>
  245. <span class="kp">lapply</span><span class="p">(</span><span class="kp">droplevels</span><span class="p">)</span>
  246. <span class="c1">## fRMA requires equal-sized batches, so for each batch size from 3 to</span>
  247. <span class="c1">## 15, compute how many batches have at least that many samples.</span>
  248. x <span class="o">&lt;-</span> <span class="kp">sapply</span><span class="p">(</span><span class="m">3</span><span class="o">:</span><span class="m">15</span><span class="p">,</span> <span class="kr">function</span><span class="p">(</span>i<span class="p">)</span> <span class="kp">sapply</span><span class="p">(</span>sample.tables<span class="p">,</span> <span class="m">.</span> <span class="o">%$%</span> Batch <span class="o">%&gt;%</span> table <span class="o">%&gt;%</span> as.vector <span class="o">%&gt;%</span> <span class="p">{</span><span class="kp">sum</span><span class="p">(</span><span class="m">.</span> <span class="o">&gt;=</span> i<span class="p">)}))</span>
  249. <span class="kp">colnames</span><span class="p">(</span>x<span class="p">)</span> <span class="o">&lt;-</span> <span class="m">3</span><span class="o">:</span><span class="m">15</span>
  250. <span class="c1">## Based on the above and the recommendations in the frmaTools paper,</span>
  251. <span class="c1">## I chose 5 as the optimal batch size. This could be optimized</span>
  252. <span class="c1">## empirically, though.</span>
  253. arrays.per.batch <span class="o">&lt;-</span> <span class="m">5</span>
  254. <span class="c1">## For each tissue type, compute fRMA vectors.</span>
  255. vectors <span class="o">&lt;-</span> <span class="kp">lapply</span><span class="p">(</span>sample.tables<span class="p">,</span> <span class="kr">function</span><span class="p">(</span>stab<span class="p">)</span> <span class="p">{</span>
  256. <span class="kp">set.seed</span><span class="p">(</span><span class="m">1986</span><span class="p">)</span>
  257. tsmsg<span class="p">(</span><span class="s">&quot;Reading full dataset&quot;</span><span class="p">)</span>
  258. affy <span class="o">&lt;-</span> ReadAffy<span class="p">(</span>filenames<span class="o">=</span>stab<span class="o">$</span>Filename<span class="p">,</span> sampleNames<span class="o">=</span><span class="kp">rownames</span><span class="p">(</span>stab<span class="p">))</span>
  259. tsmsg<span class="p">(</span><span class="s">&quot;Getting reference normalization distribution from full dataset&quot;</span><span class="p">)</span>
  260. normVec <span class="o">&lt;-</span> normalize.quantiles.determine.target<span class="p">(</span>pm<span class="p">(</span>bg.correct.rma<span class="p">(</span>affy<span class="p">)))</span>
  261. <span class="kp">rm</span><span class="p">(</span>affy<span class="p">);</span> <span class="kp">gc</span><span class="p">()</span>
  262. tsmsg<span class="p">(</span><span class="s">&quot;Selecting batches&quot;</span><span class="p">)</span>
  263. <span class="c1">## Keep only arrays with enough samples</span>
  264. big.enough <span class="o">&lt;-</span> stab<span class="o">$</span>Batch <span class="o">%&gt;%</span> table <span class="o">%&gt;%</span> <span class="m">.</span><span class="p">[</span><span class="m">.</span><span class="o">&gt;=</span> arrays.per.batch<span class="p">]</span> <span class="o">%&gt;%</span> <span class="kp">names</span>
  265. stab <span class="o">&lt;-</span> stab<span class="p">[</span>stab<span class="o">$</span>Batch <span class="o">%in%</span> big.enough<span class="p">,]</span> <span class="o">%&gt;%</span> <span class="kp">droplevels</span>
  266. <span class="c1">## Sample an equal number of arrays from each batch</span>
  267. subtab <span class="o">&lt;-</span> ddply<span class="p">(</span>stab<span class="p">,</span> <span class="m">.</span><span class="p">(</span>Batch<span class="p">),</span> <span class="kr">function</span><span class="p">(</span>df<span class="p">)</span> <span class="p">{</span>
  268. df<span class="p">[</span><span class="kp">sample</span><span class="p">(</span><span class="kp">seq</span><span class="p">(</span><span class="kp">nrow</span><span class="p">(</span>df<span class="p">)),</span> size<span class="o">=</span>arrays.per.batch<span class="p">),]</span>
  269. <span class="p">})</span>
  270. tsmsg<span class="p">(</span><span class="s">&quot;Making fRMA vectors&quot;</span><span class="p">)</span>
  271. <span class="c1">## Make fRMA vectors, using normVec from full dataset</span>
  272. res <span class="o">&lt;-</span> makeVectorsAffyBatch<span class="p">(</span>subtab<span class="o">$</span>Filename<span class="p">,</span> subtab<span class="o">$</span>Batch<span class="p">,</span> normVec<span class="o">=</span>normVec<span class="p">)</span>
  273. tsmsg<span class="p">(</span><span class="s">&quot;Finished.&quot;</span><span class="p">)</span>
  274. res
  275. <span class="p">})</span>
  276. <span class="c1">## The code below here just takes the trained vectors and packages</span>
  277. <span class="c1">## them up into installable R packages.</span>
  278. makePackageFromVectors <span class="o">&lt;-</span>
  279. <span class="kr">function</span> <span class="p">(</span>vecs<span class="p">,</span> <span class="kp">version</span><span class="p">,</span> maintainer<span class="p">,</span> species<span class="p">,</span> annotation<span class="p">,</span>
  280. packageName<span class="p">,</span> file.dir <span class="o">=</span> <span class="s">&quot;.&quot;</span><span class="p">,</span>
  281. output.dir <span class="o">=</span> <span class="s">&quot;.&quot;</span><span class="p">,</span> unlink <span class="o">=</span> <span class="kc">TRUE</span><span class="p">)</span>
  282. <span class="p">{</span>
  283. platform <span class="o">&lt;-</span> <span class="kp">gsub</span><span class="p">(</span><span class="s">&quot;cdf$&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">,</span> annotation<span class="p">)</span>
  284. <span class="c1">## type &lt;- match.arg(type, c(&quot;AffyBatch&quot;, &quot;FeatureSet&quot;))</span>
  285. <span class="c1">## if (type == &quot;AffyBatch&quot;)</span>
  286. <span class="c1">## platform &lt;- gsub(&quot;cdf&quot;, &quot;&quot;, annotation)</span>
  287. <span class="c1">## if (type == &quot;FeatureSet&quot;) {</span>
  288. <span class="c1">## platform &lt;- annotation</span>
  289. <span class="c1">## require(oligo)</span>
  290. <span class="c1">## }</span>
  291. thispkg <span class="o">&lt;-</span> <span class="s">&quot;frmaTools&quot;</span>
  292. desc <span class="o">&lt;-</span> packageDescription<span class="p">(</span>thispkg<span class="p">)</span>
  293. thispkgVers <span class="o">&lt;-</span> desc<span class="o">$</span>Version
  294. symbolValues <span class="o">&lt;-</span> <span class="kt">list</span><span class="p">(</span>ARRAYTYPE <span class="o">=</span> platform<span class="p">,</span> VERSION <span class="o">=</span> <span class="kp">version</span><span class="p">,</span>
  295. CREATOR <span class="o">=</span> <span class="kp">paste</span><span class="p">(</span><span class="s">&quot;package&quot;</span><span class="p">,</span> thispkg<span class="p">,</span> <span class="s">&quot;version&quot;</span><span class="p">,</span> thispkgVers<span class="p">),</span>
  296. FRMATOOLSVERSION <span class="o">=</span> thispkgVers<span class="p">,</span> MAINTAINER <span class="o">=</span> maintainer<span class="p">,</span>
  297. SPECIES <span class="o">=</span> species<span class="p">)</span>
  298. createdPkg <span class="o">&lt;-</span> createPackage<span class="p">(</span>packageName<span class="p">,</span> destinationDir <span class="o">=</span> output.dir<span class="p">,</span>
  299. originDir <span class="o">=</span> <span class="kp">system.file</span><span class="p">(</span><span class="s">&quot;VectorPkg-template&quot;</span><span class="p">,</span> package <span class="o">=</span> <span class="s">&quot;frmaTools&quot;</span><span class="p">),</span>
  300. symbolValues <span class="o">=</span> symbolValues<span class="p">,</span> unlink <span class="o">=</span> <span class="kp">unlink</span><span class="p">)</span>
  301. <span class="c1">## if (type == &quot;AffyBatch&quot;)</span>
  302. <span class="c1">## vecs &lt;- makeVectorsAffyBatch(files, batch.id, background,</span>
  303. <span class="c1">## normalize, normVec, annotation, file.dir, verbose)</span>
  304. <span class="c1">## if (type == &quot;FeatureSet&quot;)</span>
  305. <span class="c1">## vecs &lt;- makeVectorsFeatureSet(files, batch.id, annotation,</span>
  306. <span class="c1">## background, normalize, normVec, file.dir, verbose)</span>
  307. <span class="kp">assign</span><span class="p">(</span>packageName<span class="p">,</span> vecs<span class="p">)</span>
  308. <span class="kp">save</span><span class="p">(</span><span class="kt">list</span> <span class="o">=</span> <span class="kp">eval</span><span class="p">(</span>packageName<span class="p">),</span> file <span class="o">=</span> <span class="kp">file.path</span><span class="p">(</span>createdPkg<span class="o">$</span>pkgdir<span class="p">,</span>
  309. <span class="s">&quot;data&quot;</span><span class="p">,</span> <span class="kp">paste</span><span class="p">(</span>packageName<span class="p">,</span> <span class="s">&quot;.rda&quot;</span><span class="p">,</span> sep <span class="o">=</span> <span class="s">&quot;&quot;</span><span class="p">)),</span> compress <span class="o">=</span> <span class="kc">TRUE</span><span class="p">)</span>
  310. <span class="p">}</span>
  311. annotation <span class="o">&lt;-</span> cleancdfname<span class="p">(</span>affyio<span class="o">:::</span>read.celfile.header<span class="p">(</span>sample.tables<span class="p">[[</span><span class="m">1</span><span class="p">]]</span><span class="o">$</span>Filename<span class="p">[</span><span class="m">1</span><span class="p">])</span><span class="o">$</span>cdfName<span class="p">,</span> <span class="kc">FALSE</span><span class="p">)</span>
  312. <span class="kp">dir.create</span><span class="p">(</span><span class="s">&quot;pkgs&quot;</span><span class="p">,</span> <span class="kc">FALSE</span><span class="p">,</span> <span class="kc">TRUE</span><span class="p">,</span> mode<span class="o">=</span><span class="s">&quot;755&quot;</span><span class="p">)</span>
  313. <span class="kr">for</span> <span class="p">(</span>i <span class="kr">in</span> <span class="kp">names</span><span class="p">(</span>vectors<span class="p">))</span> <span class="p">{</span>
  314. vecs <span class="o">&lt;-</span> vectors<span class="p">[[</span>i<span class="p">]]</span>
  315. pkgname <span class="o">&lt;-</span> <span class="kp">sprintf</span><span class="p">(</span><span class="s">&quot;DSalomon.%s.%sfrmavecs&quot;</span><span class="p">,</span> i<span class="p">,</span> annotation<span class="p">)</span>
  316. <span class="kp">message</span><span class="p">(</span><span class="s">&quot;Making &quot;</span><span class="p">,</span> pkgname<span class="p">)</span>
  317. makePackageFromVectors<span class="p">(</span>
  318. vecs<span class="p">,</span>
  319. version<span class="o">=</span><span class="s">&quot;0.1&quot;</span><span class="p">,</span>
  320. maintainer<span class="o">=</span><span class="s">&quot;Ryan C. Thompson &lt;rcthomps@scripps.edu&gt;&quot;</span><span class="p">,</span>
  321. species<span class="o">=</span><span class="s">&quot;Homo_sapiens&quot;</span><span class="p">,</span>
  322. annotation<span class="o">=</span>annotation<span class="p">,</span>
  323. packageName<span class="o">=</span>pkgname<span class="p">,</span>
  324. output.dir <span class="o">=</span> <span class="s">&quot;pkgs&quot;</span><span class="p">)</span>
  325. <span class="p">}</span>
  326. <span class="kp">save.image</span><span class="p">(</span><span class="s">&quot;train-data.rda&quot;</span><span class="p">)</span>
  327. </pre></div>
  328. </body>
  329. </html>