<div dir="ltr">Hi Simon, <div><br></div><div><font color="#0000ff"><br></font></div><div><div><font color="#0000ff"><b>First, I am not sure that using 50% is preferable to 90% for the training set size.</b> </font></div><div><br></div><div>Think of the plot that xvalDapc produces (the one with the blue dots (with n.pc on the x-axis and predictive success on the y-axis). Our aim in cross-validation is just to identify the optimum number of PCs to use in DAPC. Therefore, we want to see an arc on the plot produced by xvalDapc, as in low predictive success at the lower limit of the x-axis (too little information) and low predictive success at the upper limit of the x-axis (too much noise), but better predictive success in the middle. </div><div><br></div><div>When we use <b><u>smaller training sets</u></b> (eg. if we were to use 50%), the result is <b>reduced variability</b> in the predictive success response variable (ie. within each n.pca, the black dots will be more likely to fall within a tighter range on the y-axis) <b><i>but</i> lower predictive success</b> than you would get with larger training sets.</div><div><br></div><div>By contrast, when we use<b> <u>larger training sets</u></b> (eg.90%), the result is <b>increased variability</b> (dots in each n.pca column will be more spread out on the y-axis), <b>but a better picture of the true maximum and minimum predictive success possible at each n.pca. </b></div><div><b><br></b></div><div><b>In this latter case, we are more likely to see the arc-like shape</b> we are hoping for in any optimisation problem. The fact that the dots will be more spread out on the y-axis (and the arc therefore more blurry) does not prevent us from identifying the maximum (optimal number of PCs). By contrast, in the former case, while the dots are more densely packed, there will be a far greater chance that we will fail to see an arc-like shape and fail to identify the true optimum number of PCs. You really don't want to be losing 50% of the available information when building these models.</div><div><br></div><div>Even with small and uneven sample sizes, stratified cross-validation as performed by xvalDapc is still designed to identify the number of PCs that will give you the highest predictive success. <b>Whether you are trying to build a model for explanatory or predictive purposes, I would suggest using 90% for the training set size. </b></div></div><div><br></div><div><b><br></b></div><div><b><font color="#0000ff">Second, I want to thank you for drawing my attention to cases in which xvalDapc needs to handle small groups with training.set sizes that are <i>not</i> 90%: Thanks to your input, I've made some changes to xvalDapc that I think may help you and other users of <i>adegenet</i>!</font></b></div><div><br></div><div>The updated version of xvalDapc should handle groups smaller than 10 individuals more intelligently than the current stable version. <b>Please try working with the</b><i style="font-weight:bold"> development</i><b> version of </b><i style="font-weight:bold">adegenet</i> (which will become the stable version, but not until the next release!) by using the following steps:</div><div><br></div><div><span style="color:rgb(106,168,79)">## you'll need tha package devtools installed, if you don't already have it:</span><br></div><div><div><font color="#0b5394">install.packages("devtools")</font></div><div><font color="#0b5394">library(devtools)</font></div><div><font color="#6aa84f">## you may need to remove your previous version of adegenet before installing and loading the devel version:</font></div><div><font color="#0b5394">install_github("thibautjombart/adegenet")</font></div></div><div><font color="#0b5394">library(adegenet)</font></div><div><br></div><div>Note that you will only notice the behaviour of xvalDapc change in the following cases:</div><div>- The smallest group in your sample has less than 10 individuals <i>and</i> training.set is not set to 0.9.</div><div>- More than one n.pc gives the lowest RMSE (the old version would have chosen the smallest of those n.pc; the new version will choose the largest)</div><div><br></div><div><br></div><div><b><font color="#0000ff">Third, it seems to me that what you are proposing in the final paragraph of your e-mail effectively <i>is</i> what xvalDapc already does (but I may need more clarification here). </font></b></div><div><br></div><div>The 30 separate experiments you propose seem no different from the 30 repetitions in xvalDapc (ie. argument n.reps=30).</div><div><br></div><div>The only difference I can spot is in the last step. xvalDapc returns the mean predictive success from each of the 30 runs while (and correct me if I am wrong here) you propose instead to take, for each individual, the mode as the "best-guess" predicted group (ie. the most frequent "group membership" assignment for each individual). But I may need a little more clarification. Could you explain a little further:</div><div><br></div><div>(i) How your proposed approach differs from the approach of stratified cross-validation</div><div>(ii) What you are hoping to infer or to do after you have identified the most frequent predicted group for each individual. </div><div><br></div><div><br></div><div>Right, I hope my first point offers a little bit of help. Please try installing the devel version of adegenet as outlined in my second point, play around with the updated version of xvalDapc, and see what you think. And if you can give me your further thoughts on my third point, we can go from there. </div><div><br></div><div>All the best, </div><div>Caitlin. </div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 6, 2015 at 3:43 PM, Crameri  Simon <span dir="ltr"><<a href="mailto:simon.crameri@env.ethz.ch" target="_blank">simon.crameri@env.ethz.ch</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word">
<div>Hi Caitlin</div>
<div><br>
</div>
<div>I'm writing to you because you are the author of xvalDapc. I'm still somewhat confused regarding question 2) of my first post.</div>
<div><br>
</div>
<div>You don't need to read it again, lets just consider this: </div>
<div><br>
</div>
<div>- I have a genetic dataset of 100 individuals, and I know the true group membership of every individual. </div>
<div>- I'd like to build a cross-validated DAPC "model" (let's call it DAPC model) which can be used to predict group membership of further individuals.</div>
<div>- I run xvalDapc on say 50% of the 100 individuals (the reason I can't take 90% lies in the small size of some groups).</div>
<div>- I get n.pca = 25 as the best n.pca for building the DAPC model, and xvalDapc automatically produces an according DAPC, albeit with 100% of the individuals.</div>
<div><br>
</div>
<div>Now comes the tricky question: Can I really use the DAPC produced by xvalDapc for prediction purposes? I still think that it is somewhat problematic to take the full dataset (100 individuals) to build a cross-validated DAPC model when the n.pca used in
 the PCA step of DAPC was determined from training sets of just 50 individuals. Perhaps this is the reason why you set
<font face="Courier">training.set = 0.9</font> as a default value, to make this difference as small as possible?</div>
<div><br>
</div>
<div>An alternative approach would be to use xvalDapc as "just" a (wonderful!) tool to get an optimal n.pca for your data. But for prediction purposes, I'd suggest to build a DAPC model with a training set of in this case 50 individuals (from a stratified sampling)
 instead of all individuals. If you don't like to loose the information of the other 50 individuals, you even could produce say 30 permuted training sets in the same way as xvalDapc does it, build 30 DAPC models and predict your further individuals against
 all permuted 30 DAPC models separately, taking the group that was most oftenly assigned to an additional sample as the predicted group. </div>
<div><br>
</div>
<div>Do you have any comments on that? I know, it's all very complicated, but wouldn't that be statistically more appropriate?</div>
<div><br>
</div>
<div>Thank you in advance,</div>
<div>Simon</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>
<div>
<blockquote type="cite"><br>
----------------------------------------------------------------------<br>
<br>
Message: 1<br>
Date: Tue, 28 Jul 2015 11:52:41 +0000<br>
From: "Jombart, Thibaut" <<a href="mailto:t.jombart@imperial.ac.uk" target="_blank">t.jombart@imperial.ac.uk</a>><br>
To: "Crameri  Simon" <<a href="mailto:simon.crameri@env.ethz.ch" target="_blank">simon.crameri@env.ethz.ch</a>>,<br>
<span style="white-space:pre-wrap"></span>"<<a href="mailto:adegenet-forum@lists.r-forge.r-project.org" target="_blank">adegenet-forum@lists.r-forge.r-project.org</a>>"<br>
<span style="white-space:pre-wrap"></span><<a href="mailto:adegenet-forum@lists.r-forge.r-project.org" target="_blank">adegenet-forum@lists.r-forge.r-project.org</a>><br>
Subject: Re: [adegenet-forum] xvalDapc and group prediction accuracy<br>
Message-ID:<br>
<span style="white-space:pre-wrap"></span><2CB2DA8E426F3541AB1907F98ABA6570ABF58B2D@<a href="http://icexch-m1.ic.ac.uk" target="_blank">icexch-m1.ic.ac.uk</a>><br>
Content-Type: text/plain; charset="iso-8859-1"<br>
<br>
<br>
Hi there<br>
<br>
see the argument 'result' in xvalDapc. The difference you see is the difference between the mean % of successful prediction averaged over groups (default), and the overall % of successful prediction. These two quantities are increasingly different when sample
 size are unequal.<br>
<br>
Cheers<br>
Thibaut<br>
<br>
<br>
________________________________<br>
From: <a href="mailto:adegenet-forum-bounces@lists.r-forge.r-project.org" target="_blank">adegenet-forum-bounces@lists.r-forge.r-project.org</a> [<a href="mailto:adegenet-forum-bounces@lists.r-forge.r-project.org" target="_blank">adegenet-forum-bounces@lists.r-forge.r-project.org</a>] on
 behalf of Crameri Simon [<a href="mailto:simon.crameri@env.ethz.ch" target="_blank">simon.crameri@env.ethz.ch</a>]<br>
Sent: 17 July 2015 16:25<br>
To: <<a href="mailto:adegenet-forum@lists.r-forge.r-project.org" target="_blank">adegenet-forum@lists.r-forge.r-project.org</a>><br>
Subject: [adegenet-forum] xvalDapc and group prediction accuracy<br>
<br>
Hi Thibaut<br>
<br>
I am still working with my tree species whose genotypes I'd like to model using DAPC, and I am still aiming to use the results as a forensic tool to identify species genetically. Therefore, the whole approach needs to be as reliable as possible. I tried xvalDapc()
 to perform DAPC cross-validation and found an optimal n.pca:<br>
<br>
<blockquote type="cite">table(data@pop)<br>
</blockquote>
<br>
P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11<br>
11   5   5  16  10  15  34   4   4  11   4<br>
<br>
<blockquote type="cite">xval <- xvalDapc(data@tab, pop(data), training.set = 0.5, result = "groupMean", n.pca = 10:20, n.rep = 1000)<br>
</blockquote>
<br>
<blockquote type="cite">xval$`Mean Successful Assignment by Number of PCs of PCA`[as.numeric(xval$`Number of PCs Achieving Highest Mean Success`)]<br>
</blockquote>
      14<br>
0.9953977<br>
<br>
<blockquote type="cite">xval$'Number of PCs Achieving Lowest MSE'<br>
</blockquote>
[1] "14"<br>
<br>
<blockquote type="cite">xval$DAPC$n.pca<br>
</blockquote>
[1] 14<br>
<br>
<br>
It all works fine, the resulting best n.pca is still 14 if xvalDapc() is carried out multiple times using the same parameters, and even so when changing training.set to say 0.9. Now I use the validated model (xval$DAPC) to predict species membership of additional
 samples:<br>
<br>
<blockquote type="cite">predict(xval$DAPC, newdata=new.data)<br>
</blockquote>
<br>
Again, it's all working perfectly, but what I don't fully understand is this:<br>
<br>
1) As it happens, I know the true group membership of the additional samples. Therefore I can assess the prediction accuracy of xval$DAPC. It turns out that 96.8% (group mean!) of the additional samples are correctly predicted by xval$DAPC. Why is this number
 slightly different from the expected 99.5%? May it be due to the different group sizes present in the full dataset (table(data@pop))?<br>
<br>
2) If the full dataset contains groups of very different size, some of which are fairly small: would it be more reliable to predict group membership of additional samples using the above determined n.pca and all 1000 training sets (which have approximately
 equal group size) as a reference, instead of using the full dataset (where group sizes differ) and just one prediction? The resulting 1000 prediction outcomes could be screened for the groups most oftenly assinged to each new sample.<br>
<br>
<br>
Any opinions / ideas? Thanks in advance,<br>
<br>
Simon<br>
<br>
*************<br>
phD student<br>
ETH Zurich<br>
Plant Ecological Genetics<br>
</blockquote>
</div>
<br>
</div>
</div>
</div>

<br>_______________________________________________<br>
adegenet-forum mailing list<br>
<a href="mailto:adegenet-forum@lists.r-forge.r-project.org">adegenet-forum@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/adegenet-forum" rel="noreferrer" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/adegenet-forum</a><br></blockquote></div><br></div>