<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">

	<title>Xavier Robin – Tag – pROC</title>
	<id>tag:xavier.robin.name,2010-05-28:/en/feed/tag/pROC</id>
	<link rel="self" href="https://xavier.robin.name/en/feed/tag/pROC" />
	<link rel="alternate" href="https://xavier.robin.name/en/tag/pROC"/>
	<updated>2025-10-06T15:04:21.027468000+02:00</updated>
	<sy:updatePeriod>weekly</sy:updatePeriod>
	<sy:updateFrequency>2</sy:updateFrequency>
	<link rel="license" type="application/rdf+xml" href="http://creativecommons.org/licenses/by-sa/3.0/rdf" />

	<icon>https://xavier.robin.name/en/img/favicon.ico</icon>

	<author>
		<name>Xavier Robin</name>
		<uri>https://xavier.robin.name/en/contact</uri>
	</author>
	

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.19.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2025/07/30/proc-1.19.0"/>
		<id>tag:xavier.robin.name,2025-07-30:/blog/2025/07/30/proc-1.19.0</id>
		<published>2025-07-30T18:56:51+02:00</published>
		<updated>2025-07-31T12:32:11+02:00</updated>
		<content type="html">&lt;p&gt;pROC version 1.19.0 was just released and will be available on CRAN very soon.&lt;/p&gt;

&lt;p&gt;Besides minor changes and fixes in the &lt;code&gt;coords&lt;/code&gt; and &lt;code&gt;ci.coords&lt;/code&gt; functions, 
  the main updates in this version focus on the core of the package, aiming to make it more modern, efficient, and easier
  to maintain. Several features that were difficult to maintain have been deprecated.&lt;/p&gt;
&lt;ul&gt;

  &lt;li&gt;The dependency on the retired &lt;a href=&quot;http://had.co.nz/plyr/&quot;&gt;plyr&lt;/a&gt; package has been removed (thanks to Michael Chirico for his contributions). 
    Unfortunately, as a side effect, progress bars and parallel processing have been removed. 
    Trying to set the &lt;code&gt;progress&lt;/code&gt; and &lt;code&gt;parallel&lt;/code&gt; arguments will now trigger a warning, and the arguments will be ignored.&lt;/li&gt;

  &lt;li&gt;As a followup from the changes to the output of the &lt;code&gt;coords&lt;/code&gt; function in version 1.16.0, the
    &lt;code&gt;transpose&lt;/code&gt;, &lt;code&gt;as.list&lt;/code&gt;, &lt;code&gt;as.matrix&lt;/code&gt; and &lt;code&gt;drop&lt;/code&gt; arguments have been
    deprecated.
    The &lt;code&gt;coords&lt;/code&gt; function currently has multiple exit points, depending on arguments and inputs, and can return
    retults in mutliple formats. This makes it difficult to use and to maintain.
    Going forward, &lt;code&gt;coords&lt;/code&gt; will only retrun data in a single, tidy &lt;code&gt;data.frame&lt;/code&gt; format, compatible following modern R
    coding practices.
    For compatibility reasons, deprecated arguments are still available, but setting them to non default
    values will trigger warnings. They will be removed in a future release.
    If your code still uses these arguments, please update it accordingly.&lt;/li&gt;

  &lt;li&gt;Finally, following years of performance improvements, an in an effort to simplify the codebase, all ROC computation
    algorithms other than 2 have been removed as they no longer provided meaningful performance advantages. The &lt;code&gt;algorithm&lt;/code&gt;
    argument to &lt;code&gt;roc&lt;/code&gt; has been deprecated. Setting it to a non-default value has no effect and triggers a warning.
    The &lt;code&gt;fun.sesp&lt;/code&gt; value of &lt;code&gt;roc&lt;/code&gt; objects is also deprecated. Calling it triggers a warning.
    Both will be removed in a future release of pROC.&lt;/li&gt;
&lt;/ul&gt;
	
&lt;p&gt;Here is the full changelog:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;ci.coords&lt;/code&gt; can now take the same &lt;code&gt;input&lt;/code&gt; values as &lt;code&gt;coords&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/90&quot;&gt;issue #90&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;ci.coords&lt;/code&gt; can be &lt;code&gt;plot&lt;/code&gt;ted&lt;/li&gt;
	&lt;li&gt;Added &quot;lr_pos&quot; and &quot;lr_neg&quot; to &lt;code&gt;coords&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/102&quot;&gt;issue #102&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;coords&lt;/code&gt; with partial.auc now interpolates bounds when needed&lt;/li&gt;
	&lt;li&gt;Added &lt;code&gt;ignore.partial.auc&lt;/code&gt; argument to &lt;code&gt;coords&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Deprecated &lt;code&gt;transpose&lt;/code&gt;, &lt;code&gt;as.list&lt;/code&gt;, &lt;code&gt;as.matrix&lt;/code&gt; and &lt;code&gt;drop&lt;/code&gt; in &lt;code&gt;coords&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;Deprecated the &lt;code&gt;algorithm&lt;/code&gt; argument to &lt;code&gt;roc&lt;/code&gt; and &lt;code&gt;fun.sesp&lt;/code&gt; value&lt;/li&gt;
	&lt;li&gt;Deprecated the &lt;code&gt;progress&lt;/code&gt; and &lt;code&gt;parallel&lt;/code&gt; argument for bootstrap operations.&lt;/li&gt;
	&lt;li&gt;Removed dependencies on &lt;a href=&quot;https://cran.r-project.org/web/packages/doParallel/index.html&quot;&gt;doParallel&lt;/a&gt; and retired package &lt;a href=&quot;http://had.co.nz/plyr/&quot;&gt;plyr&lt;/a&gt; (thanks to Michael Chirico, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/134&quot;&gt;pr #134&lt;/a&gt;, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/135&quot;&gt;#135&lt;/a&gt;, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/136&quot;&gt;#136&lt;/a&gt;, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/137&quot;&gt;#137&lt;/a&gt;, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/138&quot;&gt;#138&lt;/a&gt;, &lt;a href=&quot;https://github.com/xrobin/pROC/pull/139&quot;&gt;#139&lt;/a&gt; and &lt;a href=&quot;https://github.com/xrobin/pROC/pull/140&quot;&gt;#140&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;hr&gt;

