http://git-wip-us.apache.org/repos/asf/madlib-site/blob/af0e5f14/docs/v1.15.1/group__grp__correlation.html ---------------------------------------------------------------------- diff --git a/docs/v1.15.1/group__grp__correlation.html b/docs/v1.15.1/group__grp__correlation.html new file mode 100644 index 0000000..35c2e7d --- /dev/null +++ b/docs/v1.15.1/group__grp__correlation.html @@ -0,0 +1,391 @@ +<!-- HTML header for doxygen 1.8.4--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.14"/> +<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/> +<title>MADlib: Covariance and Correlation</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(initResizable); +/* @license-end */</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(function() { init_search(); }); +/* @license-end */ +</script> +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"], + jax: ["input/TeX","output/HTML-CSS"], +}); +</script><script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js"></script> +<!-- hack in the navigation tree --> +<script type="text/javascript" src="eigen_navtree_hacks.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="madlib_extra.css" rel="stylesheet" type="text/css"/> +<!-- google analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-45382226-1', 'madlib.apache.org'); + ga('send', 'pageview'); +</script> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td> + <td style="padding-left: 0.5em;"> + <div id="projectname"> + <span id="projectnumber">1.15.1</span> + </div> + <div id="projectbrief">User Documentation for Apache MADlib</div> + </td> + <td> <div id="MSearchBox" class="MSearchBoxInactive"> + <span class="left"> + <img id="MSearchSelect" src="search/mag_sel.png" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + alt=""/> + <input type="text" id="MSearchField" value="Search" accesskey="S" + onfocus="searchBox.OnSearchFieldFocus(true)" + onblur="searchBox.OnSearchFieldFocus(false)" + onkeyup="searchBox.OnSearchFieldChange(event)"/> + </span><span class="right"> + <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> + </span> + </div> +</td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.14 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +/* @license-end */ +</script> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +$(document).ready(function(){initNavTree('group__grp__correlation.html','');}); +/* @license-end */ +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">Covariance and Correlation<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> » <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a></div></div> </div> +</div><!--header--> +<div class="contents"> +<div class="toc"><b>Contents</b> <ul> +<li> +<a href="#usage">Covariance and Correlation Functions</a> </li> +<li> +<a href="#examples">Examples</a> </li> +<li> +<a href="#literature">Literature</a> </li> +<li> +<a href="#related">Related Topics</a> </li> +</ul> +</div><p>A correlation function is the degree and direction of association of two variables—how well one random variable can be predicted from the other. It is a normalized version of covariance. The Pearson correlation coefficient is used here, which has a value between -1 and 1, where 1 implies total positive linear correlation, 0 means no linear correlation, and -1 means total negative linear correlation.</p> +<p>This function generates an \(N\)x \(N\) cross correlation matrix for pairs of numeric columns in a <em>source_table</em>. It is square symmetrical with the \( (i,j) \)th element equal to the correlation coefficient between the \(i\)th and the \(j\)th variable. The diagonal elements (correlations of variables with themselves) are always equal to 1.0.</p> +<p>We also provide a covariance function which is similar in nature to correlation, and is a measure of the joint variability of two random variables.</p> +<p><a class="anchor" id="usage"></a></p><dl class="section user"><dt>Covariance and Correlation Functions</dt><dd></dd></dl> +<p>The correlation function has the following syntax: </p><pre class="syntax"> +correlation( source_table, + output_table, + target_cols, + verbose, + grouping_cols + ) +</pre><p>The covariance function has a similar syntax: </p><pre class="syntax"> +covariance( source_table, + output_table, + target_cols, + verbose, + grouping_cols + ) +</pre><dl class="arglist"> +<dt>source_table </dt> +<dd><p class="startdd">TEXT. Name of the table containing the input data.</p> +<p class="enddd"></p> +</dd> +<dt>output_table </dt> +<dd><p class="startdd">TEXT. Name of the table containing the cross correlation matrix. The output table has N rows, where N is the number of '<em>target_cols</em>' in the '<em>source_table'</em> for which correlation or covariance is being computed. It has the following columns: </p><table class="output"> +<tr> +<th>column_position </th><td>An automatically generated sequential counter indicating the order of the variable in the '<em>output_table</em>'. </td></tr> +<tr> +<th>variable </th><td>Contains the row header for the variables of interest. </td></tr> +<tr> +<th>grouping_cols </th><td>Contains the grouping columns, if any. </td></tr> +<tr> +<th><...> </th><td>The remainder of the table is the NxN correlation matrix for the pairs of variables of interest. </td></tr> +</table> +<p>The output table is arranged as a lower-triangular matrix with the upper triangle set to NULL and the diagonal elements set to 1.0. To obtain the result from the '<em>output_table</em>' order by '<em>column_position</em>': </p><pre class="example"> +SELECT * FROM output_table ORDER BY column_position; +</pre><p>In addition to output table, a summary table named <output_table>_summary is also created, which has the following columns: </p><table class="output"> +<tr> +<th>method</th><td>'Correlation' or 'Covariance' </td></tr> +<tr> +<th>source_table</th><td>VARCHAR. Data source table name. </td></tr> +<tr> +<th>output_table</th><td>VARCHAR. Output table name. </td></tr> +<tr> +<th>column_names</th><td>VARCHAR. Column names used for correlation computation, as a comma-separated string. </td></tr> +<tr> +<th>grouping_cols </th><td>Contains the grouping columns, if any. </td></tr> +<tr> +<th>mean_vector</th><td>FLOAT8[]. Mean value of column for variables of interest. </td></tr> +<tr> +<th>total_rows_processed </th><td>BIGINT. Total numbers of rows processed. </td></tr> +</table> +<p class="enddd"></p> +</dd> +<dt>target_cols (optional) </dt> +<dd><p class="startdd">TEXT, default: '*'. A comma-separated list of the columns to correlate. If NULL or <code>'*'</code>, results are produced for all numeric columns.</p> +<p class="enddd"></p> +</dd> +<dt>verbose (optional) </dt> +<dd><p class="startdd">BOOLEAN, default: FALSE. Print verbose information if TRUE.</p> +<p class="enddd"></p> +</dd> +<dt>grouping_cols (optional) </dt> +<dd>TEXT, default: NULL. A comma-separated list of the columns to group by. </dd> +</dl> +<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl> +<ol type="1"> +<li>Create an input dataset. <pre class="example"> +DROP TABLE IF EXISTS example_data CASCADE; +CREATE TABLE example_data( + id SERIAL, + outlook TEXT, + temperature FLOAT8, + humidity FLOAT8, + windy TEXT, + class TEXT, + day TEXT +); +INSERT INTO example_data VALUES +(1, 'sunny', 85, 85, 'false', 'Dont Play', 'Mon'), +(2, 'sunny', 80, 90, 'true', 'Dont Play', 'Mon'), +(3, 'overcast', 83, 78, 'false', 'Play', 'Mon'), +(4, 'rain', 70, 96, 'false', 'Play', 'Mon'), +(5, 'rain', 68, 80, 'false', 'Play', 'Mon'), +(6, 'rain', 65, 70, 'true', 'Dont Play', 'Mon'), +(7, 'overcast', 64, 65, 'true', 'Play', 'Mon'), +(8, 'sunny', 72, 95, 'false', 'Dont Play', 'Mon'), +(9, 'sunny', 69, 70, 'false', 'Play', 'Mon'), +(10, 'rain', 75, 80, 'false', 'Play', 'Mon'), +(11, 'sunny', 75, 70, 'true', 'Play', 'Mon'), +(12, 'overcast', 72, 90, 'true', 'Play', 'Mon'), +(13, 'overcast', 81, 75, 'false', 'Play', 'Mon'), +(14, 'rain', 71, 80, 'true', 'Dont Play', 'Mon'), +(15, NULL, 100, 100, 'true', NULL, 'Mon'), +(16, NULL, 110, 100, 'true', NULL, 'Mon'), +(101, 'sunny', 85, 85, 'false', 'Dont Play', 'Tues'), +(102, 'sunny', 80, 90, 'true', 'Dont Play', 'Tues'), +(103, 'overcast', 83, 78, 'false', 'Play', 'Tues'), +(104, 'rain', 70, 96, 'false', 'Play', 'Tues'), +(105, 'rain', 68, 80, 'false', 'Play', 'Tues'), +(106, 'rain', 65, 70, 'true', 'Dont Play', 'Tues'), +(107, 'overcast', 64, 65, 'true', 'Play', 'Tues'), +(108, 'sunny', 72, 95, 'false', 'Dont Play', 'Tues'), +(109, 'sunny', 69, 70, 'false', 'Play', 'Tues'), +(110, 'rain', 75, 80, 'false', 'Play', 'Tues'), +(111, 'sunny', 75, 70, 'true', 'Play', 'Tues'), +(112, 'overcast', 72, 90, 'true', 'Play', 'Tues'), +(113, 'overcast', 81, 75, 'false', 'Play', 'Tues'), +(114, 'rain', 71, 80, 'true', 'Dont Play', 'Tues'), +(115, NULL, 100, 100, 'true', NULL, 'Tues'), +(116, NULL, 110, 100, 'true', NULL, 'Tues'), +(201, 'sunny', 85, 85, 'false', 'Dont Play', 'Wed'), +(202, 'sunny', 80, 90, 'true', 'Dont Play', 'Wed'), +(203, 'overcast', 83, 78, 'false', 'Play', 'Wed'), +(204, 'rain', 70, 96, 'false', 'Play', 'Wed'), +(205, 'rain', 68, 80, 'false', 'Play', 'Wed'), +(206, 'rain', 65, 70, 'true', 'Dont Play', 'Wed'), +(207, 'overcast', 64, 65, 'true', 'Play', 'Wed'), +(208, 'sunny', 7, 95, 'false', 'Dont Play', 'Wed'), +(209, 'sunny', 6, 70, 'false', 'Play', 'Wed'), +(210, 'rain', 7, 80, 'false', 'Play', 'Wed'), +(211, 'sunny', 75, 70, 'true', 'Play', 'Wed'), +(212, 'overcast', 72, 90, 'true', 'Play', 'Wed'), +(213, 'overcast', 81, 75, 'false', 'Play', 'Wed'), +(214, 'rain', 71, 80, 'true', 'Dont Play', 'Wed'), +(215, NULL, 10, 100, 'true', NULL, 'Wed'), +(216, NULL, 10, 100, 'true', NULL, 'Wed'), +(217, 'sunny', 85, 85, 'false', 'Dont Play', 'Wed'), +(218, 'sunny', 80, 9, 'true', 'Dont Play', 'Wed'), +(219, 'overcast', 83, 78, 'false', 'Play', 'Wed'), +(220, 'rain', 70, 9, 'false', 'Play', 'Wed'), +(221, 'rain', 68, 80, 'false', 'Play', 'Wed'); +</pre></li> +<li>Get correlation between temperature and humidity: <pre class="example"> +DROP TABLE IF EXISTS example_data_output, example_data_output_summary; +SELECT madlib.correlation( 'example_data', + 'example_data_output', + 'temperature, humidity' + ); +</pre> View the correlation matrix: <pre class="example"> +SELECT * FROM example_data_output ORDER BY column_position; +</pre> <pre class="result"> + column_position | variable | temperature | humidity +-----------------+-------------+---------------------+---------- + 1 | temperature | 1 | + 2 | humidity | 0.00607993890408995 | 1 +(2 rows) +</pre> View the summary table: <pre class="example"> +\x on +SELECT * FROM example_data_output_summary; +</pre> <pre class="result"> +-[ RECORD 1 ]--------+----------------------------------- +method | Correlation +source | example_data +output_table | example_data_output +column_names | {temperature,humidity} +mean_vector | {70.188679245283,79.8679245283019} +total_rows_processed | 53 +</pre></li> +<li>Correlation with grouping by day: <pre class="example"> +\x off +DROP TABLE IF EXISTS example_data_output, example_data_output_summary; +SELECT madlib.correlation( 'example_data', + 'example_data_output', + 'temperature, humidity', + FALSE, + 'day' + ); +</pre> View the correlation matrix by group: <pre class="example"> +SELECT * FROM example_data_output ORDER BY day, column_position; +</pre> <pre class="result"> + column_position | variable | day | temperature | humidity +-----------------+-------------+------+-------------------+---------- + 1 | temperature | Mon | 1 | + 2 | humidity | Mon | 0.616876934548786 | 1 + 1 | temperature | Tues | 1 | + 2 | humidity | Tues | 0.616876934548786 | 1 + 1 | temperature | Wed | 1 | + 2 | humidity | Wed | -0.28969669368457 | 1 +(6 rows) +</pre> View the summary table: <pre class="example"> +\x on +SELECT * FROM example_data_output_summary ORDER BY day; +</pre> <pre class="result"> +-[ RECORD 1 ]--------+------------------------------------ +method | Correlation +source | example_data +output_table | example_data_output +column_names | {temperature,humidity} +day | Mon +mean_vector | {77.5,82.75} +total_rows_processed | 16 +-[ RECORD 2 ]--------+------------------------------------ +method | Correlation +source | example_data +output_table | example_data_output +column_names | {temperature,humidity} +day | Tues +mean_vector | {77.5,82.75} +total_rows_processed | 16 +-[ RECORD 3 ]--------+------------------------------------ +method | Correlation +source | example_data +output_table | example_data_output +column_names | {temperature,humidity} +day | Wed +mean_vector | {59.0476190476191,75.4761904761905} +total_rows_processed | 21 +</pre></li> +<li>Get covariance between temperature and humidity: <pre class="example"> +\x off +DROP TABLE IF EXISTS example_data_output, example_data_output_summary; +SELECT madlib.covariance( 'example_data', + 'example_data_output', + 'temperature, humidity' + ); +</pre> View the covariance matrix: <pre class="example"> +SELECT * FROM example_data_output ORDER BY column_position; +</pre> <pre class="result"> + column_position | variable | temperature | humidity +-----------------+-------------+------------------+------------------ + 1 | temperature | 507.926664293343 | + 2 | humidity | 2.40227839088644 | 307.359914560342 +(2 rows) +</pre> View the summary table: <pre class="example"> +\x on +SELECT * FROM example_data_output_summary; +</pre> <pre class="result"> +-[ RECORD 1 ]--------+----------------------------------- +method | Covariance +source | example_data +output_table | example_data_output +column_names | {temperature,humidity} +mean_vector | {70.188679245283,79.8679245283019} +total_rows_processed | 53 +</pre></li> +</ol> +<dl class="section user"><dt>Notes</dt><dd></dd></dl> +<p>Null values will be replaced by the mean of their respective columns (mean imputation/substitution). Mean imputation is a method in which the missing value on a certain variable is replaced by the mean of the available cases. This method maintains the sample size and is easy to use, but the variability in the data is reduced, so the standard deviations and the variance estimates tend to be underestimated. Please refer to [1] and [2] for details.</p> +<p>If the mean imputation method is not suitable for the target use case, it is advised to employ a view that handles the NULL values prior to calling the correlation/covariance functions.</p> +<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl> +<p>[1] <a href="https://en.wikipedia.org/wiki/Imputation_(statistics)">https://en.wikipedia.org/wiki/Imputation_(statistics)</a></p> +<p>[2] <a href="https://www.iriseekhout.com/missing-data/missing-data-methods/imputation-methods/">https://www.iriseekhout.com/missing-data/missing-data-methods/imputation-methods/</a></p> +<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl> +<p>File <a class="el" href="correlation_8sql__in.html" title="SQL functions for correlation computation. ">correlation.sql_in</a> documenting the SQL functions</p> +<p><a class="el" href="group__grp__summary.html">Summary</a> for general descriptive statistics for a table </p> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- start footer part --> +<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> + <ul> + <li class="footer">Generated on Mon Oct 15 2018 11:24:30 for MADlib by + <a href="http://www.doxygen.org/index.html"> + <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li> + </ul> +</div> +</body> +</html>
http://git-wip-us.apache.org/repos/asf/madlib-site/blob/af0e5f14/docs/v1.15.1/group__grp__countmin.html ---------------------------------------------------------------------- diff --git a/docs/v1.15.1/group__grp__countmin.html b/docs/v1.15.1/group__grp__countmin.html new file mode 100644 index 0000000..7b70771 --- /dev/null +++ b/docs/v1.15.1/group__grp__countmin.html @@ -0,0 +1,248 @@ +<!-- HTML header for doxygen 1.8.4--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.14"/> +<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/> +<title>MADlib: CountMin (Cormode-Muthukrishnan)</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(initResizable); +/* @license-end */</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(function() { init_search(); }); +/* @license-end */ +</script> +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"], + jax: ["input/TeX","output/HTML-CSS"], +}); +</script><script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js"></script> +<!-- hack in the navigation tree --> +<script type="text/javascript" src="eigen_navtree_hacks.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="madlib_extra.css" rel="stylesheet" type="text/css"/> +<!-- google analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-45382226-1', 'madlib.apache.org'); + ga('send', 'pageview'); +</script> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td> + <td style="padding-left: 0.5em;"> + <div id="projectname"> + <span id="projectnumber">1.15.1</span> + </div> + <div id="projectbrief">User Documentation for Apache MADlib</div> + </td> + <td> <div id="MSearchBox" class="MSearchBoxInactive"> + <span class="left"> + <img id="MSearchSelect" src="search/mag_sel.png" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + alt=""/> + <input type="text" id="MSearchField" value="Search" accesskey="S" + onfocus="searchBox.OnSearchFieldFocus(true)" + onblur="searchBox.OnSearchFieldFocus(false)" + onkeyup="searchBox.OnSearchFieldChange(event)"/> + </span><span class="right"> + <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> + </span> + </div> +</td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.14 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +/* @license-end */ +</script> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +$(document).ready(function(){initNavTree('group__grp__countmin.html','');}); +/* @license-end */ +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">CountMin (Cormode-Muthukrishnan)<div class="ingroups"><a class="el" href="group__grp__stats.html">Statistics</a> » <a class="el" href="group__grp__desc__stats.html">Descriptive Statistics</a> » <a class="el" href="group__grp__sketches.html">Cardinality Estimators</a></div></div> </div> +</div><!--header--> +<div class="contents"> +<div class="toc"><b>Contents</b> <ul> +<li> +<a href="#syntax">Syntax</a> </li> +<li> +<a href="#examples">Examples</a> </li> +<li> +<a href="#literature">Literature</a> </li> +<li> +<a href="#related">Related Topics</a> </li> +</ul> +</div><p>This module implements Cormode-Muthukrishnan <em>CountMin</em> sketches on integer values, implemented as a user-defined aggregate. It also provides scalar functions over the sketches to produce approximate counts, order statistics, and histograms.</p> +<p><a class="anchor" id="syntax"></a></p><dl class="section user"><dt>Syntax</dt><dd><ul> +<li>Get a sketch of a selected column specified by <em>col_name</em>. <pre class="syntax"> +cmsketch( col_name ) +</pre></li> +<li>Get the number of rows where <em>col_name = p</em>, computed from the sketch obtained from <code>cmsketch</code>. <pre class="syntax"> +cmsketch_count( cmsketch, + p ) +</pre></li> +<li>Get the number of rows where <em>col_name</em> is between <em>m</em> and <em>n</em> inclusive. <pre class="syntax"> +cmsketch_rangecount( cmsketch, + m, + n ) +</pre></li> +<li>Get the <em>k</em>th percentile of <em>col_name</em> where <em>count</em> specifies number of rows. <em>k</em> should be an integer between 1 to 99. <pre class="syntax"> +cmsketch_centile( cmsketch, + k, + count ) +</pre></li> +<li>Get the median of col_name where <em>count</em> specifies number of rows. This is equivalent to <code><a class="el" href="sketch_8sql__in.html#a2f2ab2fe3244515f5f73d49690e73b39">cmsketch_centile</a>(<em>cmsketch</em>,50,<em>count</em>)</code>. <pre class="syntax"> +cmsketch_median( cmsketch, + count ) +</pre></li> +<li>Get an n-bucket histogram for values between min and max for the column where each bucket has approximately the same width. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate. <pre class="syntax"> +cmsketch_width_histogram( cmsketch, + min, + max, + n ) +</pre></li> +<li>Get an n-bucket histogram for the column where each bucket has approximately the same count. The output is a text string containing triples {lo, hi, count} representing the buckets; counts are approximate. Note that an equi-depth histogram is equivalent to a spanning set of equi-spaced centiles. <pre class="syntax"> +cmsketch_depth_histogram( cmsketch, + n ) +</pre></li> +</ul> +</dd></dl> +<dl class="section note"><dt>Note</dt><dd>This is a <a href="https://www.postgresql.org/docs/current/static/xaggr.html">User Defined Aggregate</a> which returns the results when used in a query. Use "CREATE TABLE AS ", with the UDA as subquery if the results are to be stored. This is unlike the usual MADlib stored procedure interface which places the results in a table instead of returning it.</dd></dl> +<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl> +<ol type="1"> +<li>Generate some data. <pre class="example"> +CREATE TABLE data(class INT, a1 INT); +INSERT INTO data SELECT 1,1 FROM generate_series(1,10000); +INSERT INTO data SELECT 1,2 FROM generate_series(1,15000); +INSERT INTO data SELECT 1,3 FROM generate_series(1,10000); +INSERT INTO data SELECT 2,5 FROM generate_series(1,1000); +INSERT INTO data SELECT 2,6 FROM generate_series(1,1000); +</pre></li> +<li>Count number of rows where a1 = 2 in each class. Store results in a table. <pre class="example"> +CREATE TABLE sketch_count AS +SELECT class, + cmsketch_count( cmsketch( a1 ), 2 ) +FROM data GROUP BY data.class; +SELECT * FROM sketch_count; +</pre> Result: <pre class="result"> + class | cmsketch_count + ------+---------------- + 2 | 0 + 1 | 15000 +(2 rows) +</pre></li> +<li>Count number of rows where a1 is between 3 and 6. <pre class="example"> +SELECT class, + cmsketch_rangecount( cmsketch(a1), 3, 6 ) +FROM data GROUP BY data.class; +</pre> Result: <pre class="result"> + class | cmsketch_rangecount + ------+--------------------- + 2 | 2000 + 1 | 10000 +(2 rows) +</pre></li> +<li>Compute the 90th percentile of all of a1. <pre class="example"> +SELECT cmsketch_centile( cmsketch( a1 ), 90, count(*) ) +FROM data; +</pre> Result: <pre class="result"> + cmsketch_centile + ----------------- + 3 +(1 row) +</pre></li> +<li>Produce an equi-width histogram with 2 bins between 0 and 10. <pre class="example"> +SELECT cmsketch_width_histogram( cmsketch( a1 ), 0, 10, 2 ) +FROM data; +</pre> Result: <pre class="result"> + cmsketch_width_histogram + ----------------------------------- + [[0L, 4L, 35000], [5L, 10L, 2000]] +(1 row) +</pre></li> +<li>Produce an equi-depth histogram of a1 with 2 bins of approximately equal depth. <pre class="example"> +SELECT cmsketch_depth_histogram( cmsketch( a1 ), 2 ) +FROM data; +</pre> Result: <pre class="result"> + cmsketch_depth_histogram + ---------------------------------------------------------------------- + [[-9223372036854775807L, 1, 10000], [2, 9223372036854775807L, 27000]] +(1 row) +</pre></li> +</ol> +<p><a class="anchor" id="literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl> +<p>[1] G. Cormode and S. Muthukrishnan. An improved data stream summary: The count-min sketch and its applications. LATIN 2004, J. Algorithm 55(1): 58-75 (2005) . <a href="http://dimacs.rutgers.edu/~graham/pubs/html/CormodeMuthukrishnan04CMLatin.html">http://dimacs.rutgers.edu/~graham/pubs/html/CormodeMuthukrishnan04CMLatin.html</a></p> +<p>[2] G. Cormode. Encyclopedia entry on 'Count-Min Sketch'. In L. Liu and M. T. Ozsu, editors, Encyclopedia of Database Systems, pages 511-516. Springer, 2009. <a href="http://dimacs.rutgers.edu/~graham/pubs/html/Cormode09b.html">http://dimacs.rutgers.edu/~graham/pubs/html/Cormode09b.html</a></p> +<p><a class="anchor" id="related"></a>File <a class="el" href="sketch_8sql__in.html" title="SQL functions for sketch-based approximations of descriptive statistics. ">sketch.sql_in</a> documenting the SQL functions.</p> +<p>Module grp_quantile for a different implementation of quantile function. </p> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- start footer part --> +<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> + <ul> + <li class="footer">Generated on Mon Oct 15 2018 11:24:30 for MADlib by + <a href="http://www.doxygen.org/index.html"> + <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li> + </ul> +</div> +</body> +</html> http://git-wip-us.apache.org/repos/asf/madlib-site/blob/af0e5f14/docs/v1.15.1/group__grp__cox__prop__hazards.html ---------------------------------------------------------------------- diff --git a/docs/v1.15.1/group__grp__cox__prop__hazards.html b/docs/v1.15.1/group__grp__cox__prop__hazards.html new file mode 100644 index 0000000..2182c52 --- /dev/null +++ b/docs/v1.15.1/group__grp__cox__prop__hazards.html @@ -0,0 +1,482 @@ +<!-- HTML header for doxygen 1.8.4--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen 1.8.14"/> +<meta name="keywords" content="madlib,postgres,greenplum,machine learning,data mining,deep learning,ensemble methods,data science,market basket analysis,affinity analysis,pca,lda,regression,elastic net,huber white,proportional hazards,k-means,latent dirichlet allocation,bayes,support vector machines,svm"/> +<title>MADlib: Cox-Proportional Hazards Regression</title> +<link href="tabs.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="jquery.js"></script> +<script type="text/javascript" src="dynsections.js"></script> +<link href="navtree.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="resize.js"></script> +<script type="text/javascript" src="navtreedata.js"></script> +<script type="text/javascript" src="navtree.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(initResizable); +/* @license-end */</script> +<link href="search/search.css" rel="stylesheet" type="text/css"/> +<script type="text/javascript" src="search/searchdata.js"></script> +<script type="text/javascript" src="search/search.js"></script> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ + $(document).ready(function() { init_search(); }); +/* @license-end */ +</script> +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"], + jax: ["input/TeX","output/HTML-CSS"], +}); +</script><script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js"></script> +<!-- hack in the navigation tree --> +<script type="text/javascript" src="eigen_navtree_hacks.js"></script> +<link href="doxygen.css" rel="stylesheet" type="text/css" /> +<link href="madlib_extra.css" rel="stylesheet" type="text/css"/> +<!-- google analytics --> +<script> + (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ + (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), + m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) + })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); + ga('create', 'UA-45382226-1', 'madlib.apache.org'); + ga('send', 'pageview'); +</script> +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> +<div id="titlearea"> +<table cellspacing="0" cellpadding="0"> + <tbody> + <tr style="height: 56px;"> + <td id="projectlogo"><a href="http://madlib.apache.org"><img alt="Logo" src="madlib.png" height="50" style="padding-left:0.5em;" border="0"/ ></a></td> + <td style="padding-left: 0.5em;"> + <div id="projectname"> + <span id="projectnumber">1.15.1</span> + </div> + <div id="projectbrief">User Documentation for Apache MADlib</div> + </td> + <td> <div id="MSearchBox" class="MSearchBoxInactive"> + <span class="left"> + <img id="MSearchSelect" src="search/mag_sel.png" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + alt=""/> + <input type="text" id="MSearchField" value="Search" accesskey="S" + onfocus="searchBox.OnSearchFieldFocus(true)" + onblur="searchBox.OnSearchFieldFocus(false)" + onkeyup="searchBox.OnSearchFieldChange(event)"/> + </span><span class="right"> + <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> + </span> + </div> +</td> + </tr> + </tbody> +</table> +</div> +<!-- end header part --> +<!-- Generated by Doxygen 1.8.14 --> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +var searchBox = new SearchBox("searchBox", "search",false,'Search'); +/* @license-end */ +</script> +</div><!-- top --> +<div id="side-nav" class="ui-resizable side-nav-resizable"> + <div id="nav-tree"> + <div id="nav-tree-contents"> + <div id="nav-sync" class="sync"></div> + </div> + </div> + <div id="splitbar" style="-moz-user-select:none;" + class="ui-resizable-handle"> + </div> +</div> +<script type="text/javascript"> +/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ +$(document).ready(function(){initNavTree('group__grp__cox__prop__hazards.html','');}); +/* @license-end */ +</script> +<div id="doc-content"> +<!-- window showing the filter options --> +<div id="MSearchSelectWindow" + onmouseover="return searchBox.OnSearchSelectShow()" + onmouseout="return searchBox.OnSearchSelectHide()" + onkeydown="return searchBox.OnSearchSelectKey(event)"> +</div> + +<!-- iframe showing the search results (closed by default) --> +<div id="MSearchResultsWindow"> +<iframe src="javascript:void(0)" frameborder="0" + name="MSearchResults" id="MSearchResults"> +</iframe> +</div> + +<div class="header"> + <div class="headertitle"> +<div class="title">Cox-Proportional Hazards Regression<div class="ingroups"><a class="el" href="group__grp__super.html">Supervised Learning</a> » <a class="el" href="group__grp__regml.html">Regression Models</a></div></div> </div> +</div><!--header--> +<div class="contents"> +<div class="toc"><b>Contents</b> <ul> +<li class="level1"> +<a href="#training">Training Function</a> </li> +<li class="level1"> +<a href="#cox_zph">PHA Test Function</a> </li> +<li class="level1"> +<a href="#predict">Prediction Function</a> </li> +<li class="level1"> +<a href="#examples">Examples</a> </li> +<li class="level1"> +<a href="#background">Technical Background</a> </li> +<li class="level1"> +<a href="#related">Related Topics</a> </li> +</ul> +</div><p>Proportional-Hazard models enable the comparison of various survival models. These survival models are functions describing the probability of a one-item event (prototypically, this event is death) with respect to time. The interval of time before the occurrence of death can be called the survival time. Let T be a random variable representing the survival time, with a cumulative probability function P(t). Informally, P(t) is the probability that death has happened before time t.</p> +<p><a class="anchor" id="training"></a></p><dl class="section user"><dt>Training Function</dt><dd></dd></dl> +<p>Following is the syntax for the <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> training function: </p><pre class="syntax"> +coxph_train( source_table, + output_table, + dependent_variable, + independent_variable, + right_censoring_status, + strata, + optimizer_params + ) +</pre><p> <b>Arguments</b> </p><dl class="arglist"> +<dt>source_table </dt> +<dd>TEXT. The name of the table containing input data. </dd> +<dt>output_table </dt> +<dd><p class="startdd">TEXT. The name of the table where the output model is saved. The output is saved in the table named by the <em>output_table</em> argument. It has the following columns: </p><table class="output"> +<tr> +<th>coef </th><td>FLOAT8[]. Vector of the coefficients. </td></tr> +<tr> +<th>loglikelihood </th><td>FLOAT8. Log-likelihood value of the MLE estimate. </td></tr> +<tr> +<th>std_err </th><td>FLOAT8[]. Vector of the standard error of the coefficients. </td></tr> +<tr> +<th>stats </th><td>FLOAT8[]. Vector of the statistics of the coefficients. </td></tr> +<tr> +<th>p_values </th><td>FLOAT8[]. Vector of the p-values of the coefficients. </td></tr> +<tr> +<th>hessian </th><td>FLOAT8[]. The Hessian matrix computed using the final solution. </td></tr> +<tr> +<th>num_iterations </th><td>INTEGER. The number of iterations performed by the optimizer. </td></tr> +</table> +<p>Additionally, a summary output table is generated that contains a summary of the parameters used for building the Cox model. It is stored in a table named <output_table>_summary. It has the following columns: </p><table class="output"> +<tr> +<th>source_table </th><td>The source table name. </td></tr> +<tr> +<th>dependent_variable </th><td>The dependent variable name. </td></tr> +<tr> +<th>independent_variable </th><td>The independent variable name. </td></tr> +<tr> +<th>right_censoring_status </th><td>The right censoring status </td></tr> +<tr> +<th>strata </th><td>The stratification columns </td></tr> +<tr> +<th>num_processed </th><td>The number of rows that were actually used in the computation. </td></tr> +<tr> +<th>num_missing_rows_skipped </th><td>The number of rows that were skipped in the computation due to NULL values in them. </td></tr> +</table> +<p class="enddd"></p> +</dd> +<dt>dependent_variable </dt> +<dd>TEXT. A string containing the name of a column that contains an array of numeric values, or a string expression in the format 'ARRAY[1, x1, x2, x3]', where <em>x1</em>, <em>x2</em> and <em>x3</em> are column names. Dependent variables refer to the time of death. There is no need to pre-sort the data. </dd> +<dt>independent_variable </dt> +<dd>TEXT. The name of the independent variable. </dd> +<dt>right_censoring_status (optional) </dt> +<dd>TEXT, default: TRUE for all observations. A string containing an expression that evaluates to the right-censoring status for the observation—TRUE if the observation is not censored and FALSE if the observation is censored. The string could contain the name of the column containing the right-censoring status, a fixed Boolean expression (i.e., 'true', 'false', '0', '1') that applies to all observations, or a Boolean expression such as 'column_name < 10' that can be evaluated for each observation. </dd> +<dt>strata (optional) </dt> +<dd>VARCHAR, default: NULL, which does not do any stratifications. A string of comma-separated column names that are the strata ID variables used to do stratification. </dd> +<dt>optimizer_params (optional) </dt> +<dd><p class="startdd">VARCHAR, default: NULL, which uses the default values of optimizer parameters: max_iter=100, optimizer=newton, tolerance=1e-8, array_agg_size=10000000, sample_size=1000000. It should be a string that contains 'key=value' pairs separated by commas. The meanings of these parameters are:</p> +<ul> +<li>max_iter — The maximum number of iterations. The computation stops if the number of iterations exceeds this, which usually means that there is no convergence.</li> +<li>optimizer — The optimization method. Right now, "newton" is the only one supported.</li> +<li>tolerance — The stopping criteria. When the difference between the log-likelihoods of two consecutive iterations is smaller than this number, the computation has already converged and stops.</li> +<li>array_agg_size — To speed up the computation, the original data table is cut into multiple pieces, and each pieces of the data is aggregated into one big row. In the process of computation, the whole big row is loaded into memory and thus speed up the computation. This parameter controls approximately how many numbers we want to put into one big row. Larger value of array_agg_size may speed up more, but the size of the big row cannot exceed 1GB due to the restriction of PostgreSQL databases.</li> +<li>sample_size — To cut the data into approximate equal pieces, we first sample the data, and then find out the break points using this sampled data. A larger sample_size produces more accurate break points. </li> +</ul> +</dd> +</dl> +<p><a class="anchor" id="cox_zph"></a></p><dl class="section user"><dt>Proportional Hazards Assumption Test Function</dt><dd></dd></dl> +<p>The <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function tests the proportional hazards assumption (PHA) of a Cox regression.</p> +<p>Proportional-hazard models enable the comparison of various survival models. These PH models, however, assume that the hazard for a given individual is a fixed proportion of the hazard for any other individual, and the ratio of the hazards is constant across time. MADlib does not currently have support for performing any transformation of the time to compute the correlation.</p> +<p>The <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function is used to test this assumption by computing the correlation of the residual of the <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> model with time.</p> +<p>Following is the syntax for the <a class="el" href="cox__prop__hazards_8sql__in.html#a682d95d5475ce33e47937067cadc2766" title="Test the proportional hazards assumption for a Cox regression model fit (coxph_train) ...">cox_zph()</a> function: </p><pre class="syntax"> +cox_zph(cox_model_table, output_table) +</pre><p> <b>Arguments</b> </p><dl class="arglist"> +<dt>cox_model_table </dt> +<dd><p class="startdd">TEXT. The name of the table containing the Cox Proportional-Hazards model.</p> +<p class="enddd"></p> +</dd> +<dt>output_table </dt> +<dd>TEXT. The name of the table where the test statistics are saved. The output table is named by the <em>output_table</em> argument and has the following columns: <table class="output"> +<tr> +<th>covariate </th><td>TEXT. The independent variables. </td></tr> +<tr> +<th>rho </th><td>FLOAT8[]. Vector of the correlation coefficients between survival time and the scaled Schoenfeld residuals. </td></tr> +<tr> +<th>chi_square </th><td>FLOAT8[]. Chi-square test statistic for the correlation analysis. </td></tr> +<tr> +<th>p_value </th><td>FLOAT8[]. Two-side p-value for the chi-square statistic. </td></tr> +</table> +</dd> +</dl> +<p>Additionally, the residual values are outputted to the table named <em>output_table</em>_residual. The table contains the following columns: </p><table class="output"> +<tr> +<th><dep_column_name> </th><td>FLOAT8. Time values (dependent variable) present in the original source table. </td></tr> +<tr> +<th>residual </th><td>FLOAT8[]. Difference between the original covariate values and the expectation of the covariates obtained from the coxph_train model. </td></tr> +<tr> +<th>scaled_residual </th><td>Residual values scaled by the variance of the coefficients. </td></tr> +</table> +<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl> +<ul> +<li>Table names can be optionally schema qualified (current_schemas() is used if a schema name is not provided) and table and column names should follow case-sensitivity and quoting rules per the database. For instance, 'mytable' and 'MyTable' both resolve to the same entity—'mytable'. If mixed-case or multi-byte characters are desired for entity names then the string should be double-quoted; in this case the input would be '"MyTable"'.</li> +<li>The <a class="el" href="cox__prop__hazards_8sql__in.html#a3310cf98478b7c1e400e8fb1b3965d30">cox_prop_hazards_regr()</a> and <a class="el" href="cox__prop__hazards_8sql__in.html#ad778b289eb19ae0bb2b7e02a89bab3bc" title="Cox regression training function. ">cox_prop_hazards()</a> functions have been deprecated; <a class="el" href="cox__prop__hazards_8sql__in.html#a737450bbfe0f10204b0074a9d45b0cef" title="Compute cox-regression coefficients and diagnostic statistics. ">coxph_train()</a> should be used instead.</li> +</ul> +<p><a class="anchor" id="predict"></a></p><dl class="section user"><dt>Prediction Function</dt><dd>The prediction function is provided to calculate the linear predictionors, risk or the linear terms for the given prediction data. It has the following syntax: <pre class="syntax"> +coxph_predict(model_table, + source_table, + id_col_name, + output_table, + pred_type, + reference) +</pre></dd></dl> +<p><b>Arguments</b> </p><dl class="arglist"> +<dt>model_table </dt> +<dd><p class="startdd">TEXT. Name of the table containing the cox model.</p> +<p class="enddd"></p> +</dd> +<dt>source_table </dt> +<dd><p class="startdd">TEXT. Name of the table containing the prediction data.</p> +<p class="enddd"></p> +</dd> +<dt>id_col_name </dt> +<dd><p class="startdd">TEXT. Name of the id column in the source table.</p> +<p class="enddd"></p> +</dd> +<dt>output_table </dt> +<dd><p class="startdd">TEXT. Name of the table to store the prediction results in. The output table is named by the <em>output_table</em> argument and has the following columns: </p><table class="output"> +<tr> +<th>id </th><td>TEXT. The id column name from the source table. </td></tr> +<tr> +<th>predicted_result </th><td>DOUBLE PRECISION. Result of prediction based of the value of the prediction type parameter. </td></tr> +</table> +<p class="enddd"></p> +</dd> +<dt>pred_type </dt> +<dd><p class="startdd">TEXT, OPTIONAL. Type of prediction. This can be one of 'linear_predictors', 'risk', or 'terms'. DEFAULT='linear_predictors'.</p><ul> +<li>'linear_predictors' calculates the dot product of the independent variables and the coefficients.</li> +<li>'risk' is the exponentiated value of the linear prediction.</li> +<li>'terms' correspond to the linear terms obtained by multiplying the independent variables with their corresponding coefficients values (without further calculating the sum of these terms) </li> +</ul> +<p class="enddd"></p> +</dd> +<dt>reference </dt> +<dd>TEXT, OPTIONAL. Reference level to use for centering predictions. Can be one of 'strata', 'overall'. DEFAULT='strata'. Note that R uses 'sample' instead of 'overall' when referring to the overall mean value of the covariates as being the reference level. </dd> +</dl> +<p><a class="anchor" id="examples"></a></p><dl class="section user"><dt>Examples</dt><dd></dd></dl> +<ol type="1"> +<li>View online help for the proportional hazards training method. <pre class="example"> +SELECT madlib.coxph_train(); +</pre></li> +<li>Create an input data set. <pre class="example"> +DROP TABLE IF EXISTS sample_data; +CREATE TABLE sample_data ( + id INTEGER NOT NULL, + grp DOUBLE PRECISION, + wbc DOUBLE PRECISION, + timedeath INTEGER, + status BOOLEAN +); +COPY sample_data FROM STDIN WITH DELIMITER '|'; + 0 | 0 | 1.45 | 35 | t + 1 | 0 | 1.47 | 34 | t + 3 | 0 | 2.2 | 32 | t + 4 | 0 | 1.78 | 25 | t + 5 | 0 | 2.57 | 23 | t + 6 | 0 | 2.32 | 22 | t + 7 | 0 | 2.01 | 20 | t + 8 | 0 | 2.05 | 19 | t + 9 | 0 | 2.16 | 17 | t + 10 | 0 | 3.6 | 16 | t + 11 | 1 | 2.3 | 15 | t + 12 | 0 | 2.88 | 13 | t + 13 | 1 | 1.5 | 12 | t + 14 | 0 | 2.6 | 11 | t + 15 | 0 | 2.7 | 10 | t + 16 | 0 | 2.8 | 9 | t + 17 | 1 | 2.32 | 8 | t + 18 | 0 | 4.43 | 7 | t + 19 | 0 | 2.31 | 6 | t + 20 | 1 | 3.49 | 5 | t + 21 | 1 | 2.42 | 4 | t + 22 | 1 | 4.01 | 3 | t + 23 | 1 | 4.91 | 2 | t + 24 | 1 | 5 | 1 | t +\. +</pre></li> +<li>Run the Cox regression function. <pre class="example"> +SELECT madlib.coxph_train( 'sample_data', + 'sample_cox', + 'timedeath', + 'ARRAY[grp,wbc]', + 'status' + ); +</pre></li> +<li>View the results of the regression. <pre class="example"> +\x on +SELECT * FROM sample_cox; +</pre> Results: <pre class="result"> +-[ RECORD 1 ]--+---------------------------------------------------------------------------- +coef | {2.54407073265254,1.67172094779487} +loglikelihood | -37.8532498733 +std_err | {0.677180599294897,0.387195514577534} +z_stats | {3.7568570855419,4.31751114064138} +p_values | {0.000172060691513886,1.5779844638453e-05} +hessian | {{2.78043065745617,-2.25848560642414},{-2.25848560642414,8.50472838284472}} +num_iterations | 5 +</pre></li> +<li>Computing predictions using cox model. (This example uses the original data table to perform the prediction. Typically a different test dataset with the same features as the original training dataset would be used.) <pre class="example"> +\x off +-- Display the linear predictors for the original dataset +SELECT madlib.coxph_predict('sample_cox', + 'sample_data', + 'id', + 'sample_pred'); +</pre> <pre class="result"> +SELECT * FROM sample_pred; + id | predicted_value +----+-------------------- + 0 | -2.97110918125034 + 4 | -2.41944126847803 + 6 | -1.5167119566688 + 8 | -1.96807661257341 + 10 | 0.623090856508638 + 12 | -0.58054822590367 + 14 | -1.04863009128623 + 16 | -0.714285901727259 + 18 | 2.01061924317838 + 20 | 2.98327228490375 + 22 | 3.85256717775708 + 24 | 5.507570916074 + 1 | -2.93767476229444 + 3 | -1.71731847040418 + 5 | -1.09878171972008 + 7 | -2.03494545048521 + 9 | -1.78418730831598 + 15 | -0.881457996506747 + 19 | -1.53342916614675 + 11 | 0.993924357027849 + 13 | -0.343452401208048 + 17 | 1.02735877598375 + 21 | 1.19453087076323 + 23 | 5.35711603077246 +(24 rows) +</pre> <pre class="example"> +-- Display the relative risk for the original dataset +SELECT madlib.coxph_predict('sample_cox', + 'sample_data', + 'id', + 'sample_pred', + 'risk'); +</pre> <pre class="result"> + id | predicted_value + ----+-------------------- + 1 | 0.0529887971503509 + 3 | 0.179546963459175 + 5 | 0.33327686110022 + 7 | 0.130687611255372 + 9 | 0.167933483703554 + 15 | 0.414178600294289 + 19 | 0.215794402223054 + 11 | 2.70181658768287 + 13 | 0.709317242984782 + 17 | 2.79367735395696 + 21 | 3.30200833843654 + 23 | 212.112338046551 + 0 | 0.0512464372091503 + 4 | 0.0889713146524469 + 6 | 0.219432204682557 + 8 | 0.139725343898993 + 10 | 1.86468261037506 + 12 | 0.559591499901241 + 14 | 0.350417460388247 + 16 | 0.489541567796517 + 18 | 7.46794038691975 + 20 | 19.7523463121038 + 22 | 47.1138577624204 + 24 | 246.551504798816 +(24 rows) +</pre></li> +<li>Run the test for Proportional Hazards assumption to obtain correlation between residuals and time. <pre class="example"> +SELECT madlib.cox_zph( 'sample_cox', + 'sample_zph_output' + ); +</pre></li> +<li>View results of the PHA test. <pre class="example"> +SELECT * FROM sample_zph_output; +</pre> Results: <pre class="result"> +-[ RECORD 1 ]----------------------------------------- +covariate | ARRAY[grp,wbc] +rho | {0.00237308357328641,0.0375600568840431} +chi_square | {0.000100675718191977,0.0232317400546175} +p_value | {0.991994376850758,0.878855984657948} +</pre></li> +</ol> +<p><a class="anchor" id="background"></a></p><dl class="section user"><dt>Technical Background</dt><dd></dd></dl> +<p>Generally, proportional-hazard models start with a list of \( \boldsymbol n \) observations, each with \( \boldsymbol m \) covariates and a time of death. From this \( \boldsymbol n \times m \) matrix, we would like to derive the correlation between the covariates and the hazard function. This amounts to finding the parameters \( \boldsymbol \beta \) that best fit the model described below.</p> +<p>Let us define:</p><ul> +<li>\( \boldsymbol t \in \mathbf R^{m} \) denote the vector of observed dependent variables, with \( n \) rows.</li> +<li>\( X \in \mathbf R^{m} \) denote the design matrix with \( m \) columns and \( n \) rows, containing all observed vectors of independent variables \( \boldsymbol x_i \) as rows.</li> +<li>\( R(t_i) \) denote the set of observations still alive at time \( t_i \)</li> +</ul> +<p>Note that this model <b>does not</b> include a <b>constant term</b>, and the data cannot contain a column of 1s.</p> +<p>By definition, </p><p class="formulaDsp"> +\[ P[T_k = t_i | \boldsymbol R(t_i)] = \frac{e^{\beta^T x_k} }{ \sum_{j \in R(t_i)} e^{\beta^T x_j}}. \,. \] +</p> +<p>The <b>partial likelihood </b>function can now be generated as the product of conditional probabilities: </p><p class="formulaDsp"> +\[ \mathcal L = \prod_{i = 1}^n \left( \frac{e^{\beta^T x_i}}{ \sum_{j \in R(t_i)} e^{\beta^T x_j}} \right). \] +</p> +<p>The log-likelihood form of this equation is </p><p class="formulaDsp"> +\[ L = \sum_{i = 1}^n \left[ \beta^T x_i - \log\left(\sum_{j \in R(t_i)} e^{\beta^T x_j }\right) \right]. \] +</p> +<p>Using this score function and Hessian matrix, the partial likelihood can be maximized using the <b> Newton-Raphson algorithm</b>. <b>Breslow's method</b> is used to resolved tied times of deaths. The time of death for two records are considered "equal" if they differ by less than 1.0e-6</p> +<p>The inverse of the Hessian matrix, evaluated at the estimate of \( \boldsymbol \beta \), can be used as an <b>approximate variance-covariance matrix </b> for the estimate, and used to produce approximate <b>standard errors</b> for the regression coefficients.</p> +<p class="formulaDsp"> +\[ \mathit{se}(c_i) = \left( (H)^{-1} \right)_{ii} \,. \] +</p> +<p> The Wald z-statistic is </p><p class="formulaDsp"> +\[ z_i = \frac{c_i}{\mathit{se}(c_i)} \,. \] +</p> +<p>The Wald \( p \)-value for coefficient \( i \) gives the probability (under the assumptions inherent in the Wald test) of seeing a value at least as extreme as the one observed, provided that the null hypothesis ( \( c_i = 0 \)) is true. Letting \( F \) denote the cumulative density function of a standard normal distribution, the Wald \( p \)-value for coefficient \( i \) is therefore </p><p class="formulaDsp"> +\[ p_i = \Pr(|Z| \geq |z_i|) = 2 \cdot (1 - F( |z_i| )) \] +</p> +<p> where \( Z \) is a standard normally distributed random variable.</p> +<p>The condition number is computed as \( \kappa(H) \) during the iteration immediately <em>preceding</em> convergence (i.e., \( A \) is computed using the coefficients of the previous iteration). A large condition number (say, more than 1000) indicates the presence of significant multicollinearity.</p> +<p><a class="anchor" id="Literature"></a></p><dl class="section user"><dt>Literature</dt><dd></dd></dl> +<p>A somewhat random selection of nice write-ups, with valuable pointers into further literature:</p> +<p>[1] John Fox: Cox Proportional-Hazards Regression for Survival Data, Appendix to An R and S-PLUS companion to Applied Regression Feb 2012, <a href="http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf">http://cran.r-project.org/doc/contrib/Fox-Companion/appendix-cox-regression.pdf</a></p> +<p>[2] Stephen J Walters: What is a Cox model? <a href="http://www.medicine.ox.ac.uk/bandolier/painres/download/whatis/cox_model.pdf">http://www.medicine.ox.ac.uk/bandolier/painres/download/whatis/cox_model.pdf</a></p> +<p><a class="anchor" id="notes"></a></p><dl class="section user"><dt>Notes</dt><dd></dd></dl> +<p>If number of ties in the source table is very large, a memory allocation error may be raised. The limitation is about \((10^8 / m)\), where \(m\) is number of featrues. For instance, if there are 100 featrues, the number of ties should be fewer than 1 million.</p> +<p><a class="anchor" id="related"></a></p><dl class="section user"><dt>Related Topics</dt><dd></dd></dl> +<p>File <a class="el" href="cox__prop__hazards_8sql__in.html" title="SQL functions for cox proportional hazards. ">cox_prop_hazards.sql_in</a> documenting the functions</p> +</div><!-- contents --> +</div><!-- doc-content --> +<!-- start footer part --> +<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> + <ul> + <li class="footer">Generated on Mon Oct 15 2018 11:24:30 for MADlib by + <a href="http://www.doxygen.org/index.html"> + <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.14 </li> + </ul> +</div> +</body> +</html>