&lt;p&gt;Update: pROC 1.19.0 was rejected from CRAN. A patch revision 1.19.0.1 was created to workaround an issue with a reverse dependency but provides no meaningful change:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Move &lt;code&gt;fun.sesp&lt;/code&gt; definition to work around &lt;a href=&quot;https://github.com/LudvigOlsen/cvms/pull/44&quot;&gt;LudvigOlsen/cvms#44&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.18.5</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2023/11/02/proc-1.18.5"/>
		<id>tag:xavier.robin.name,2023-11-02:/blog/2023/11/02/proc-1.18.5</id>
		<published>2023-11-02T17:01:20+01:00</published>
		<updated>2023-11-02T17:01:20+01:00</updated>
		<content type="html">&lt;p&gt;pROC 1.18.5 is now available on CRAN. It's a minor bugfix release:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Fixed formula input when given as variable and combined with &lt;code&gt;with&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/111&quot;&gt;issue #111&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Fixed formula containing variables with spaces (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/120&quot;&gt;issue #120&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Fixed broken grouping when &lt;code&gt;colour&lt;/code&gt; argument was given in &lt;code&gt;ggroc&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/121&quot;&gt;issue #121&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.18.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2021/09/06/proc-1.18.0"/>
		<id>tag:xavier.robin.name,2021-09-06:/blog/2021/09/06/proc-1.18.0</id>
		<published>2021-09-06T18:34:01+02:00</published>
		<updated>2021-09-06T18:34:01+02:00</updated>
		<content type="html">&lt;p&gt;pROC version 1.18.0 is now available on CRAN now. Only a few changes were implemented in this release:&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Add &lt;abbr title=&quot;Confidence Interval&quot;&gt;CI&lt;/abbr&gt; of the estimate for &lt;code&gt;roc.test&lt;/code&gt; (DeLong, paired only for now) (code contributed by &lt;a href=&quot;https://wz-billings.rbind.io/&quot;&gt;Zane Billings&lt;/a&gt;) (&lt;a href=&quot;https://github.com/xrobin/pROC/pull/95&quot;&gt;issue #95&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix documentation and alternative hypothesis for Venkatraman test (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/92&quot;&gt;issue #92&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.17.0.1</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2021/01/13/proc-1.17.0.1"/>
		<id>tag:xavier.robin.name,2021-01-13:/blog/2021/01/13/proc-1.17.0.1</id>
		<published>2021-01-13T16:19:16+01:00</published>
		<updated>2021-01-13T16:19:16+01:00</updated>
		<content type="html">&lt;p&gt;pROC version 1.17.0.1 is available on CRAN now. Besides several bug fixes and small changes, it introduces more values in &lt;code&gt;input&lt;/code&gt; of &lt;code&gt;coords&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Here is an example:&lt;/p&gt;

&lt;pre&gt;
library(pROC)
data(aSAH)
rocobj &amp;lt;- roc(aSAH$outcome, aSAH$s100b)
coords(rocobj, x = seq(0, 1, .1), input=&quot;recall&quot;, ret=&quot;precision&quot;)
#    precision
# 1        NaN
# 2  1.0000000
# 3  1.0000000
# 4  0.8601399
# 5  0.6721311
# 6  0.6307692
# 7  0.6373057
# 8  0.4803347
# 9  0.4517906
# 10 0.3997833
# 11 0.3628319
&lt;/pre&gt;

	
&lt;h2&gt;Getting the update&lt;/h2&gt;

&lt;p&gt;The update his available on CRAN now. You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;p&gt;Here is the full changelog:&lt;/p&gt; 

&lt;p&gt;1.17.0.1 (2020-01-07):&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Fix CRAN incoming checks as requested by CRAN.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1.17.0 (2020-12-29)&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Accept more values in &lt;code&gt;input&lt;/code&gt; of &lt;code&gt;coords&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/67&quot;&gt;issue #67&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Accept &lt;code&gt;kappa&lt;/code&gt; for the &lt;code&gt;power.roc.test&lt;/code&gt; of two ROC curves (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/82&quot;&gt;issue #82&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;The &lt;code&gt;input&lt;/code&gt; argument to &lt;code&gt;coords&lt;/code&gt; for &lt;code&gt;smooth.roc&lt;/code&gt; curves no longer has a default.&lt;/li&gt;
	&lt;li&gt;The &lt;code&gt;x&lt;/code&gt; argument to &lt;code&gt;coords&lt;/code&gt; for &lt;code&gt;smooth.roc&lt;/code&gt; can now be set to &lt;code&gt;all&lt;/code&gt; (also the default).&lt;/li&gt;
	&lt;li&gt;Fix bootstrap &lt;code&gt;roc.test&lt;/code&gt; and &lt;code&gt;cov&lt;/code&gt; with &lt;code&gt;smooth.roc&lt;/code&gt; curves.&lt;/li&gt;
	&lt;li&gt;The &lt;code&gt;ggroc&lt;/code&gt; function can now plot &lt;code&gt;smooth.roc&lt;/code&gt; curves (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/86&quot;&gt;issue #86&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Remove warnings with &lt;code&gt;warnPartialMatchDollar&lt;/code&gt; option (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/87&quot;&gt;issue #87&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Make tests depending on vdiffr conditional (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/88&quot;&gt;issue #88&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.16.1</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2020/01/14/proc-1.16.1"/>
		<id>tag:xavier.robin.name,2020-01-14:/blog/2020/01/14/proc-1.16.1</id>
		<published>2020-01-14T08:52:57+01:00</published>
		<updated>2020-01-14T08:52:57+01:00</updated>
		<content type="html">&lt;p&gt;pROC version 1.16.1 is a minor release that disables a timing-dependent test based on the microbenchmark package that can sometimes cause random failures on CRAN. This version contains no user-visible changes. Users don't need to install this update.&lt;/p&gt;
</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.16.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2020/01/12/proc-1.16.0"/>
		<id>tag:xavier.robin.name,2020-01-12:/blog/2020/01/12/proc-1.16.0</id>
		<published>2020-01-12T21:46:00+01:00</published>
		<updated>2020-01-12T21:46:00+01:00</updated>
		<content type="html">&lt;p&gt;pROC version 1.16.0 is available on CRAN now. Besides several bug fixes, the main change is the switch of the default value of the &lt;code&gt;transpose&lt;/code&gt; argument to the &lt;code&gt;coords&lt;/code&gt; function from &lt;code&gt;TRUE&lt;/code&gt; to &lt;code&gt;FALSE&lt;/code&gt;. As announced earlier, &lt;strong&gt;this is a backward incompatible change that will break any script that did not previously set the &lt;code&gt;transpose&lt;/code&gt; argument&lt;/strong&gt; and for now comes with a warning to make debugging easier. Scripts that set transpose explicitly are not unaffected.&lt;/p&gt;

&lt;h2&gt;New return values of &lt;code&gt;coords&lt;/code&gt; and &lt;code&gt;ci.coords&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;With &lt;code&gt;transpose = FALSE&lt;/code&gt;, the &lt;code&gt;coords&lt;/code&gt; returns a tidy &lt;code&gt;data.frame&lt;/code&gt; suitable for use in pipelines:&lt;/p&gt;

&lt;pre&gt;
data(aSAH)
rocobj &amp;lt;- roc(aSAH$outcome, aSAH$s100b)
coords(rocobj, c(0.05, 0.2, 0.5), transpose = FALSE)
#      threshold specificity sensitivity
# 0.05      0.05  0.06944444   0.9756098
# 0.2       0.20  0.80555556   0.6341463
# 0.5       0.50  0.97222222   0.2926829
&lt;/pre&gt;

&lt;p&gt;The function doesn't drop dimensions, so the result is always a &lt;code&gt;data.frame&lt;/code&gt;, even if it has only one row and/or one column.&lt;/p&gt;

&lt;p&gt;If speed is of utmost importance, you can get the results as a non-transposed matrix instead:
&lt;pre&gt;
coords(rocobj, c(0.05, 0.2, 0.5), transpose = FALSE, as.matrix = TRUE)
#      threshold specificity sensitivity
# [1,]      0.05  0.06944444   0.9756098
# [2,]      0.20  0.80555556   0.6341463
# [3,]      0.50  0.97222222   0.2926829
&lt;/pre&gt;

&lt;p&gt;In some scenarios this can be a tiny bit faster, and is used internally in &lt;code&gt;ci.coords&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;help(coords_transpose)&lt;/code&gt; for additional information.&lt;/p&gt;

&lt;h3&gt;&lt;code&gt;ci.coords&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The &lt;code&gt;ci.coords&lt;/code&gt; function now returns a list-like object:&lt;/p&gt;
&lt;pre&gt;
ciobj &amp;lt;- ci.coords(rocobj, c(0.05, 0.2, 0.5))
ciobj$accuracy
#        2.5%       50%     97.5%
# 1 0.3628319 0.3982301 0.4424779
# 2 0.6637168 0.7433628 0.8141593
# 3 0.6725664 0.7256637 0.7787611
&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;print&lt;/code&gt; function prints a table with all the results, however this table is generated on the fly and not available directly.&lt;/p&gt;

&lt;pre&gt;ciobj
# 95% CI (2000 stratified bootstrap replicates):
#      threshold sensitivity.low sensitivity.median sensitivity.high
# 0.05      0.05          0.9268             0.9756           1.0000
# 0.2       0.20          0.4878             0.6341           0.7805
# 0.5       0.50          0.1707             0.2927           0.4390
#      specificity.low specificity.median specificity.high accuracy.low
# 0.05         0.01389            0.06944           0.1250       0.3628
# 0.2          0.70830            0.80560           0.8889       0.6637
# 0.5          0.93060            0.97220           1.0000       0.6726
#      accuracy.median accuracy.high
# 0.05          0.3982        0.4425
# 0.2           0.7434        0.8142
# 0.5           0.7257        0.7788
&lt;/pre&gt;

&lt;p&gt;The following code snippet can be used to obtain all the information calculated by the function:&lt;/p&gt;
&lt;pre&gt;
for (ret in attr(ciobj, &quot;ret&quot;)) {
	print(ciobj[[ret]])
}
#        2.5%       50%     97.5%
# 1 0.9268293 0.9756098 1.0000000
# 2 0.4878049 0.6341463 0.7804878
# 3 0.1707317 0.2926829 0.4390244
#         2.5%        50%     97.5%
# 1 0.01388889 0.06944444 0.1250000
# 2 0.70833333 0.80555556 0.8888889
# 3 0.93055556 0.97222222 1.0000000
#        2.5%       50%     97.5%
# 1 0.3628319 0.3982301 0.4424779
# 2 0.6637168 0.7433628 0.8141593
# 3 0.6725664 0.7256637 0.7787611
&lt;/pre&gt;
	
&lt;h2&gt;Getting the update&lt;/h2&gt;

&lt;p&gt;The update his available on CRAN now. You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;p&gt;Here is the full changelog:&lt;/p&gt; 

&lt;ul&gt;
	&lt;li&gt;BACKWARD INCOMPATIBLE CHANGE: &lt;code&gt;transpose&lt;/code&gt; argument to &lt;code&gt;coords&lt;/code&gt; switched to &lt;code&gt;FALSE&lt;/code&gt; by default (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/54&quot;&gt;issue #54&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;BACKWARD INCOMPATIBLE CHANGE: &lt;code&gt;ci.coords&lt;/code&gt; return value is now of list type and easier to use.&lt;/li&gt;
	&lt;li&gt;Fix one-sided DeLong test for curves with &lt;code&gt;direction=&quot;&amp;gt;&quot;&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/64&quot;&gt;issue #64&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix an error in &lt;code&gt;ci.coords&lt;/code&gt; due to expected &lt;code&gt;NA&lt;/code&gt; values in some coords (like &quot;precision&quot;) (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/65&quot;&gt;issue #65&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Ordrered predictors are converted to numeric in a more robust way (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/63&quot;&gt;issue #63&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Cleaned up &lt;code&gt;power.roc.test&lt;/code&gt; code (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/50&quot;&gt;issue #50&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix pairing with &lt;code&gt;roc.formula&lt;/code&gt; and warn if &lt;code&gt;na.action&lt;/code&gt; is not set to &lt;code&gt;&quot;na.pass&quot;&lt;/code&gt; or &lt;code&gt;&quot;na.fail&quot;&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/68&quot;&gt;issue #68&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix &lt;code&gt;ci.coords&lt;/code&gt; not working with &lt;code&gt;smooth.roc&lt;/code&gt; curves.&lt;/li&gt;
&lt;/ul&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.15.3</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2019/07/22/proc-1.15.3"/>
		<id>tag:xavier.robin.name,2019-07-22:/blog/2019/07/22/proc-1.15.3</id>
		<published>2019-07-22T09:07:57+02:00</published>
		<updated>2019-07-22T09:07:57+02:00</updated>
		<content type="html">&lt;p&gt;A new version of pROC, 1.15.3, has been released and is now available on CRAN. It is a minor bugfix release. Versions 1.15.1 and 1.15.2 were rejected from CRAN.&lt;/p&gt;


&lt;p&gt;Here is the full changelog:&lt;/p&gt; 

&lt;ul&gt;
	&lt;li&gt;Fix &lt;code&gt;-Inf&lt;/code&gt; threshold in coords for curves with &lt;code&gt;direction = &quot;&gt;&quot;&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/60&quot;&gt;issue 60&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Keep list order in &lt;code&gt;ggroc&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/58&quot;&gt;issue 58&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix erroneous error in &lt;code&gt;ci.coords&lt;/code&gt; with &lt;code&gt;ret=&quot;threshold&quot;&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/57&quot;&gt;issue 57&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Restore lazy loading of the data and fix an &lt;code&gt;R CMD check&lt;/code&gt; warning &quot;Variables with usage in documentation object 'aSAH' not in code&quot;.&lt;/li&gt;
	&lt;li&gt;Fix vdiffr unit tests with ggplot2 3.2.0 (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/53&quot;&gt;issue 53&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.15.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2019/06/01/proc-1.15.0"/>
		<id>tag:xavier.robin.name,2019-06-01:/blog/2019/06/01/proc-1.15.0</id>
		<published>2019-06-01T09:33:08+02:00</published>
		<updated>2019-06-01T09:33:08+02:00</updated>
		<content type="html">&lt;p&gt;The latest version of pROC, 1.15.0 has just been released. It features significant speed improvements, many bug fixes, new methods for use in dplyr pipelines, increased verbosity, and prepares the way for some backwards-incompatible changes upcoming in pROC 1.16.0.&lt;/p&gt;

&lt;h2&gt;Verbosity&lt;/h2&gt;

&lt;p&gt;Since its initial release, pROC has been detecting the &lt;code&gt;level&lt;/code&gt;s of the positive and negative classes (cases and controls), as well as the &lt;code&gt;direction&lt;/code&gt; of the comparison, that is whether values are higher in case or in control observations. Until now it has been doing so silently, but this has lead to several issues and misunderstandings in the past. In particular, because of the detection of &lt;code&gt;direction&lt;/code&gt;, ROC curves in pROC will nearly always have an AUC higher than 0.5, which can at times hide problems with certain classifiers, or cause bias in resampling operations such as bootstrapping or cross-validation.&lt;/p&gt;

&lt;p&gt;In order to increase transparency, pROC 1.15.0 now prints a message on the command line when it auto-detects one of these two arguments.&lt;/p&gt;

&lt;pre&gt;
	&amp;gt; roc(aSAH$outcome, aSAH$ndka)
	&lt;span style=&quot;color: red&quot;&gt;Setting levels: control = Good, case = Poor
	Setting direction: controls &amp;lt; cases&lt;/span&gt;

	Call:
	roc.default(response = aSAH$outcome, predictor = aSAH$ndka)

	Data: aSAH$ndka in 72 controls (aSAH$outcome Good) &amp;lt; 41 cases (aSAH$outcome Poor).
	Area under the curve: 0.612
&lt;/pre&gt;
	
&lt;p&gt;If you run pROC repeatedly in loops, you may want to turn off these diagnostic messsages. The recommended way is to explicitly specify them explicitly:&lt;/p&gt;

&lt;pre&gt;
	roc(aSAH$outcome, aSAH$ndka, levels = c(&quot;Good&quot;, &quot;Poor&quot;), direction = &quot;&amp;lt;&quot;)
&lt;/pre&gt;

&lt;p&gt;Alternatively you can pass &lt;code&gt;quiet = TRUE&lt;/code&gt; to the ROC function to silenty ignore them.&lt;/p&gt;
	
&lt;pre&gt;
	roc(aSAH$outcome, aSAH$ndka, quiet = TRUE)
&lt;/pre&gt;

&lt;p&gt;As mentioned earlier this last option should be avoided when you are resampling, such as in bootstrap or cross-validation, as this could silently hide some biases due to changing directions.&lt;/p&gt;


&lt;h2&gt;Speed&lt;/h2&gt;

&lt;p&gt;Several bottlenecks have been removed, yielding significant speedups in the &lt;code&gt;roc&lt;/code&gt; function with &lt;code&gt;algorithm = 2&lt;/code&gt; (see &lt;a href=&quot;https://github.com/xrobin/pROC/issues/44&quot;&gt;issue 44&lt;/a&gt;), as well as in the &lt;code&gt;coords&lt;/code&gt; function which is now vectorized much more efficiently (see &lt;a href=&quot;https://github.com/xrobin/pROC/issues/52&quot;&gt;issue 52&lt;/a&gt;) and scales much better with the number of coordinates to calculate. With these improvements pROC is now as fast as other ROC R packages such as ROCR.&lt;/p&gt;

&lt;p&gt;With Big Data becoming more and more prevalent, every speed up matters and making pROC faster has very high priority. If you think that a particular computation is abnormally slow, for instance with a particular combination of arguments, feel free to &lt;a href=&quot;https://github.com/xrobin/pROC/issues/new?template=Bug_report.md&quot;&gt;submit a bug report&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As a consequence, &lt;code&gt;algorithm = 2&lt;/code&gt; is now used by default for numeric predictors, and is automatically selected by the new &lt;code&gt;algorithm = 6&lt;/code&gt; meta algorithm. &lt;code&gt;algorithm = 3&lt;/code&gt; remains slightly faster with very low numbers of thresholds (below 50) and is still the default with ordered factor predictors.&lt;/p&gt;
	

&lt;h2&gt;Pipelines&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;roc&lt;/code&gt; function can be used in pipelines, for instance with &lt;a href=&quot;https://dplyr.tidyverse.org/&quot;&gt;dplyr&lt;/a&gt; or &lt;a href=&quot;https://magrittr.tidyverse.org/&quot;&gt;magrittr&lt;/a&gt;. This is still a highly experimental feature and will change significantly in future versions (see &lt;a href=&quot;https://github.com/xrobin/pROC/issues/54&quot;&gt;issue 54&lt;/a&gt; for instance). Here is an example of usage:&lt;/p&gt;
	
&lt;pre&gt;
library(dplyr)
aSAH %&amp;gt;% 
    filter(gender == &quot;Female&quot;) %&amp;gt;% 
    roc(outcome, s100b)
&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;roc.data.frame&lt;/code&gt; method supports both standard and non-standard evaluation (NSE), and the &lt;code&gt;roc_&lt;/code&gt; function supports standard evaluation only. By default it returns the &lt;code&gt;roc&lt;/code&gt; object, which can then be piped to the &lt;code&gt;coords&lt;/code&gt; function to extract coordinates that can be used in further pipelines&lt;/p&gt;

&lt;pre&gt;
aSAH %&amp;gt;%
    filter(gender == &quot;Female&quot;) %&amp;gt;%
    roc(outcome, s100b) %&amp;gt;%
	coords(transpose=FALSE) %&amp;gt;%
    filter(sensitivity &gt; 0.6,
           specificity &gt; 0.6)
&lt;/pre&gt;

&lt;p&gt;More details and use cases are available in the &lt;code&gt;?roc&lt;/code&gt; help page.&lt;/p&gt;

&lt;h2 id=&quot;tc&quot;&gt;Transposing coordinates&lt;/h2&gt;

&lt;p&gt;Since the initial release of pROC, the &lt;code&gt;coords&lt;/code&gt; function has been returning a matrix with thresholds in columns, and the coordinate variables in rows.&lt;/p&gt;

&lt;pre&gt;
data(aSAH)
rocobj &amp;lt;- roc(aSAH$outcome, aSAH$s100b)
coords(rocobj, c(0.05, 0.2, 0.5))
#                   0.05       0.2       0.5
# threshold   0.05000000 0.2000000 0.5000000
# specificity 0.06944444 0.8055556 0.9722222
# sensitivity 0.97560976 0.6341463 0.2926829
&lt;/pre&gt;

&lt;p&gt;This format doesn't conform to the grammar of the &lt;a href=&quot;https://www.tidyverse.org&quot;&gt;tidyverse&lt;/a&gt;, outlined by Hadley Wickham in his &lt;a href=&quot;http://dx.doi.org/10.18637/jss.v059.i10&quot;&gt;Tidy Data&lt;/a&gt; 2014 paper, which has become prevalent in modern R language. In addition, the dropping of dimensions by default makes it difficult to guess what type of data &lt;code&gt;coords&lt;/code&gt; is going to return.&lt;/p&gt;

&lt;pre&gt;
	coords(rocobj, &quot;best&quot;)
	#   threshold specificity sensitivity 
	#   0.2050000   0.8055556   0.6341463 
	# A numeric vector
&lt;/pre&gt;

&lt;p&gt;Although it is possible to pass &lt;code&gt;drop = FALSE&lt;/code&gt;, the fact that it is not the default makes the behaviour unintuitive. In an upcoming version of pROC, this will be changed and &lt;code&gt;coords&lt;/code&gt; will return a &lt;code&gt;data.frame&lt;/code&gt; with the thresholds in rows and measurement in colums by default.&lt;/p&gt;

&lt;h3&gt;Changes in 1.15&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Addition of the &lt;code&gt;transpose&lt;/code&gt; argument.&lt;/li&gt;
	&lt;li&gt;Display a warning if &lt;code&gt;transpose&lt;/code&gt; is missing. Pass &lt;code&gt;transpose&lt;/code&gt; explicitly to silence the warning.&lt;/li&gt;
	&lt;li&gt;Deprecation of &lt;code&gt;as.list&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With &lt;code&gt;transpose = FALSE&lt;/code&gt;, the output is a tidy &lt;code&gt;data.frame&lt;/code&gt; suitable for use in pipelines:&lt;/p&gt;
&lt;pre&gt;
 coords(rocobj, c(0.05, 0.2, 0.5), transpose = FALSE)
#      threshold specificity sensitivity
# 0.05      0.05  0.06944444   0.9756098
# 0.2       0.20  0.80555556   0.6341463
# 0.5       0.50  0.97222222   0.2926829
&lt;/pre&gt;

&lt;p&gt;It is recommended that new developments set &lt;code&gt;transpose = FALSE&lt;/code&gt; explicitly. Currently these changes are neutral to the API and do not affect functionality outside of a warning.&lt;/p&gt;
	

&lt;h3&gt;Upcoming backwards incompatible changes in future version (1.16)&lt;/h3&gt;
&lt;p&gt;The next version of pROC will change the default &lt;code&gt;transpose&lt;/code&gt; to &lt;code&gt;FALSE&lt;/code&gt;. &lt;strong&gt;This is a backward incompatible change that will break any script that did not previously set &lt;code&gt;transpose&lt;/code&gt;&lt;/strong&gt; and will initially come with a warning to make debugging easier. Scripts that set &lt;code&gt;transpose&lt;/code&gt; explicitly will be unaffected.&lt;/p&gt;

&lt;h3&gt;Recommendations&lt;/h3&gt;
&lt;p&gt;If you are writing a script calling the &lt;code&gt;coords&lt;/code&gt; function, set &lt;code&gt;transpose = FALSE&lt;/code&gt; to silence the warning and make sure your script keeps running smoothly once the default &lt;code&gt;transpose&lt;/code&gt; is changed to &lt;code&gt;FALSE&lt;/code&gt;. It is also possible to set &lt;code&gt;transpose = TRUE&lt;/code&gt; to keep the current behavior, however is likely to be deprecated in the long term, and ultimately dropped.&lt;/p&gt;


&lt;h2&gt;New &lt;code&gt;coords&lt;/code&gt; return values&lt;/h2&gt;

The &lt;code&gt;coords&lt;/code&gt; function can now return two new values, &lt;code&gt;&quot;youden&quot;&lt;/code&gt; and &lt;code&gt;&quot;closest.topleft&quot;&lt;/code&gt;. They can be returned regardless of whether &lt;code&gt;input = &quot;best&quot;&lt;/code&gt; and of the value of the &lt;code&gt;best.method&lt;/code&gt; argument, although they will not be re-calculated if possible. They follow the &lt;code&gt;best.weights&lt;/code&gt; argument as expected. See &lt;a href=&quot;https://github.com/xrobin/pROC/issues/48&quot;&gt;issue 48&lt;/a&gt; for more information.


&lt;h2&gt;Bug fixes&lt;/h2&gt;

&lt;p&gt;Several small bugs have been fixed in this version of pROC. Most of them were identified thanks to an increased &lt;a href=&quot;https://codecov.io/github/xrobin/pROC&quot;&gt;unit test coverage&lt;/a&gt;. 65% of the code is now unit tested, up from 46% a year ago. The main weak points remain the testing of all bootstrapping and resampling operations. If you notice any unexpected or wrong behavior in those, or in any other function, feel free to &lt;a href=&quot;https://github.com/xrobin/pROC/issues/new?template=Bug_report.md&quot;&gt;submit a bug report&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;Getting the update&lt;/h2&gt;
&lt;p&gt;The update his available on CRAN now. You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;p&gt;Here is the full changelog:&lt;/p&gt; 

&lt;ul&gt;
	&lt;li&gt;&lt;code&gt;roc&lt;/code&gt; now prints messages when autodetecting &lt;code&gt;levels&lt;/code&gt; and &lt;code&gt;direction&lt;/code&gt; by default. Turn off with &lt;code&gt;quiet = TRUE&lt;/code&gt; or set these values explicitly.&lt;/li&gt;
	&lt;li&gt;Speedup with &lt;code&gt;algorithm = 2&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/44&quot;&gt;issue 44&lt;/a&gt;) and in &lt;code&gt;coords&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/52&quot;&gt;issue 52&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;New &lt;code&gt;algorithm = 6&lt;/code&gt; (used by default) uses &lt;code&gt;algorithm = 2&lt;/code&gt; for numeric data, and &lt;code&gt;algorithm = 3&lt;/code&gt; for ordered vectors.&lt;/li&gt;
	&lt;li&gt;New &lt;code&gt;roc.data.frame&lt;/code&gt; method and &lt;code&gt;roc_&lt;/code&gt; function for use in pipelines.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;coords&lt;/code&gt; can now returns &lt;code&gt;&quot;youden&quot;&lt;/code&gt; and &lt;code&gt;&quot;closest.topleft&quot;&lt;/code&gt; values (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/48&quot;&gt;issue 48&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;New &lt;code&gt;transpose&lt;/code&gt; argument for &lt;code&gt;coords&lt;/code&gt;, &lt;code&gt;TRUE&lt;/code&gt; by default (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/54&quot;&gt;issue 54&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Use text instead of Tcl/Tk progress bar by default (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/51&quot;&gt;issue 51&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Fix &lt;code&gt;method = &quot;density&quot;&lt;/code&gt; smoothing when called directly from &lt;code&gt;roc&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/49&quot;&gt;issue 49&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Renamed &lt;code&gt;roc&lt;/code&gt; argument &lt;code&gt;n&lt;/code&gt; to &lt;code&gt;smooth.n&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;Fixed 'are.paired' ignoring smoothing arguments of &lt;code&gt;roc2&lt;/code&gt; with &lt;code&gt;return.paired.rocs&lt;/code&gt;.&lt;/li&gt;
	&lt;li&gt;New &lt;code&gt;ret&lt;/code&gt; option &lt;code&gt;&quot;all&quot;&lt;/code&gt; in &lt;code&gt;coords&lt;/code&gt; (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/47&quot;&gt;issue 47&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;drop&lt;/code&gt; in &lt;code&gt;coords&lt;/code&gt; now drops the dimension of &lt;code&gt;ret&lt;/code&gt; too (&lt;a href=&quot;https://github.com/xrobin/pROC/issues/43&quot;&gt;issue 43&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.14.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2019/03/13/proc-1.14.0"/>
		<id>tag:xavier.robin.name,2019-03-13:/blog/2019/03/13/proc-1.14.0</id>
		<published>2019-03-13T10:22:42+01:00</published>
		<updated>2019-03-13T10:22:42+01:00</updated>
		<content type="html">&lt;p&gt;pROC 1.14.0 was released with many bug fixes and some new features.&lt;/p&gt;

&lt;h2&gt;Multiclass ROC&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;multiclass.roc&lt;/code&gt; function can now take a multivariate input with columns corresponding to scores of the different classes. The columns must be named with the corresponding class labels. Thanks Matthias Döring for the contribution.&lt;/p&gt;

&lt;p&gt;Let's see how to use it in practice with the iris dataset. Let's first split the dataset into a training and test sets:&lt;/p&gt;

&lt;pre&gt;
data(iris)
iris.sample &amp;lt;- sample(1:150)
iris.train &amp;lt;- iris[iris.sample[1:75],]
iris.test &amp;lt;- iris[iris.sample[76:150],]
&lt;/pre&gt;

&lt;p&gt;We'll use the &lt;code&gt;nnet&lt;/code&gt; package to generate some predictions. We use the &lt;code&gt;type=&quot;prob&quot;&lt;/code&gt; to the &lt;code&gt;predict&lt;/code&gt; function to get class probabilities.&lt;/p&gt;

&lt;pre&gt;library(&quot;nnet&quot;)
mn.net &amp;lt;- nnet::multinom(Species ~ ., iris.train)

iris.predictions &amp;lt;- predict(mn.net, newdata=iris.test, type=&quot;prob&quot;)
head(iris.predictions)
&lt;/pre&gt;
&lt;pre&gt;
	          setosa   versicolor    virginica
	63  2.877502e-21 1.000000e+00 6.647660e-19
	134 1.726936e-27 9.999346e-01 6.543642e-05
	150 1.074627e-28 7.914019e-03 9.920860e-01
	120 6.687744e-34 9.986586e-01 1.341419e-03
	6   1.000000e+00 1.845491e-24 6.590050e-72
	129 4.094873e-45 1.779882e-15 1.000000e+00
&lt;/pre&gt;

&lt;p&gt;Notice the column names, identical to the class labels. Now we can use the &lt;code&gt;multiclass.roc&lt;/code&gt; function directly:&lt;/p&gt;

&lt;pre&gt;multiclass.roc(iris.test$Species, iris.predictions)&lt;/pre&gt;

&lt;p&gt;Many modelling functions have similar interfaces, where the output of &lt;code&gt;predict&lt;/code&gt; can be changed with an extra argument. Check their documentation to find out how to get the required data.&lt;/p&gt;

&lt;h2&gt;Multiple aesthetics for &lt;code&gt;ggroc&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;It is now possible to pass several aesthetics to &lt;code&gt;ggroc&lt;/code&gt;. So for instance you can map a curve to both &lt;code&gt;colour&lt;/code&gt; and &lt;code&gt;linetype&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;
roc.list &amp;lt;- roc(outcome ~ s100b + ndka + wfns, data = aSAH)
ggroc(roc.list, aes=c(&quot;linetype&quot;, &quot;color&quot;))
&lt;/pre&gt;

&lt;p class=&quot;imglegende center&quot; style=&quot;max-width:768px&quot;&gt;&lt;img src=&quot;/files/blog/2019/03/12/ggroc_multiple_aes.png&quot; alt=&quot;ROC curves mapped to several aesthetics&quot;&gt; &lt;span&gt;Mapping 3 ROC curves to 2 aesthetics with ggroc.&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;Getting the update&lt;/h2&gt;
&lt;p&gt;The update his available on CRAN now. You can update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;p&gt;Here is the full changelog:&lt;/p&gt; 

&lt;ul&gt;
	&lt;li&gt;The &lt;code&gt;multiclass.roc&lt;/code&gt; function now accepts multivariate decision values (code contributed by Matthias Döring).&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;ggroc&lt;/code&gt; supports multiple aesthetics.&lt;/li&gt;
	&lt;li&gt;Make &lt;i&gt;ggplot2&lt;/i&gt; dependency optional.&lt;/li&gt;
	&lt;li&gt;Suggested packages can be installed interactively when required.&lt;/li&gt;
	&lt;li&gt;Passing both &lt;code&gt;cases&lt;/code&gt; and &lt;code&gt;controls&lt;/code&gt; or &lt;code&gt;response&lt;/code&gt; and &lt;code&gt;predictor&lt;/code&gt; arguments is now an error.&lt;/li&gt;
	&lt;li&gt;Many small bug fixes.&lt;/li&gt;
  &lt;/ul&gt;</content>
		</entry>

	<entry xml:lang="en" xml:base="https://xavier.robin.name/en/">
		<title type="html">pROC 1.13.0</title>
		
			<category term="pROC" label="pROC" scheme="https://xavier.robin.name/en/tag/pROC" />
		
		<link href="https://xavier.robin.name/en/blog/2018/09/24/proc-1.13.0"/>
		<id>tag:xavier.robin.name,2018-09-24:/blog/2018/09/24/proc-1.13.0</id>
		<published>2018-09-24T20:09:07+02:00</published>
		<updated>2018-09-24T20:10:44+02:00</updated>
		<content type="html">&lt;p&gt;pROC 1.13.0 was just released with bug fixes and a new feature.&lt;/p&gt;

&lt;h2&gt;Infinite values in predictor&lt;/h2&gt;

&lt;p&gt;Following the release of pROC 1.12, it quickly became clear with &lt;a href=&quot;https://github.com/xrobin/pROC/issues/30&quot;&gt;issue #30&lt;/a&gt; that infinite values were handled differently by the different algorithms of pROC. The problem with these values is that they cannot be thresholded. An &lt;code&gt;Inf&lt;/code&gt; will always be greater than any value. This means that in some cases, it may not be possible to reach 0 or 100% specificity or sensitivity. This also revealed that threshold-agnostic algorithms such as &lt;code&gt;algorithm=&quot;2&quot;&lt;/code&gt; or the DeLong theta calculations would happily reach 0 or 100% specificity or sensitivity in those case, although those values are unattainable.&lt;/p&gt;

&lt;p&gt;Starting with 1.13.0, when pROC's &lt;code&gt;roc&lt;/code&gt; function finds any infinite value in the &lt;code&gt;predictor&lt;/code&gt; argument, or in &lt;code&gt;controls&lt;/code&gt; or &lt;code&gt;cases&lt;/code&gt;, it will return &lt;code&gt;NaN&lt;/code&gt; (not a number).&lt;/p&gt;

&lt;h2&gt;Numerical accuracy&lt;/h2&gt;

&lt;p&gt;The handling of near ties close to + or - Infinity or 0 has been improved by calculating the threshold (which is the mean between two consecutive values) differently depending on the mean value itself. This allows preserving as much precision close to 0 without maxing out large absolute values.&lt;/p&gt;

&lt;h2&gt;New argument for ggroc&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ggroc&lt;/code&gt; can now take a new value for the &lt;code&gt;aes&lt;/code&gt; argument, &lt;code&gt;aes=&quot;group&quot;&lt;/code&gt;. Consistent with ggplot2, it allows to  curves with identical aesthetics to be split in different groups. This is especially useful for instance in facetted plots.

&lt;pre&gt;library(pROC)
data(aSAH)
roc.list &amp;lt;- roc(outcome ~ s100b + ndka + wfns, data = aSAH)
g.list &amp;lt;- ggroc(roc.list)
g.group &amp;lt;- ggroc(roc.list, aes=&quot;group&quot;)
g.group + facet_grid(.~name)
&lt;/pre&gt;

&lt;p class=&quot;imglegende center&quot; style=&quot;max-width:672px&quot;&gt;&lt;img src=&quot;/files/blog/2018/09/24/ggroc_facet.png&quot; alt=&quot;3 ROC curves in a facetted ggplot2 panel&quot;&gt; &lt;span&gt;Facetting of 3 ROC curves with ggroc.&lt;/span&gt;&lt;/p&gt;


&lt;h2&gt;Getting the update&lt;/h2&gt;
&lt;p&gt;The update has just been accepted on CRAN and should be online soon. Once it is out, update your installation by simply typing:&lt;/p&gt;

&lt;pre&gt;install.packages(&quot;pROC&quot;)&lt;/pre&gt;

&lt;p&gt;The full changelog is:&lt;/p&gt;

&lt;ul&gt;

	&lt;li&gt;&lt;code&gt;roc&lt;/code&gt; now returns &lt;code&gt;NaN&lt;/code&gt; when predictor contains infinite values ( &lt;a href=&quot;https://github.com/xrobin/pROC/issues/30&quot;&gt;issue #30&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Better handling of near-ties near +-Infinity and 0.&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;ggroc&lt;/code&gt; supports &lt;code&gt;aes=&quot;group&quot;&lt;/code&gt; to allow curves with identical aesthetics.&lt;/li&gt;
&lt;/ul&gt;</content>
		</entry>


</feed>