From aff6704cdcaea388f14b71cc013b1a224afb87fc Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 14:30:39 +0300 Subject: add function to capture output in real time --- gn3/computations/wgcna.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index fd508fa..0fb56e8 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -3,8 +3,9 @@ import os import json import uuid -from gn3.settings import TMPDIR +import subprocess +from gn3.settings import TMPDIR from gn3.commands import run_cmd @@ -20,6 +21,16 @@ def dump_wgcna_data(request_data: dict): return temp_file_path +def stream_cmd_output(socket, cmd: str): + """function to stream in realtime""" + # xtodo syncing and closing /edge cases + + results = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) + for line in iter(results.stdout.readline, b""): + line = line.decode("utf-8").rstrip() + + def compose_wgcna_cmd(rscript_path: str, temp_file_path: str): """function to componse wgcna cmd""" # (todo):issue relative paths to abs paths -- cgit v1.2.3 From f73262a56745de17bdb582474e27726cb19bd95e Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 15:09:10 +0300 Subject: add function to process images --- gn3/computations/wgcna.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 0fb56e8..26040d3 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -4,6 +4,7 @@ import os import json import uuid import subprocess +import base64 from gn3.settings import TMPDIR from gn3.commands import run_cmd @@ -15,6 +16,8 @@ def dump_wgcna_data(request_data: dict): temp_file_path = os.path.join(TMPDIR, filename) + request_data["TMPDIR"] = TMPDIR + with open(temp_file_path, "w") as output_file: json.dump(request_data, output_file) @@ -31,6 +34,16 @@ def stream_cmd_output(socket, cmd: str): line = line.decode("utf-8").rstrip() +def process_image(image_loc: str) ->bytes: + """encode the image""" + + try: + with open(image_loc, "rb") as image_file: + return base64.b64encode(image_file.read()) + except FileNotFoundError as e: + return b"" + + def compose_wgcna_cmd(rscript_path: str, temp_file_path: str): """function to componse wgcna cmd""" # (todo):issue relative paths to abs paths @@ -47,12 +60,18 @@ def call_wgcna_script(rscript_path: str, request_data: dict): run_cmd_results = run_cmd(cmd) + print(run_cmd_results["output"]) + with open(generated_file, "r") as outputfile: + output_file_data = json.load(outputfile) + output_file_data["image_1"] = process_image( + output_file_data["output"]["imageLoc"]) + if run_cmd_results["code"] != 0: return run_cmd_results return { - "data": json.load(outputfile), + "data": output_file_data, **run_cmd_results } except FileNotFoundError: -- cgit v1.2.3 From 838276a6c4effc6985a888a32d148ef8942b526a Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 15:13:06 +0300 Subject: rename key to image_data --- gn3/computations/wgcna.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 26040d3..421e09c 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -65,7 +65,7 @@ def call_wgcna_script(rscript_path: str, request_data: dict): with open(generated_file, "r") as outputfile: output_file_data = json.load(outputfile) - output_file_data["image_1"] = process_image( + output_file_data["image_data"] = process_image( output_file_data["output"]["imageLoc"]) if run_cmd_results["code"] != 0: -- cgit v1.2.3 From 84f5c8a4384f29dfcb187ac5eed43551860b182b Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 16:57:13 +0300 Subject: fix issues serializing byte string --- gn3/computations/wgcna.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 421e09c..4dd0985 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -33,8 +33,10 @@ def stream_cmd_output(socket, cmd: str): for line in iter(results.stdout.readline, b""): line = line.decode("utf-8").rstrip() + # xtodo emit the data -def process_image(image_loc: str) ->bytes: + +def process_image(image_loc: str) -> bytes: """encode the image""" try: @@ -65,8 +67,9 @@ def call_wgcna_script(rscript_path: str, request_data: dict): with open(generated_file, "r") as outputfile: output_file_data = json.load(outputfile) - output_file_data["image_data"] = process_image( - output_file_data["output"]["imageLoc"]) + # json format only supports unicode string// to get image data reconvert + output_file_data["output"]["image_data"] = process_image( + output_file_data["output"]["imageLoc"]).decode("ascii") if run_cmd_results["code"] != 0: return run_cmd_results -- cgit v1.2.3 From c6bce638cfac9df0a4f3f380971fde65b1947ad7 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 17:14:23 +0300 Subject: add socket obj and emit process --- gn3/computations/wgcna.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 4dd0985..94e2a40 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -28,12 +28,18 @@ def stream_cmd_output(socket, cmd: str): """function to stream in realtime""" # xtodo syncing and closing /edge cases + socket.emit("output", {"data", f"calling you script {cmd}"}) + results = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) for line in iter(results.stdout.readline, b""): line = line.decode("utf-8").rstrip() - # xtodo emit the data + socket.emit("output", + {"data": line}) + # close above make sure the process is closed + + socket.emit("output", {"data": "parsing the output results"}) def process_image(image_loc: str) -> bytes: @@ -62,8 +68,6 @@ def call_wgcna_script(rscript_path: str, request_data: dict): run_cmd_results = run_cmd(cmd) - print(run_cmd_results["output"]) - with open(generated_file, "r") as outputfile: output_file_data = json.load(outputfile) -- cgit v1.2.3 From fd8650ca108cf61cd16b264e09568df9ad7bf428 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 5 Oct 2021 17:34:59 +0300 Subject: pep8 formatting,pylint fixes --- gn3/computations/wgcna.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 94e2a40..d1d6d39 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -37,7 +37,7 @@ def stream_cmd_output(socket, cmd: str): socket.emit("output", {"data": line}) - # close above make sure the process is closed + # wait for process to complete code socket.emit("output", {"data": "parsing the output results"}) @@ -48,7 +48,7 @@ def process_image(image_loc: str) -> bytes: try: with open(image_loc, "rb") as image_file: return base64.b64encode(image_file.read()) - except FileNotFoundError as e: + except FileNotFoundError: return b"" -- cgit v1.2.3 From dda47e74d38b76e59f10ac184a0394066f086481 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 13 Oct 2021 07:21:05 +0300 Subject: minor modification for emitting data:add namespaces --- gn3/computations/wgcna.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index d1d6d39..f7463c5 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -6,6 +6,7 @@ import uuid import subprocess import base64 + from gn3.settings import TMPDIR from gn3.commands import run_cmd @@ -24,22 +25,23 @@ def dump_wgcna_data(request_data: dict): return temp_file_path -def stream_cmd_output(socket, cmd: str): +def stream_cmd_output(request_data, cmd: str): """function to stream in realtime""" # xtodo syncing and closing /edge cases - socket.emit("output", {"data", f"calling you script {cmd}"}) - + socketio.emit("output", {"data": f"calling you script {cmd}"}, + namespace="/", room=request_data["socket_id"]) results = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) for line in iter(results.stdout.readline, b""): + line = line.decode("utf-8").rstrip() - socket.emit("output", - {"data": line}) - # wait for process to complete code + socketio.emit("output", + {"data": line}, namespace="/", room=request_data["socket_id"]) - socket.emit("output", {"data": "parsing the output results"}) + socketio.emit( + "output", {"data": "parsing the output results"}, namespace="/", room=request_data["socket_id"]) def process_image(image_loc: str) -> bytes: @@ -64,9 +66,11 @@ def call_wgcna_script(rscript_path: str, request_data: dict): generated_file = dump_wgcna_data(request_data) cmd = compose_wgcna_cmd(rscript_path, generated_file) + stream_cmd_output(request_data, cmd) + try: - run_cmd_results = run_cmd(cmd) + # run_cmd_results = run_cmd(cmd) with open(generated_file, "r") as outputfile: @@ -74,12 +78,14 @@ def call_wgcna_script(rscript_path: str, request_data: dict): # json format only supports unicode string// to get image data reconvert output_file_data["output"]["image_data"] = process_image( output_file_data["output"]["imageLoc"]).decode("ascii") + output_file_data["output"]["image_data2"] = process_image( + output_file_data["output"]["heatMap"]).decode("ascii") - if run_cmd_results["code"] != 0: - return run_cmd_results + # if run_cmd_results["code"] != 0: + # return run_cmd_results return { "data": output_file_data, - **run_cmd_results + "output": "" } except FileNotFoundError: # relook at handling errors gn3 -- cgit v1.2.3 From 4c2cf2aceb044d00fe5e41ac40a07fe614737ef2 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 13 Oct 2021 08:11:25 +0300 Subject: fix unittests --- gn3/computations/wgcna.py | 15 +++++++-------- tests/unit/computations/test_wgcna.py | 14 ++++++++++---- 2 files changed, 17 insertions(+), 12 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index f7463c5..90db455 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -66,26 +66,25 @@ def call_wgcna_script(rscript_path: str, request_data: dict): generated_file = dump_wgcna_data(request_data) cmd = compose_wgcna_cmd(rscript_path, generated_file) - stream_cmd_output(request_data, cmd) + # stream_cmd_output(request_data, cmd) disable streaming of data try: - # run_cmd_results = run_cmd(cmd) + run_cmd_results = run_cmd(cmd) with open(generated_file, "r") as outputfile: + if run_cmd_results["code"] != 0: + return run_cmd_results + output_file_data = json.load(outputfile) - # json format only supports unicode string// to get image data reconvert output_file_data["output"]["image_data"] = process_image( output_file_data["output"]["imageLoc"]).decode("ascii") - output_file_data["output"]["image_data2"] = process_image( - output_file_data["output"]["heatMap"]).decode("ascii") + # json format only supports unicode string// to get image data reconvert - # if run_cmd_results["code"] != 0: - # return run_cmd_results return { "data": output_file_data, - "output": "" + **run_cmd_results } except FileNotFoundError: # relook at handling errors gn3 diff --git a/tests/unit/computations/test_wgcna.py b/tests/unit/computations/test_wgcna.py index ec81d94..5f23a86 100644 --- a/tests/unit/computations/test_wgcna.py +++ b/tests/unit/computations/test_wgcna.py @@ -10,13 +10,16 @@ from gn3.computations.wgcna import call_wgcna_script class TestWgcna(TestCase): """test class for wgcna""" + @mock.patch("gn3.computations.wgcna.process_image") @mock.patch("gn3.computations.wgcna.run_cmd") @mock.patch("gn3.computations.wgcna.compose_wgcna_cmd") @mock.patch("gn3.computations.wgcna.dump_wgcna_data") def test_call_wgcna_script(self, mock_dumping_data, mock_compose_wgcna, - mock_run_cmd): + mock_run_cmd, + mock_img, + ): """test for calling wgcna script""" # pylint: disable = line-too-long @@ -50,7 +53,7 @@ class TestWgcna(TestCase): "output": "Flagging genes and samples with too many missing values...\n ..step 1\nAllowing parallel execution with up to 3 working processes.\npickSoftThreshold: will use block size 7.\n pickSoftThreshold: calculating connectivity for given powers...\n ..working on genes 1 through 7 of 7\n Flagging genes and samples with too many missing values...\n ..step 1\n ..Working on block 1 .\n TOM calculation: adjacency..\n ..will not use multithreading.\nclustering..\n ....detecting modules..\n ....calculating module eigengenes..\n ....checking kME in modules..\n ..merging modules that are too close..\n mergeCloseModules: Merging modules whose distance is less than 0.15\n mergeCloseModules: less than two proper modules.\n ..color levels are turquoise\n ..there is nothing to merge.\n Calculating new MEs...\n" } - json_output = "{\"inputdata\":{\"trait_sample_data \":{},\"minModuleSize\":30,\"TOMtype\":\"unsigned\"},\"outputdata\":{\"eigengenes\":[],\"colors\":[]}}" + json_output = "{\"inputdata\":{\"trait_sample_data \":{},\"minModuleSize\":30,\"TOMtype\":\"unsigned\"},\"output\":{\"eigengenes\":[],\"imageLoc\":[],\"colors\":[]}}" expected_output = { @@ -61,9 +64,11 @@ class TestWgcna(TestCase): "TOMtype": "unsigned" }, - "outputdata": { + "output": { "eigengenes": [], - "colors": [] + "imageLoc": [], + "colors": [], + "image_data": "AFDSFNBSDGJJHH" } }, @@ -74,6 +79,7 @@ class TestWgcna(TestCase): with mock.patch("builtins.open", mock.mock_open(read_data=json_output)): mock_run_cmd.return_value = mock_run_cmd_results + mock_img.return_value = b"AFDSFNBSDGJJHH" results = call_wgcna_script( "Rscript/GUIX_PATH/scripts/r_file.R", request_data) -- cgit v1.2.3 From 7b8efdf2040b0f623d1736e5608338ddcbe4a9da Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 13 Oct 2021 08:15:49 +0300 Subject: pylint and pep8 formatting --- gn3/computations/wgcna.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 90db455..76c71d5 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -25,7 +25,7 @@ def dump_wgcna_data(request_data: dict): return temp_file_path -def stream_cmd_output(request_data, cmd: str): +def stream_cmd_output(socketio, request_data, cmd: str): """function to stream in realtime""" # xtodo syncing and closing /edge cases @@ -41,7 +41,9 @@ def stream_cmd_output(request_data, cmd: str): {"data": line}, namespace="/", room=request_data["socket_id"]) socketio.emit( - "output", {"data": "parsing the output results"}, namespace="/", room=request_data["socket_id"]) + "output", {"data": + "parsing the output results"}, namespace="/", + room=request_data["socket_id"]) def process_image(image_loc: str) -> bytes: -- cgit v1.2.3 From a016f291176a974e654c9387937057cb8f6aa250 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 20 Oct 2021 13:17:35 +0300 Subject: mypy fix for none stdout --- gn3/computations/wgcna.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 76c71d5..0e49527 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -33,17 +33,20 @@ def stream_cmd_output(socketio, request_data, cmd: str): namespace="/", room=request_data["socket_id"]) results = subprocess.Popen( cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True) - for line in iter(results.stdout.readline, b""): - line = line.decode("utf-8").rstrip() + if results.stdout is not None: - socketio.emit("output", - {"data": line}, namespace="/", room=request_data["socket_id"]) + for line in iter(results.stdout.readline, b""): - socketio.emit( - "output", {"data": - "parsing the output results"}, namespace="/", - room=request_data["socket_id"]) + line = line.decode("utf-8").rstrip() + + socketio.emit("output", + {"data": line}, namespace="/", room=request_data["socket_id"]) + + socketio.emit( + "output", {"data": + "parsing the output results"}, namespace="/", + room=request_data["socket_id"]) def process_image(image_loc: str) -> bytes: -- cgit v1.2.3 From 5440bfcd6940db08c4479a39ba66dbc802b2c426 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 20 Oct 2021 13:26:02 +0300 Subject: mypy:Incompatible types in assignment fix --- gn3/computations/wgcna.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/wgcna.py b/gn3/computations/wgcna.py index 0e49527..ab12fe7 100644 --- a/gn3/computations/wgcna.py +++ b/gn3/computations/wgcna.py @@ -37,11 +37,9 @@ def stream_cmd_output(socketio, request_data, cmd: str): if results.stdout is not None: for line in iter(results.stdout.readline, b""): - - line = line.decode("utf-8").rstrip() - socketio.emit("output", - {"data": line}, namespace="/", room=request_data["socket_id"]) + {"data": line.decode("utf-8").rstrip()}, + namespace="/", room=request_data["socket_id"]) socketio.emit( "output", {"data": -- cgit v1.2.3 From 8f036415975d6e224e5e94277997329c0f1fa159 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Fri, 29 Oct 2021 09:49:28 +0300 Subject: Feature/biweight reimplementation (#47) * add biweight reimplementation with pingouin * delete biweight scripts and tests * add python-pingouin to guix file * delete biweight paths * mypy fix:pingouin mising imports * pep8 formatting && pylint fixes--- gn3/computations/biweight.py | 27 ------------------ gn3/computations/correlations.py | 11 ++++---- gn3/settings.py | 3 -- guix.scm | 1 + mypy.ini | 3 ++ scripts/calculate_biweight.R | 43 ----------------------------- tests/unit/computations/test_biweight.py | 21 -------------- tests/unit/computations/test_correlation.py | 11 -------- 8 files changed, 9 insertions(+), 111 deletions(-) delete mode 100644 gn3/computations/biweight.py delete mode 100644 scripts/calculate_biweight.R delete mode 100644 tests/unit/computations/test_biweight.py (limited to 'gn3/computations') diff --git a/gn3/computations/biweight.py b/gn3/computations/biweight.py deleted file mode 100644 index 7accd0c..0000000 --- a/gn3/computations/biweight.py +++ /dev/null @@ -1,27 +0,0 @@ -"""module contains script to call biweight midcorrelation in R""" -import subprocess - -from typing import List -from typing import Tuple - -from gn3.settings import BIWEIGHT_RSCRIPT - - -def calculate_biweight_corr(trait_vals: List, - target_vals: List, - path_to_script: str = BIWEIGHT_RSCRIPT, - command: str = "Rscript" - ) -> Tuple[float, float]: - """biweight function""" - - args_1 = ' '.join(str(trait_val) for trait_val in trait_vals) - args_2 = ' '.join(str(target_val) for target_val in target_vals) - cmd = [command, path_to_script] + [args_1] + [args_2] - - results = subprocess.check_output(cmd, universal_newlines=True) - try: - (corr_coeff, p_val) = tuple( - [float(y.strip()) for y in results.split()]) - return (corr_coeff, p_val) - except Exception as error: - raise error diff --git a/gn3/computations/correlations.py b/gn3/computations/correlations.py index bb13ff1..c930df0 100644 --- a/gn3/computations/correlations.py +++ b/gn3/computations/correlations.py @@ -8,7 +8,7 @@ from typing import Optional from typing import Callable import scipy.stats -from gn3.computations.biweight import calculate_biweight_corr +import pingouin as pg def map_shared_keys_to_values(target_sample_keys: List, @@ -102,11 +102,10 @@ package :not packaged in guix """ - try: - results = calculate_biweight_corr(x_val, y_val) - return results - except Exception as error: - raise error + results = pg.corr(x_val, y_val, method="bicor") + corr_coeff = results["r"].values[0] + p_val = results["p-val"].values[0] + return (corr_coeff, p_val) def filter_shared_sample_keys(this_samplelist, diff --git a/gn3/settings.py b/gn3/settings.py index d5f1d3c..e85eeff 100644 --- a/gn3/settings.py +++ b/gn3/settings.py @@ -22,9 +22,6 @@ SQLALCHEMY_TRACK_MODIFICATIONS = False GN2_BASE_URL = "http://www.genenetwork.org/" -# biweight script -BIWEIGHT_RSCRIPT = "~/genenetwork3/scripts/calculate_biweight.R" - # wgcna script WGCNA_RSCRIPT = "wgcna_analysis.R" # qtlreaper command diff --git a/guix.scm b/guix.scm index d8b1596..81e8389 100644 --- a/guix.scm +++ b/guix.scm @@ -110,6 +110,7 @@ ("r-rjson" ,r-rjson) ("python-plotly" ,python-plotly) ("python-pandas" ,python-pandas) + ("python-pingouin" ,python-pingouin) ("rust-qtlreaper" ,rust-qtlreaper) ("python-flask-cors" ,python-flask-cors))) (build-system python-build-system) diff --git a/mypy.ini b/mypy.ini index 5d66812..a507703 100644 --- a/mypy.ini +++ b/mypy.ini @@ -11,3 +11,6 @@ ignore_missing_imports = True [mypy-ipfshttpclient.*] ignore_missing_imports = True + +[mypy-pingouin.*] +ignore_missing_imports = True \ No newline at end of file diff --git a/scripts/calculate_biweight.R b/scripts/calculate_biweight.R deleted file mode 100644 index 8d8366e..0000000 --- a/scripts/calculate_biweight.R +++ /dev/null @@ -1,43 +0,0 @@ - -library(testthat) -library(WGCNA) - -arg_values <- commandArgs(trailingOnly = TRUE) -ParseArgs <- function(args){ - - trait_vals <- as.numeric(unlist(strsplit(args[1], split=" "))) - target_vals <- as.numeric(unlist(strsplit(args[2], split=" "))) - - return(list(trait_vals= c(trait_vals),target_vals = c(target_vals))) - -} -BiweightMidCorrelation <- function(trait_val,target_val){ - - results <-bicorAndPvalue(as.numeric(unlist(trait_val)),as.numeric(unlist(target_val))) - return ((c(c(results$bicor)[1],c(results$p)[1]))) - -} - - - -test_that("biweight results"),{ - vec_1 <- c(1,2,3,4) - vec_2 <- c(1,2,3,4) - - results <- BiweightMidCorrelation(vec_1,vec_2) - expect_equal(c(1.0,0.0),results) -} - - -test_that("parsing args "),{ - my_args <- c("1 2 3 4","5 6 7 8") - results <- ParseArgs(my_args) - - expect_equal(results[1],c(1,2,3,4)) - expect_equal(results[2],c(5,6,7,8)) -} - -parsed_values <- ParseArgs(arg_values) - - -cat(BiweightMidCorrelation(parsed_values[1],parsed_values[2])) \ No newline at end of file diff --git a/tests/unit/computations/test_biweight.py b/tests/unit/computations/test_biweight.py deleted file mode 100644 index ad404f1..0000000 --- a/tests/unit/computations/test_biweight.py +++ /dev/null @@ -1,21 +0,0 @@ -"""test for biweight script""" -from unittest import TestCase -from unittest import mock - -from gn3.computations.biweight import calculate_biweight_corr - - -class TestBiweight(TestCase): - """test class for biweight""" - - @mock.patch("gn3.computations.biweight.subprocess.check_output") - def test_calculate_biweight_corr(self, mock_check_output): - """test for calculate_biweight_corr func""" - mock_check_output.return_value = "0.1 0.5" - results = calculate_biweight_corr(command="Rscript", - path_to_script="./r_script.R", - trait_vals=[ - 1.2, 1.1, 1.9], - target_vals=[1.9, 0.4, 1.1]) - - self.assertEqual(results, (0.1, 0.5)) diff --git a/tests/unit/computations/test_correlation.py b/tests/unit/computations/test_correlation.py index fc52ec1..96d9c6d 100644 --- a/tests/unit/computations/test_correlation.py +++ b/tests/unit/computations/test_correlation.py @@ -5,7 +5,6 @@ from unittest import mock from collections import namedtuple from gn3.computations.correlations import normalize_values -from gn3.computations.correlations import do_bicor from gn3.computations.correlations import compute_sample_r_correlation from gn3.computations.correlations import compute_all_sample_correlation from gn3.computations.correlations import filter_shared_sample_keys @@ -98,16 +97,6 @@ class TestCorrelation(TestCase): self.assertEqual(results, expected_results) - @mock.patch("gn3.computations.correlations.calculate_biweight_corr") - def test_bicor(self, mock_biweight): - """Test for doing biweight mid correlation """ - mock_biweight.return_value = (1.0, 0.0) - - results = do_bicor(x_val=[1, 2, 3], y_val=[4, 5, 6]) - - self.assertEqual(results, (1.0, 0.0) - ) - @mock.patch("gn3.computations.correlations.compute_corr_coeff_p_value") @mock.patch("gn3.computations.correlations.normalize_values") def test_compute_sample_r_correlation(self, norm_vals, compute_corr): -- cgit v1.2.3 From 14c699094a39ee2b18a26c990c0bf81d811cc93f Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 04:52:02 +0300 Subject: Move the partial_correlations module to gn3.computations * Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Move the partial_correlations.py module to the gn3.computations module, since it contains the computations for partial correlations. --- gn3/computations/partial_correlations.py | 124 +++++++++++++++++++++++++++++++ gn3/partial_correlations.py | 124 ------------------------------- 2 files changed, 124 insertions(+), 124 deletions(-) create mode 100644 gn3/computations/partial_correlations.py delete mode 100644 gn3/partial_correlations.py (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py new file mode 100644 index 0000000..1fb0ccc --- /dev/null +++ b/gn3/computations/partial_correlations.py @@ -0,0 +1,124 @@ +""" +This module deals with partial correlations. + +It is an attempt to migrate over the partial correlations feature from +GeneNetwork1. +""" + +from functools import reduce +from typing import Any, Tuple, Sequence + +def control_samples(controls: Sequence[dict], sampleslist: Sequence[str]): + """ + Fetches data for the control traits. + + This migrates `web/webqtl/correlation/correlationFunction.controlStrain` in + GN1, with a few modifications to the arguments passed in. + + PARAMETERS: + controls: A map of sample names to trait data. Equivalent to the `cvals` + value in the corresponding source function in GN1. + sampleslist: A list of samples. Equivalent to `strainlst` in the + corresponding source function in GN1 + """ + def __process_control__(trait_data): + def __process_sample__(acc, sample): + if sample in trait_data["data"].keys(): + sample_item = trait_data["data"][sample] + val = sample_item["value"] + if val is not None: + return ( + acc[0] + (sample,), + acc[1] + (val,), + acc[2] + (sample_item["variance"],)) + return acc + return reduce( + __process_sample__, sampleslist, (tuple(), tuple(), tuple())) + + return reduce( + lambda acc, item: ( + acc[0] + (item[0],), + acc[1] + (item[1],), + acc[2] + (item[2],), + acc[3] + (len(item[0]),), + ), + [__process_control__(trait_data) for trait_data in controls], + (tuple(), tuple(), tuple(), tuple())) + +def dictify_by_samples(samples_vals_vars: Sequence[Sequence]) -> Sequence[dict]: + """ + Build a sequence of dictionaries from a sequence of separate sequences of + samples, values and variances. + + This is a partial migration of + `web.webqtl.correlation.correlationFunction.fixStrains` function in GN1. + This implementation extracts code that will find common use, and that will + find use in more than one place. + """ + return tuple( + { + sample: {"sample_name": sample, "value": val, "variance": var} + for sample, val, var in zip(*trait_line) + } for trait_line in zip(*(samples_vals_vars[0:3]))) + +def fix_samples(primary_trait: dict, control_traits: Sequence[dict]) -> Sequence[Sequence[Any]]: + """ + Corrects sample_names, values and variance such that they all contain only + those samples that are common to the reference trait and all control traits. + + This is a partial migration of the + `web.webqtl.correlation.correlationFunction.fixStrain` function in GN1. + """ + primary_samples = tuple( + present[0] for present in + ((sample, all(sample in control.keys() for control in control_traits)) + for sample in primary_trait.keys()) + if present[1]) + control_vals_vars: tuple = reduce( + lambda acc, x: (acc[0] + (x[0],), acc[1] + (x[1],)), + ((item["value"], item["variance"]) + for sublist in [tuple(control.values()) for control in control_traits] + for item in sublist), + (tuple(), tuple())) + return ( + primary_samples, + tuple(primary_trait[sample]["value"] for sample in primary_samples), + control_vals_vars[0], + tuple(primary_trait[sample]["variance"] for sample in primary_samples), + control_vals_vars[1]) + +def find_identical_traits( + primary_name: str, primary_value: float, control_names: Tuple[str, ...], + control_values: Tuple[float, ...]) -> Tuple[str, ...]: + """ + Find traits that have the same value when the values are considered to + 3 decimal places. + + This is a migration of the + `web.webqtl.correlation.correlationFunction.findIdenticalTraits` function in + GN1. + """ + def __merge_identicals__( + acc: Tuple[str, ...], + ident: Tuple[str, Tuple[str, ...]]) -> Tuple[str, ...]: + return acc + ident[1] + + def __dictify_controls__(acc, control_item): + ckey = "{:.3f}".format(control_item[0]) + return {**acc, ckey: acc.get(ckey, tuple()) + (control_item[1],)} + + return (reduce(## for identical control traits + __merge_identicals__, + (item for item in reduce(# type: ignore[var-annotated] + __dictify_controls__, zip(control_values, control_names), + {}).items() if len(item[1]) > 1), + tuple()) + or + reduce(## If no identical control traits, try primary and controls + __merge_identicals__, + (item for item in reduce(# type: ignore[var-annotated] + __dictify_controls__, + zip((primary_value,) + control_values, + (primary_name,) + control_names), {}).items() + if len(item[1]) > 1), + tuple())) diff --git a/gn3/partial_correlations.py b/gn3/partial_correlations.py deleted file mode 100644 index 1fb0ccc..0000000 --- a/gn3/partial_correlations.py +++ /dev/null @@ -1,124 +0,0 @@ -""" -This module deals with partial correlations. - -It is an attempt to migrate over the partial correlations feature from -GeneNetwork1. -""" - -from functools import reduce -from typing import Any, Tuple, Sequence - -def control_samples(controls: Sequence[dict], sampleslist: Sequence[str]): - """ - Fetches data for the control traits. - - This migrates `web/webqtl/correlation/correlationFunction.controlStrain` in - GN1, with a few modifications to the arguments passed in. - - PARAMETERS: - controls: A map of sample names to trait data. Equivalent to the `cvals` - value in the corresponding source function in GN1. - sampleslist: A list of samples. Equivalent to `strainlst` in the - corresponding source function in GN1 - """ - def __process_control__(trait_data): - def __process_sample__(acc, sample): - if sample in trait_data["data"].keys(): - sample_item = trait_data["data"][sample] - val = sample_item["value"] - if val is not None: - return ( - acc[0] + (sample,), - acc[1] + (val,), - acc[2] + (sample_item["variance"],)) - return acc - return reduce( - __process_sample__, sampleslist, (tuple(), tuple(), tuple())) - - return reduce( - lambda acc, item: ( - acc[0] + (item[0],), - acc[1] + (item[1],), - acc[2] + (item[2],), - acc[3] + (len(item[0]),), - ), - [__process_control__(trait_data) for trait_data in controls], - (tuple(), tuple(), tuple(), tuple())) - -def dictify_by_samples(samples_vals_vars: Sequence[Sequence]) -> Sequence[dict]: - """ - Build a sequence of dictionaries from a sequence of separate sequences of - samples, values and variances. - - This is a partial migration of - `web.webqtl.correlation.correlationFunction.fixStrains` function in GN1. - This implementation extracts code that will find common use, and that will - find use in more than one place. - """ - return tuple( - { - sample: {"sample_name": sample, "value": val, "variance": var} - for sample, val, var in zip(*trait_line) - } for trait_line in zip(*(samples_vals_vars[0:3]))) - -def fix_samples(primary_trait: dict, control_traits: Sequence[dict]) -> Sequence[Sequence[Any]]: - """ - Corrects sample_names, values and variance such that they all contain only - those samples that are common to the reference trait and all control traits. - - This is a partial migration of the - `web.webqtl.correlation.correlationFunction.fixStrain` function in GN1. - """ - primary_samples = tuple( - present[0] for present in - ((sample, all(sample in control.keys() for control in control_traits)) - for sample in primary_trait.keys()) - if present[1]) - control_vals_vars: tuple = reduce( - lambda acc, x: (acc[0] + (x[0],), acc[1] + (x[1],)), - ((item["value"], item["variance"]) - for sublist in [tuple(control.values()) for control in control_traits] - for item in sublist), - (tuple(), tuple())) - return ( - primary_samples, - tuple(primary_trait[sample]["value"] for sample in primary_samples), - control_vals_vars[0], - tuple(primary_trait[sample]["variance"] for sample in primary_samples), - control_vals_vars[1]) - -def find_identical_traits( - primary_name: str, primary_value: float, control_names: Tuple[str, ...], - control_values: Tuple[float, ...]) -> Tuple[str, ...]: - """ - Find traits that have the same value when the values are considered to - 3 decimal places. - - This is a migration of the - `web.webqtl.correlation.correlationFunction.findIdenticalTraits` function in - GN1. - """ - def __merge_identicals__( - acc: Tuple[str, ...], - ident: Tuple[str, Tuple[str, ...]]) -> Tuple[str, ...]: - return acc + ident[1] - - def __dictify_controls__(acc, control_item): - ckey = "{:.3f}".format(control_item[0]) - return {**acc, ckey: acc.get(ckey, tuple()) + (control_item[1],)} - - return (reduce(## for identical control traits - __merge_identicals__, - (item for item in reduce(# type: ignore[var-annotated] - __dictify_controls__, zip(control_values, control_names), - {}).items() if len(item[1]) > 1), - tuple()) - or - reduce(## If no identical control traits, try primary and controls - __merge_identicals__, - (item for item in reduce(# type: ignore[var-annotated] - __dictify_controls__, - zip((primary_value,) + control_values, - (primary_name,) + control_names), {}).items() - if len(item[1]) > 1), - tuple())) -- cgit v1.2.3 From 28b0ced4ec13451c5c7323ed5135d126f296836a Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 04:55:30 +0300 Subject: Move the function to computations module Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * The function `batch_computed_tissue_correlation` is a pure computations function with no expressions accessing the database, as far as I can tell, therefore, this commit moves the function over to the gn3.computations.partial_correlations module that holds the pure computation functions. --- gn3/computations/partial_correlations.py | 8 ++++++++ gn3/db/correlations.py | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 1fb0ccc..b3de31c 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -122,3 +122,11 @@ def find_identical_traits( (primary_name,) + control_names), {}).items() if len(item[1]) > 1), tuple())) + +def batch_computed_tissue_correlation( + trait_value: str, symbol_value_dict: dict, + method: str = "pearson") -> Tuple[dict, dict]: + """ + `web.webqtl.correlation.correlationFunction.batchCalTissueCorr`""" + raise Exception("Not implemented!") + return ({}, {}) diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index 54d3079..f43b8a5 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -281,14 +281,6 @@ def fetch_gene_symbol_tissue_value_dict_for_trait( return fetch_gene_symbol_tissue_value_dict(xref_info[0], xref_info[2], conn) return {} -def batch_computed_tissue_correlation( - trait_value: str, symbol_value_dict: dict, - method: str = "pearson") -> Tuple[dict, dict]: - """ - `web.webqtl.correlation.correlationFunction.batchCalTissueCorr`""" - raise Exception("Not implemented!") - return ({}, {}) - def correlations_of_all_tissue_traits( trait_symbol: str, probeset_freeze_id: int, method: str, conn: Any) -> Tuple[dict, dict]: -- cgit v1.2.3 From 847a5e0656ed686a0541e47958a845a0d3725daf Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 06:34:19 +0300 Subject: Implement `tissue_correlation` function Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: New function (tissue_correlation) * tests/unit/test_partial_correlations.py -> tests/unit/computations/test_partial_correlations.py: Move module. Implement tests for new function Migrate the `cal_tissue_corr` function embedded in the `web.webqtl.correlation.correlationFunction.batchCalTissueCorr` function in GN1 and implement tests to ensure it works correctly. --- gn3/computations/partial_correlations.py | 27 +++ .../unit/computations/test_partial_correlations.py | 258 +++++++++++++++++++++ tests/unit/test_partial_correlations.py | 211 ----------------- 3 files changed, 285 insertions(+), 211 deletions(-) create mode 100644 tests/unit/computations/test_partial_correlations.py delete mode 100644 tests/unit/test_partial_correlations.py (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index b3de31c..e73edfd 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -7,6 +7,7 @@ GeneNetwork1. from functools import reduce from typing import Any, Tuple, Sequence +from scipy.stats import pearsonr, spearmanr def control_samples(controls: Sequence[dict], sampleslist: Sequence[str]): """ @@ -123,6 +124,32 @@ def find_identical_traits( if len(item[1]) > 1), tuple())) +def tissue_correlation( + primary_trait_values: Tuple[float, ...], + target_trait_values: Tuple[float, ...], + method: str) -> Tuple[float, float]: + """ + Compute the correlation between the primary trait values, and the values of + a single target value. + + This migrates the `cal_tissue_corr` function embedded in the larger + `web.webqtl.correlation.correlationFunction.batchCalTissueCorr` function in + GeneNetwork1. + """ + def spearman_corr(*args): + result = spearmanr(*args) + return (result.correlation, result.pvalue) + + method_fns = {"pearson": pearsonr, "spearman": spearman_corr} + + assert len(primary_trait_values) == len(target_trait_values), ( + "The lengths of the `primary_trait_values` and `target_trait_values` " + "must be equal") + assert method in method_fns.keys(), ( + "Method must be one of: {}".format(",".join(method_fns.keys()))) + + return method_fns[method](primary_trait_values, target_trait_values) + def batch_computed_tissue_correlation( trait_value: str, symbol_value_dict: dict, method: str = "pearson") -> Tuple[dict, dict]: diff --git a/tests/unit/computations/test_partial_correlations.py b/tests/unit/computations/test_partial_correlations.py new file mode 100644 index 0000000..7ff8b80 --- /dev/null +++ b/tests/unit/computations/test_partial_correlations.py @@ -0,0 +1,258 @@ +"""Module contains tests for gn3.partial_correlations""" + +from unittest import TestCase +from gn3.computations.partial_correlations import * + +sampleslist = ["B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"] +control_traits = ( + { + "mysqlid": 36688172, + "data": { + "B6cC3-1": { + "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, + "ndata": None}, + "BXD1": { + "sample_name": "BXD1", "value": 7.77141, "variance": None, + "ndata": None}, + "BXD12": { + "sample_name": "BXD12", "value": 8.39265, "variance": None, + "ndata": None}, + "BXD16": { + "sample_name": "BXD16", "value": 8.17443, "variance": None, + "ndata": None}, + "BXD19": { + "sample_name": "BXD19", "value": 8.30401, "variance": None, + "ndata": None}, + "BXD2": { + "sample_name": "BXD2", "value": 7.80944, "variance": None, + "ndata": None}}}, + { + "mysqlid": 36688172, + "data": { + "B6cC3-21": { + "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, + "ndata": None}, + "BXD21": { + "sample_name": "BXD1", "value": 7.77141, "variance": None, + "ndata": None}, + "BXD12": { + "sample_name": "BXD12", "value": 8.39265, "variance": None, + "ndata": None}, + "BXD16": { + "sample_name": "BXD16", "value": 8.17443, "variance": None, + "ndata": None}, + "BXD19": { + "sample_name": "BXD19", "value": 8.30401, "variance": None, + "ndata": None}, + "BXD2": { + "sample_name": "BXD2", "value": 7.80944, "variance": None, + "ndata": None}}}, + { + "mysqlid": 36688172, + "data": { + "B6cC3-1": { + "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, + "ndata": None}, + "BXD1": { + "sample_name": "BXD1", "value": 7.77141, "variance": None, + "ndata": None}, + "BXD12": { + "sample_name": "BXD12", "value": None, "variance": None, + "ndata": None}, + "BXD16": { + "sample_name": "BXD16", "value": None, "variance": None, + "ndata": None}, + "BXD19": { + "sample_name": "BXD19", "value": None, "variance": None, + "ndata": None}, + "BXD2": { + "sample_name": "BXD2", "value": 7.80944, "variance": None, + "ndata": None}}}) + +dictified_control_samples = ( + {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, "variance": None}, + "BXD1": {"sample_name": "BXD1", "value": 7.77141, "variance": None}, + "BXD12": {"sample_name": "BXD12", "value": 8.39265, "variance": None}, + "BXD16": {"sample_name": "BXD16", "value": 8.17443, "variance": None}, + "BXD19": {"sample_name": "BXD19", "value": 8.30401, "variance": None}, + "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}, + {"BXD12": {"sample_name": "BXD12", "value": 8.39265, "variance": None}, + "BXD16": {"sample_name": "BXD16", "value": 8.17443, "variance": None}, + "BXD19": {"sample_name": "BXD19", "value": 8.30401, "variance": None}, + "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}, + {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, "variance": None}, + "BXD1": {"sample_name": "BXD1", "value": 7.77141, "variance": None}, + "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}) + +class TestPartialCorrelations(TestCase): + """Class for testing partial correlations computation functions""" + + def test_control_samples(self): + """Test that the control_samples works as expected.""" + self.assertEqual( + control_samples(control_traits, sampleslist), + ((("B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"), + ("BXD12", "BXD16", "BXD19", "BXD2"), + ("B6cC3-1", "BXD1", "BXD2")), + ((7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944), + (8.39265, 8.17443, 8.30401, 7.80944), + (7.51879, 7.77141, 7.80944)), + ((None, None, None, None, None, None), (None, None, None, None), + (None, None, None)), + (6, 4, 3))) + + def test_dictify_by_samples(self): + """ + Test that `dictify_by_samples` generates the appropriate dict + + Given: + a sequence of sequences with sample names, values and variances, as + in the output of `gn3.partial_correlations.control_samples` or + the output of `gn3.db.traits.export_informative` + When: + the sequence is passed as an argument into the + `gn3.partial_correlations.dictify_by_sample` + Then: + return a sequence of dicts with keys being the values of the sample + names, and each of who's values being sub-dicts with the keys + 'sample_name', 'value' and 'variance' whose values correspond to the + values passed in. + """ + self.assertEqual( + dictify_by_samples( + ((("B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"), + ("BXD12", "BXD16", "BXD19", "BXD2"), + ("B6cC3-1", "BXD1", "BXD2")), + ((7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944), + (8.39265, 8.17443, 8.30401, 7.80944), + (7.51879, 7.77141, 7.80944)), + ((None, None, None, None, None, None), (None, None, None, None), + (None, None, None)), + (6, 4, 3))), + dictified_control_samples) + + def test_fix_samples(self): + """ + Test that `fix_samples` returns only the common samples + + Given: + - A primary trait + - A sequence of control samples + When: + - The two arguments are passed to `fix_samples` + Then: + - Only the names of the samples present in the primary trait that + are also present in ALL the control traits are present in the + return value + - Only the values of the samples present in the primary trait that + are also present in ALL the control traits are present in the + return value + - ALL the values for ALL the control traits are present in the + return value + - Only the variances of the samples present in the primary trait + that are also present in ALL the control traits are present in the + return value + - ALL the variances for ALL the control traits are present in the + return value + - The return value is a tuple of the above items, in the following + order: + ((sample_names, ...), (primary_trait_values, ...), + (control_traits_values, ...), (primary_trait_variances, ...) + (control_traits_variances, ...)) + """ + self.assertEqual( + fix_samples( + {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, + "variance": None}, + "BXD1": {"sample_name": "BXD1", "value": 7.77141, + "variance": None}, + "BXD2": {"sample_name": "BXD2", "value": 7.80944, + "variance": None}}, + dictified_control_samples), + (("BXD2",), (7.80944,), + (7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944, 8.39265, + 8.17443, 8.30401, 7.80944, 7.51879, 7.77141, 7.80944), + (None,), + (None, None, None, None, None, None, None, None, None, None, None, + None, None))) + + def test_find_identical_traits(self): + """ + Test `gn3.partial_correlations.find_identical_traits`. + + Given: + - the name of a primary trait + - the value of a primary trait + - a sequence of names of control traits + - a sequence of values of control traits + When: + - the arguments above are passed to the `find_identical_traits` + function + Then: + - Return ALL trait names that have the same value when up to three + decimal places are considered + """ + for primn, primv, contn, contv, expected in ( + ("pt", 12.98395, ("ct0", "ct1", "ct2"), + (0.1234, 2.3456, 3.4567), tuple()), + ("pt", 12.98395, ("ct0", "ct1", "ct2"), + (12.98354, 2.3456, 3.4567), ("pt", "ct0")), + ("pt", 12.98395, ("ct0", "ct1", "ct2", "ct3"), + (0.1234, 2.3456, 0.1233, 4.5678), ("ct0", "ct2")) + ): + with self.subTest( + primary_name=primn, primary_value=primv, + control_names=contn, control_values=contv): + self.assertEqual( + find_identical_traits(primn, primv, contn, contv), expected) + + def test_tissue_correlation_error(self): + """ + Test that `tissue_correlation` raises specific exceptions for particular + error conditions. + """ + for primary, target, method, error, error_msg in ( + ((1,2,3), (4,5,6,7), "pearson", + AssertionError, + ( + "The lengths of the `primary_trait_values` and " + "`target_trait_values` must be equal")), + ((1,2,3), (4,5,6,7), "spearman", + AssertionError, + ( + "The lengths of the `primary_trait_values` and " + "`target_trait_values` must be equal")), + ((1,2,3,4), (5,6,7), "pearson", + AssertionError, + ( + "The lengths of the `primary_trait_values` and " + "`target_trait_values` must be equal")), + ((1,2,3,4), (5,6,7), "spearman", + AssertionError, + ( + "The lengths of the `primary_trait_values` and " + "`target_trait_values` must be equal")), + ((1,2,3), (4,5,6), "nonexistentmethod", + AssertionError, + ( + "Method must be one of: pearson, spearman"))): + with self.subTest(primary=primary, target=target, method=method): + with self.assertRaises(error, msg=error_msg): + tissue_correlation(primary, target, method) + + def test_tissue_correlation(self): + """ + Test that the correct correlation values are computed for the given: + - primary trait + - target trait + - method + """ + for primary, target, method, expected in ( + ((12.34, 18.36, 42.51), (37.25, 46.25, 46.56), "pearson", + (0.6761779252651052, 0.5272701133657985)), + ((1, 2, 3, 4, 5), (5, 6, 7, 8, 7), "spearman", + (0.8207826816681233, 0.08858700531354381)) + ): + with self.subTest(primary=primary, target=target, method=method): + self.assertEqual( + tissue_correlation(primary, target, method), expected) diff --git a/tests/unit/test_partial_correlations.py b/tests/unit/test_partial_correlations.py deleted file mode 100644 index 60e54c1..0000000 --- a/tests/unit/test_partial_correlations.py +++ /dev/null @@ -1,211 +0,0 @@ -"""Module contains tests for gn3.partial_correlations""" - -from unittest import TestCase -from gn3.partial_correlations import ( - fix_samples, - control_samples, - dictify_by_samples, - find_identical_traits) - -sampleslist = ["B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"] -control_traits = ( - { - "mysqlid": 36688172, - "data": { - "B6cC3-1": { - "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, - "ndata": None}, - "BXD1": { - "sample_name": "BXD1", "value": 7.77141, "variance": None, - "ndata": None}, - "BXD12": { - "sample_name": "BXD12", "value": 8.39265, "variance": None, - "ndata": None}, - "BXD16": { - "sample_name": "BXD16", "value": 8.17443, "variance": None, - "ndata": None}, - "BXD19": { - "sample_name": "BXD19", "value": 8.30401, "variance": None, - "ndata": None}, - "BXD2": { - "sample_name": "BXD2", "value": 7.80944, "variance": None, - "ndata": None}}}, - { - "mysqlid": 36688172, - "data": { - "B6cC3-21": { - "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, - "ndata": None}, - "BXD21": { - "sample_name": "BXD1", "value": 7.77141, "variance": None, - "ndata": None}, - "BXD12": { - "sample_name": "BXD12", "value": 8.39265, "variance": None, - "ndata": None}, - "BXD16": { - "sample_name": "BXD16", "value": 8.17443, "variance": None, - "ndata": None}, - "BXD19": { - "sample_name": "BXD19", "value": 8.30401, "variance": None, - "ndata": None}, - "BXD2": { - "sample_name": "BXD2", "value": 7.80944, "variance": None, - "ndata": None}}}, - { - "mysqlid": 36688172, - "data": { - "B6cC3-1": { - "sample_name": "B6cC3-1", "value": 7.51879, "variance": None, - "ndata": None}, - "BXD1": { - "sample_name": "BXD1", "value": 7.77141, "variance": None, - "ndata": None}, - "BXD12": { - "sample_name": "BXD12", "value": None, "variance": None, - "ndata": None}, - "BXD16": { - "sample_name": "BXD16", "value": None, "variance": None, - "ndata": None}, - "BXD19": { - "sample_name": "BXD19", "value": None, "variance": None, - "ndata": None}, - "BXD2": { - "sample_name": "BXD2", "value": 7.80944, "variance": None, - "ndata": None}}}) - -dictified_control_samples = ( - {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, "variance": None}, - "BXD1": {"sample_name": "BXD1", "value": 7.77141, "variance": None}, - "BXD12": {"sample_name": "BXD12", "value": 8.39265, "variance": None}, - "BXD16": {"sample_name": "BXD16", "value": 8.17443, "variance": None}, - "BXD19": {"sample_name": "BXD19", "value": 8.30401, "variance": None}, - "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}, - {"BXD12": {"sample_name": "BXD12", "value": 8.39265, "variance": None}, - "BXD16": {"sample_name": "BXD16", "value": 8.17443, "variance": None}, - "BXD19": {"sample_name": "BXD19", "value": 8.30401, "variance": None}, - "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}, - {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, "variance": None}, - "BXD1": {"sample_name": "BXD1", "value": 7.77141, "variance": None}, - "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}) - -class TestPartialCorrelations(TestCase): - """Class for testing partial correlations computation functions""" - - def test_control_samples(self): - """Test that the control_samples works as expected.""" - self.assertEqual( - control_samples(control_traits, sampleslist), - ((("B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"), - ("BXD12", "BXD16", "BXD19", "BXD2"), - ("B6cC3-1", "BXD1", "BXD2")), - ((7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944), - (8.39265, 8.17443, 8.30401, 7.80944), - (7.51879, 7.77141, 7.80944)), - ((None, None, None, None, None, None), (None, None, None, None), - (None, None, None)), - (6, 4, 3))) - - def test_dictify_by_samples(self): - """ - Test that `dictify_by_samples` generates the appropriate dict - - Given: - a sequence of sequences with sample names, values and variances, as - in the output of `gn3.partial_correlations.control_samples` or - the output of `gn3.db.traits.export_informative` - When: - the sequence is passed as an argument into the - `gn3.partial_correlations.dictify_by_sample` - Then: - return a sequence of dicts with keys being the values of the sample - names, and each of who's values being sub-dicts with the keys - 'sample_name', 'value' and 'variance' whose values correspond to the - values passed in. - """ - self.assertEqual( - dictify_by_samples( - ((("B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"), - ("BXD12", "BXD16", "BXD19", "BXD2"), - ("B6cC3-1", "BXD1", "BXD2")), - ((7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944), - (8.39265, 8.17443, 8.30401, 7.80944), - (7.51879, 7.77141, 7.80944)), - ((None, None, None, None, None, None), (None, None, None, None), - (None, None, None)), - (6, 4, 3))), - dictified_control_samples) - - def test_fix_samples(self): - """ - Test that `fix_samples` returns only the common samples - - Given: - - A primary trait - - A sequence of control samples - When: - - The two arguments are passed to `fix_samples` - Then: - - Only the names of the samples present in the primary trait that - are also present in ALL the control traits are present in the - return value - - Only the values of the samples present in the primary trait that - are also present in ALL the control traits are present in the - return value - - ALL the values for ALL the control traits are present in the - return value - - Only the variances of the samples present in the primary trait - that are also present in ALL the control traits are present in the - return value - - ALL the variances for ALL the control traits are present in the - return value - - The return value is a tuple of the above items, in the following - order: - ((sample_names, ...), (primary_trait_values, ...), - (control_traits_values, ...), (primary_trait_variances, ...) - (control_traits_variances, ...)) - """ - self.assertEqual( - fix_samples( - {"B6cC3-1": {"sample_name": "B6cC3-1", "value": 7.51879, - "variance": None}, - "BXD1": {"sample_name": "BXD1", "value": 7.77141, - "variance": None}, - "BXD2": {"sample_name": "BXD2", "value": 7.80944, - "variance": None}}, - dictified_control_samples), - (("BXD2",), (7.80944,), - (7.51879, 7.77141, 8.39265, 8.17443, 8.30401, 7.80944, 8.39265, - 8.17443, 8.30401, 7.80944, 7.51879, 7.77141, 7.80944), - (None,), - (None, None, None, None, None, None, None, None, None, None, None, - None, None))) - - def test_find_identical_traits(self): - """ - Test `gn3.partial_correlations.find_identical_traits`. - - Given: - - the name of a primary trait - - the value of a primary trait - - a sequence of names of control traits - - a sequence of values of control traits - When: - - the arguments above are passed to the `find_identical_traits` - function - Then: - - Return ALL trait names that have the same value when up to three - decimal places are considered - """ - for primn, primv, contn, contv, expected in ( - ("pt", 12.98395, ("ct0", "ct1", "ct2"), - (0.1234, 2.3456, 3.4567), tuple()), - ("pt", 12.98395, ("ct0", "ct1", "ct2"), - (12.98354, 2.3456, 3.4567), ("pt", "ct0")), - ("pt", 12.98395, ("ct0", "ct1", "ct2", "ct3"), - (0.1234, 2.3456, 0.1233, 4.5678), ("ct0", "ct2")) - ): - with self.subTest( - primary_name=primn, primary_value=primv, - control_names=contn, control_values=contv): - self.assertEqual( - find_identical_traits(primn, primv, contn, contv), expected) -- cgit v1.2.3 From 5a9db2162a0a694a76a256996bb296ff06c75126 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 06:59:57 +0300 Subject: Move `correlations_of_all_tissue_traits` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: new function (`correlations_of_all_tissue_traits`). * gn3/db/correlations.py: delete function (`correlations_of_all_tissue_traits`). Move the function to `gn3.computations.partial_correlations` module and comment out the db-access code. Rework it to receive, as arguments, the data it previously fetched from the database, and add comments on future rework to get the function working again. --- gn3/computations/partial_correlations.py | 27 +++++++++++++++++++++++++++ gn3/db/correlations.py | 20 -------------------- 2 files changed, 27 insertions(+), 20 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index e73edfd..4ba2ba4 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -157,3 +157,30 @@ def batch_computed_tissue_correlation( `web.webqtl.correlation.correlationFunction.batchCalTissueCorr`""" raise Exception("Not implemented!") return ({}, {}) + +def correlations_of_all_tissue_traits( + primary_trait_symbol_value_dict: dict, symbol_value_dict: dict, + method: str) -> Tuple[dict, dict]: + """ + Computes and returns the correlation of all tissue traits. + + This is a migration of the + `web.webqtl.correlation.correlationFunction.calculateCorrOfAllTissueTrait` + function in GeneNetwork1. + """ + # The section below existed in the original function, but with the migration + # and the proposed rework (in the near future), the values from the database + # should be passed into this function, rather than have the function fetch + # the data for itself. + # --------------------------------------------------- + # primary_trait_symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( + # (trait_symbol,), probeset_freeze_id, conn) + # primary_trait_values = primary_trait_symbol_value_dict.vlaues()[0] + # symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( + # tuple(), probeset_freeze_id, conn) + # --------------------------------------------------- + # We might end up actually getting rid of this function all together as the + # rework is done. + primary_trait_values = primary_trait_symbol_value_dict.values()[0] + return batch_computed_tissue_correlation( + primary_trait_values, symbol_value_dict, method) diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index f43b8a5..39ed499 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -281,26 +281,6 @@ def fetch_gene_symbol_tissue_value_dict_for_trait( return fetch_gene_symbol_tissue_value_dict(xref_info[0], xref_info[2], conn) return {} -def correlations_of_all_tissue_traits( - trait_symbol: str, probeset_freeze_id: int, - method: str, conn: Any) -> Tuple[dict, dict]: - """ - Computes and returns the correlation of all tissue traits. - - This is a migration of the - `web.webqtl.correlation.correlationFunction.calculateCorrOfAllTissueTrait` - function in GeneNetwork1. - """ - primary_trait_symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( - (trait_symbol,), probeset_freeze_id, conn) - primary_trait_value = primary_trait_symbol_value_dict.vlaues()[0] - symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( - tuple(), probeset_freeze_id, conn) - if method == "1": - return batch_computed_tissue_correlation( - primaryTraitValue,SymbolValueDict,method='spearman') - return batch_computed_tissue_correlation(primaryTraitValue,SymbolValueDict) - def build_temporary_tissue_correlations_table( trait_symbol: str, probeset_freeze_id: int, method: str, return_number: int, conn: Any) -> str: -- cgit v1.2.3 From 8e3628129cdb8b1663dd2d63ce6c012335d73236 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 07:50:37 +0300 Subject: Complete implementation of `batch_computed_tissue_correlation` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Complete the implementation of the `batch_computed_tissue_correlation` function --- gn3/computations/partial_correlations.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 4ba2ba4..d095185 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -151,12 +151,17 @@ def tissue_correlation( return method_fns[method](primary_trait_values, target_trait_values) def batch_computed_tissue_correlation( - trait_value: str, symbol_value_dict: dict, - method: str = "pearson") -> Tuple[dict, dict]: + primary_trait_values: Tuple[float, ...], target_traits_dict: dict, + method: str) -> Tuple[dict, dict]: + """ + This is a migration of the + `web.webqtl.correlation.correlationFunction.batchCalTissueCorr` function in + GeneNetwork1 """ - `web.webqtl.correlation.correlationFunction.batchCalTissueCorr`""" - raise Exception("Not implemented!") - return ({}, {}) + def __corr__(acc, target): + corr = tissue_correlation(primary_trait_values, target[1], method) + return ({**acc[0], target[0]: corr[0]}, {**acc[0], target[1]: corr[1]}) + return reduce(__corr__, target_traits_dict.items(), ({}, {})) def correlations_of_all_tissue_traits( primary_trait_symbol_value_dict: dict, symbol_value_dict: dict, -- cgit v1.2.3 From 773c0896ccbed12170be2b5aed4554ab86d923b5 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 08:00:27 +0300 Subject: Complete `build_temporary_tissue_correlations_table` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: Remove comments after updating usage of the function at call point * gn3/db/correlations.py: Complete the implementation of the `build_temporary_tissue_correlations_table` function --- gn3/computations/partial_correlations.py | 13 ------------ gn3/db/correlations.py | 36 +++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 16 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index d095185..5777a0b 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -173,19 +173,6 @@ def correlations_of_all_tissue_traits( `web.webqtl.correlation.correlationFunction.calculateCorrOfAllTissueTrait` function in GeneNetwork1. """ - # The section below existed in the original function, but with the migration - # and the proposed rework (in the near future), the values from the database - # should be passed into this function, rather than have the function fetch - # the data for itself. - # --------------------------------------------------- - # primary_trait_symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( - # (trait_symbol,), probeset_freeze_id, conn) - # primary_trait_values = primary_trait_symbol_value_dict.vlaues()[0] - # symbol_value_dict = fetch_gene_symbol_tissue_value_dict_for_trait( - # tuple(), probeset_freeze_id, conn) - # --------------------------------------------------- - # We might end up actually getting rid of this function all together as the - # rework is done. primary_trait_values = primary_trait_symbol_value_dict.values()[0] return batch_computed_tissue_correlation( primary_trait_values, symbol_value_dict, method) diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index 39ed499..28f050a 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -290,10 +290,40 @@ def build_temporary_tissue_correlations_table( This is a migration of the `web.webqtl.correlation.CorrelationPage.getTempTissueCorrTable` function in GeneNetwork1.""" + # We should probably pass the `correlations_of_all_tissue_traits` function + # as an argument to this function and get rid of the two lines immediately + # following this comment. + from gn3.computations.partial_correlations import correlations_of_all_tissue_traits symbol_corr_dict, symbol_p_value_dict = correlations_of_all_tissue_traits( - trait_symbol, probeset_freeze_id, method, conn) - raise Exception("Unimplemented!!!") - return "" + fetch_gene_symbol_tissue_value_dict_for_trait( + (trait_symbol,), probeset_freeze_id, conn), + fetch_gene_symbol_tissue_value_dict_for_trait( + tuple(), probeset_freeze_id, conn), + method) + + symbol_corr_list = sorted( + symbol_corr_dict.items(), + key=compare_tissue_correlation_absolute_values) + + temp_table_name = f"TOPTISSUE{random_string(8)}" + create_query = ( + "CREATE TEMPORARY TABLE {temp_table_name}" + "(Symbol varchar(100) PRIMARY KEY, Correlation float, PValue float)") + insert_query = ( + f"INSERT INTO {temp_table_name}(Symbol, Correlation, PValue) " + " VALUES (%(symbol)s, %(correlation)s, %(pvalue)s)") + + with conn.cursor() as cursor: + cursor.execute(create_query) + cursor.execute( + insert_query, + tuple({ + "symbol": symbol, + "correlation": corr, + "pvalue": symbol_p_value_dict[symbol] + } for symbol, corr in symbol_corr_list[0: 2 * return_number])) + + return temp_table_name def fetch_tissue_correlations( dataset: dict, trait_symbol: str, probeset_freeze_id: int, method: str, -- cgit v1.2.3 From 9ceb958273b8d86d220fa0d2f040fcb4a8233586 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 08:28:19 +0300 Subject: Fix linting and typing errors Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi --- gn3/computations/partial_correlations.py | 2 +- gn3/db/correlations.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 5777a0b..fce6ad2 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -173,6 +173,6 @@ def correlations_of_all_tissue_traits( `web.webqtl.correlation.correlationFunction.calculateCorrOfAllTissueTrait` function in GeneNetwork1. """ - primary_trait_values = primary_trait_symbol_value_dict.values()[0] + primary_trait_values = tuple(primary_trait_symbol_value_dict.values())[0] return batch_computed_tissue_correlation( primary_trait_values, symbol_value_dict, method) diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index d7954e5..d94759a 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -10,6 +10,8 @@ from gn3.random import random_string from gn3.data_helpers import partition_all from gn3.db.species import translate_to_mouse_gene_id +from gn3.computations.partial_correlations import correlations_of_all_tissue_traits + def get_filename(target_db_name: str, conn: Any) -> str: """ Retrieve the name of the reference database file with which correlations are @@ -275,9 +277,8 @@ def build_temporary_tissue_correlations_table( `web.webqtl.correlation.CorrelationPage.getTempTissueCorrTable` function in GeneNetwork1.""" # We should probably pass the `correlations_of_all_tissue_traits` function - # as an argument to this function and get rid of the two lines immediately + # as an argument to this function and get rid of the one call immediately # following this comment. - from gn3.computations.partial_correlations import correlations_of_all_tissue_traits symbol_corr_dict, symbol_p_value_dict = correlations_of_all_tissue_traits( fetch_gene_symbol_tissue_value_dict_for_trait( (trait_symbol,), probeset_freeze_id, conn), @@ -308,7 +309,7 @@ def build_temporary_tissue_correlations_table( return temp_table_name -def fetch_tissue_correlations( +def fetch_tissue_correlations(# pylint: disable=R0913 dataset: dict, trait_symbol: str, probeset_freeze_id: int, method: str, return_number: int, conn: Any) -> dict: """ -- cgit v1.2.3 From fed4c481eceb0ce464deee6262b96676eb869ad3 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 08:38:48 +0300 Subject: Specify ten (10) decimal places Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: specify 10 decimal places * tests/unit/computations/test_partial_correlations.py: update examples Slight differences in python implementations, possibly hardware and operating systems could cause the value of float (double) values to be different in the less significant parts of the decimal places. This commit limits the usable part of the decimals to the first 10 decimal places for now. --- gn3/computations/partial_correlations.py | 4 +++- tests/unit/computations/test_partial_correlations.py | 5 ++--- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index fce6ad2..8a00931 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -148,7 +148,9 @@ def tissue_correlation( assert method in method_fns.keys(), ( "Method must be one of: {}".format(",".join(method_fns.keys()))) - return method_fns[method](primary_trait_values, target_trait_values) + return tuple( + round(n, 10) for n in + method_fns[method](primary_trait_values, target_trait_values)) def batch_computed_tissue_correlation( primary_trait_values: Tuple[float, ...], target_traits_dict: dict, diff --git a/tests/unit/computations/test_partial_correlations.py b/tests/unit/computations/test_partial_correlations.py index ac5eb20..c4ec79a 100644 --- a/tests/unit/computations/test_partial_correlations.py +++ b/tests/unit/computations/test_partial_correlations.py @@ -254,10 +254,9 @@ class TestPartialCorrelations(TestCase): """ for primary, target, method, expected in ( ((12.34, 18.36, 42.51), (37.25, 46.25, 46.56), "pearson", - (0.6761779252651052, 0.5272701133657985)), + (0.6761779253, 0.5272701134)), ((1, 2, 3, 4, 5), (5, 6, 7, 8, 7), "spearman", - (0.8207826816681233, 0.08858700531354381)) - ): + (0.8207826817, 0.0885870053))): with self.subTest(primary=primary, target=target, method=method): self.assertEqual( tissue_correlation(primary, target, method), expected) -- cgit v1.2.3 From 5a81b7ae59702d6393e9f74a00d8394131b5192a Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 08:48:16 +0300 Subject: Explicitly round the values * Explicitly round the values to prevent issues with the type-checker --- gn3/computations/partial_correlations.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 8a00931..151143a 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -148,9 +148,8 @@ def tissue_correlation( assert method in method_fns.keys(), ( "Method must be one of: {}".format(",".join(method_fns.keys()))) - return tuple( - round(n, 10) for n in - method_fns[method](primary_trait_values, target_trait_values)) + corr, pvalue = method_fns[method](primary_trait_values, target_trait_values) + return (round(corr, 10), round(pvalue, 10)) def batch_computed_tissue_correlation( primary_trait_values: Tuple[float, ...], target_traits_dict: dict, -- cgit v1.2.3 From 856ee56890f9c10401b717579dc8c0358c7d465d Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 08:18:48 +0300 Subject: Retrieve indices of the selected samples Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: New function (good_dataset_samples_indexes). * tests/unit/computations/test_partial_correlations.py: Tests for new function (good_dataset_samples_indexes) Get the indices of the selected samples. This is a partial migration of the `web.webqtl.correlation.PartialCorrDBPage.getPartialCorrelationsFast` function in GN1. --- gn3/computations/partial_correlations.py | 15 +++++++++++++++ tests/unit/computations/test_partial_correlations.py | 13 ++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 151143a..ba4de9e 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -177,3 +177,18 @@ def correlations_of_all_tissue_traits( primary_trait_values = tuple(primary_trait_symbol_value_dict.values())[0] return batch_computed_tissue_correlation( primary_trait_values, symbol_value_dict, method) + +def good_dataset_samples_indexes( + samples: Tuple[str, ...], + samples_from_file: Tuple[str, ...]) -> Tuple[int, ...]: + """ + Return the indexes of the items in `samples_from_files` that are also found + in `samples`. + + This is a partial migration of the + `web.webqtl.correlation.PartialCorrDBPage.getPartialCorrelationsFast` + function in GeneNetwork1. + """ + return tuple(sorted( + samples_from_file.index(good) for good in + set(samples).intersection(set(samples_from_file)))) diff --git a/tests/unit/computations/test_partial_correlations.py b/tests/unit/computations/test_partial_correlations.py index c4ec79a..f7217a9 100644 --- a/tests/unit/computations/test_partial_correlations.py +++ b/tests/unit/computations/test_partial_correlations.py @@ -6,7 +6,8 @@ from gn3.computations.partial_correlations import ( control_samples, dictify_by_samples, tissue_correlation, - find_identical_traits) + find_identical_traits, + good_dataset_samples_indexes) sampleslist = ["B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"] control_traits = ( @@ -260,3 +261,13 @@ class TestPartialCorrelations(TestCase): with self.subTest(primary=primary, target=target, method=method): self.assertEqual( tissue_correlation(primary, target, method), expected) + + def test_good_dataset_samples_indexes(self): + """ + Test that `good_dataset_samples_indexes` returns correct indices. + """ + self.assertEqual( + good_dataset_samples_indexes( + ("a", "e", "i", "k"), + ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")), + (0, 4, 8, 10)) -- cgit v1.2.3 From 457f2a8473a1d44dfcb66d0c28aa1c7a3a256c85 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 10:49:35 +0300 Subject: Implement `compute_partial_correlations_fast` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Implement `compute_partial_correlations_fast` that is a partial migration of `web.webqtl.correlation.PartialCorrDBPage.getPartialCorrelationsFast` in GN1. This function will probably be reworked once the dependencies are fully migrated. It also needs tests to be added. --- gn3/computations/partial_correlations.py | 49 ++++++++++++++++++++++++++++++++ gn3/settings.py | 3 ++ 2 files changed, 52 insertions(+) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index ba4de9e..1a6868a 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -9,6 +9,9 @@ from functools import reduce from typing import Any, Tuple, Sequence from scipy.stats import pearsonr, spearmanr +from gn3.settings import TEXTDIR +from gn3.data_helpers import parse_csv_line + def control_samples(controls: Sequence[dict], sampleslist: Sequence[str]): """ Fetches data for the control traits. @@ -192,3 +195,49 @@ def good_dataset_samples_indexes( return tuple(sorted( samples_from_file.index(good) for good in set(samples).intersection(set(samples_from_file)))) + +def compute_partial_correlations_fast(# pylint: disable=[R0913, R0914] + samples, primary_vals, control_vals, database_filename, + fetched_correlations, method: str, correlation_type: str) -> Tuple[ + float, Tuple[float, ...]]: + """ + This is a partial migration of the + `web.webqtl.correlation.PartialCorrDBPage.getPartialCorrelationsFast` + function in GeneNetwork1. + """ + assert method in ("spearman", "pearson") + with open(f"{TEXTDIR}/{database_filename}", "r") as dataset_file: + dataset = tuple(dataset_file.readlines()) + + good_dataset_samples = good_dataset_samples_indexes( + samples, parse_csv_line(dataset[0])[1:]) + + def __process_trait_names_and_values__(acc, line): + trait_line = parse_csv_line(line) + trait_name = trait_line[0] + trait_data = trait_line[1:] + if trait_name in fetched_correlations.keys(): + return ( + acc[0] + (trait_name,), + acc[1] + tuple( + trait_data[i] if i in good_dataset_samples else None + for i in range(len(trait_data)))) + return acc + + processed_trait_names_values: tuple = reduce( + __process_trait_names_and_values__, dataset[1:], (tuple(), tuple())) + all_target_trait_names: Tuple[str, ...] = processed_trait_names_values[0] + all_target_trait_values: Tuple[float, ...] = processed_trait_names_values[1] + + all_correlations = determine_partials( + primary_vals, control_vals, all_target_trait_names, + all_target_trait_values, method) + ## Line 772 to 779 in GN1 are the cause of the weird complexity in the + ## return below. Once the surrounding code is successfully migrated and + ## reworked, this complexity might go away, by getting rid of the + ## `correlation_type` parameter + return len(all_correlations), tuple( + corr + ( + (fetched_correlations[corr[0]],) if correlation_type == "literature" + else fetched_correlations[corr[0]][0:2]) + for idx, corr in enumerate(all_correlations)) diff --git a/gn3/settings.py b/gn3/settings.py index e85eeff..57c63df 100644 --- a/gn3/settings.py +++ b/gn3/settings.py @@ -50,3 +50,6 @@ CORS_HEADERS = [ "Authorization", "Access-Control-Allow-Credentials" ] + +GNSHARE = os.environ.get("GNSHARE", "/gnshare/gn/") +TEXTDIR = f"{GNSHARE}/web/ProbeSetFreeze_DataMatrix" -- cgit v1.2.3 From ead4481077922d7f307475e6bc04e617d6594a99 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 10:52:13 +0300 Subject: Stub `determine_partials` Issue: * Stub out `determine_partials` which is a migration of `web.webqtl.correlation.correlationFunction.determinePartialsByR` in GN1. The function in GN1 has R code from line 188 to line 344. This will need to be converted over to Python. This function will also need tests. --- gn3/computations/partial_correlations.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index 1a6868a..fb372a9 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -196,6 +196,22 @@ def good_dataset_samples_indexes( samples_from_file.index(good) for good in set(samples).intersection(set(samples_from_file)))) +def determine_partials( + primary_vals, control_vals, all_target_trait_names, + all_target_trait_values, method): + """ + This **WILL** be a migration of + `web.webqtl.correlation.correlationFunction.determinePartialsByR` function + in GeneNetwork1. + + The function in GeneNetwork1 contains code written in R that is then used to + compute the partial correlations. + """ + ## This function is not implemented at this stage + return tuple( + primary_vals, control_vals, all_target_trait_names, + all_target_trait_values, method) + def compute_partial_correlations_fast(# pylint: disable=[R0913, R0914] samples, primary_vals, control_vals, database_filename, fetched_correlations, method: str, correlation_type: str) -> Tuple[ -- cgit v1.2.3 From 78c1d118ca31e2c0d4cd12afe8c8426974ee82e2 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Thu, 4 Nov 2021 08:51:50 +0300 Subject: Create blackbox tests for some functions migrated from R Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/computations/partial_correlations.py: new stub functions (partial_correlation_matrix, partial_correlation_recursive) * tests/unit/computations/partial_correlations_test_data/pcor_mat_blackbox_test.csv: blackbox sample data and results for variance-covariance matrix method * tests/unit/computations/partial_correlations_test_data/pcor_rec_blackbox_test.csv: blackbox sample data and results for recursive method * tests/unit/computations/test_partial_correlations.py: Tests for new function Provide some blackbox testing sample data for checking the operation of the functions migrated from R. --- gn3/computations/partial_correlations.py | 30 ++++++ .../pcor_mat_blackbox_test.csv | 101 +++++++++++++++++++++ .../pcor_rec_blackbox_test.csv | 101 +++++++++++++++++++++ .../unit/computations/test_partial_correlations.py | 61 ++++++++++++- 4 files changed, 292 insertions(+), 1 deletion(-) create mode 100644 tests/unit/computations/partial_correlations_test_data/pcor_mat_blackbox_test.csv create mode 100644 tests/unit/computations/partial_correlations_test_data/pcor_rec_blackbox_test.csv (limited to 'gn3/computations') diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py index fb372a9..07dc16d 100644 --- a/gn3/computations/partial_correlations.py +++ b/gn3/computations/partial_correlations.py @@ -257,3 +257,33 @@ def compute_partial_correlations_fast(# pylint: disable=[R0913, R0914] (fetched_correlations[corr[0]],) if correlation_type == "literature" else fetched_correlations[corr[0]][0:2]) for idx, corr in enumerate(all_correlations)) + +def partial_correlation_matrix( + xdata: Tuple[float, ...], ydata: Tuple[float, ...], + zdata: Tuple[float, ...], method: str = "pearsons", + omit_nones: bool = True) -> float: + """ + Computes the partial correlation coefficient using the + 'variance-covariance matrix' method + + This is a partial migration of the + `web.webqtl.correlation.correlationFunction.determinPartialsByR` function in + GeneNetwork1, specifically the `pcor.mat` function written in the R + programming language. + """ + return 0 + +def partial_correlation_recursive( + xdata: Tuple[float, ...], ydata: Tuple[float, ...], + zdata: Tuple[float, ...], method: str = "pearsons", + omit_nones: bool = True) -> float: + """ + Computes the partial correlation coefficient using the 'recursive formula' + method + + This is a partial migration of the + `web.webqtl.correlation.correlationFunction.determinPartialsByR` function in + GeneNetwork1, specifically the `pcor.rec` function written in the R + programming language. + """ + return 0 diff --git a/tests/unit/computations/partial_correlations_test_data/pcor_mat_blackbox_test.csv b/tests/unit/computations/partial_correlations_test_data/pcor_mat_blackbox_test.csv new file mode 100644 index 0000000..a1558a0 --- /dev/null +++ b/tests/unit/computations/partial_correlations_test_data/pcor_mat_blackbox_test.csv @@ -0,0 +1,101 @@ +"function_name","count","x","y","z","method","rm","result" +"pcor.mat",13,"-89.1427156049758, -70.2603165991604, 52.4590492714196, -57.2846714872867, -26.3361851219088, -0.000567594543099403, 17.9622953757644, -64.1319836024195, 39.2497098539025, 20.8931459579617, 74.1897551808506, -35.3126015048474, -55.9552798978984","47.3745858296752, -68.9209029078484, -31.9765134248883, -45.0486478861421, -85.1716816890985, 65.432888455689, 19.2734406329691, 87.9198614973575, -68.2076670229435, -38.1280574947596, 52.754437038675, -73.271297942847, 67.7760738879442","-78.9239354431629, -85.3030194528401, -20.3673145733774, -22.6184178609401, 16.5013548452407, 18.5637861024588, 96.5889988467097, 36.156284250319, 35.1589790545404, -73.1023930944502, -50.7484216243029, 41.8345319107175, -47.8776978328824","s",TRUE,-0.0325789017360908 +"pcor.mat",18,"64.013504376635, 53.1150240916759, -77.8307237662375, -33.1533540505916, -13.6034480296075, 93.2804300449789, -46.3470680173486, 17.427362408489, -66.663983091712, 4.23776390962303, 77.7521491982043, -3.10332304798067, -61.5989458281547, -13.5284000542015, 7.71856023930013, 89.0885920263827, -35.3556916583329, -95.9261478390545","-35.6941626407206, 41.877265740186, 69.6430462878197, 64.2008605413139, -59.4343301840127, 79.7348674852401, 61.3097242545336, 9.0187989640981, 51.7997904680669, 45.9638734348118, 41.0136769060045, -73.4738738741726, -47.0628185197711, 57.6456079725176, -2.5194660294801, -53.7642545998096, 18.9816055819392, -54.8453160561621","-55.6193302385509, 63.7390994466841, 85.8707739040256, -77.2866525221616, 29.9346832558513, -24.1673247888684, -61.8650471325964, 19.6793714072555, -60.1225732360035, 12.063248641789, -51.2589928694069, -41.5690367575735, -58.2409225869924, 37.0499972254038, -9.5894614700228, 2.70932037383318, 56.0281782411039, -39.5718538668007","s",FALSE,-0.0406099988399257 +"pcor.mat",18,"56.9747474044561, 55.6495593860745, -36.6002877708524, 61.6530403494835, -11.1073412466794, -70.2817751094699, 34.5848673954606, -40.1073589455336, 22.4086964968592, -34.9243235308677, -31.6865964792669, -81.9148152600974, -7.01485783793032, -0.294096721336246, -19.4921953603625, -55.370055232197, 33.2327066455036, -65.3158040251583","-13.8067095074803, -83.5349172819406, -12.6486663240939, -8.66694604046643, 86.2149322871119, 60.7879475224763, -73.3523240312934, 34.5676413737237, -4.87876599654555, 18.5876747593284, 89.8641737177968, -72.3610286135226, -32.7410754282027, 27.3812759667635, -45.791448559612, 80.4758272599429, -76.585627021268, -36.1723904497921","49.7649329714477, -56.3095143996179, 92.719935066998, -17.5905505660921, -34.11227283068, 8.69290293194354, 51.1472036596388, -52.1146316081285, 18.716375855729, 44.0671648364514, -81.5424187108874, 17.9900521878153, 83.1838137004524, -36.2067365087569, 6.58109332434833, 33.7925261352211, 43.0417039897293, -24.2647144943476","s",FALSE,-0.326536819677434 +"pcor.mat",16,"-27.0166050642729, 25.6161904428154, 18.0927545763552, -97.8309890720993, 83.225102070719, 41.1768469493836, 52.531653130427, 90.7089609187096, 45.9316388238221, 44.4865159224719, -65.3349446132779, -63.2685597520322, -63.5370531585068, -20.7488086074591, -21.5636825188994, 70.8061812445521","89.9359612260014, -24.0224461536855, -88.7139027938247, 33.0363452900201, 89.8786358069628, 72.6242340635508, -33.4980245213956, 18.209078675136, -98.510293290019, -45.0928752310574, -56.3632266130298, 36.2233767751604, 24.8566114809364, 41.1938649136573, 98.1815246865153, -31.8091072142124","-83.4077485837042, 67.2828705515712, -46.1948299780488, 44.6621300186962, -68.071247311309, 69.5944227278233, -72.4484366830438, -19.5607443805784, -10.3165994398296, -38.1281117442995, 92.4075163435191, 27.103430358693, 7.35686598345637, -68.8319525215775, -35.345290414989, -22.3868970759213","s",FALSE,-0.265133848612843 +"pcor.mat",16,"62.6007101032883, -31.4669733867049, -1.02701690047979, 89.1588015947491, 89.4676355645061, 72.146376548335, -48.5373890493065, 27.8906877152622, 84.9362426437438, 22.9195747990161, -0.477400049567223, -55.017494270578, 16.0360316745937, -40.5794956721365, -76.5294233337045, 99.2066614329815","32.9774639569223, 99.4476685766131, 19.444046029821, -87.4037025496364, -49.6627463493496, -79.1786927729845, 69.5362528320402, -42.9193137213588, 88.4448691736907, 96.2614195886999, 99.7840614058077, -30.6426415685564, 52.9562290757895, -75.0585582572967, -92.611052794382, 67.6107355859131","99.6344119310379, -43.7020116951317, -14.1780937556177, 29.8982600681484, 67.7026726771146, 12.5789169687778, 5.22102704271674, 47.3305377177894, -10.2066915482283, 44.158894661814, 16.616974119097, 67.5522029399872, 10.2959530893713, 2.26272544823587, -24.1713169030845, -81.4385517500341","k",FALSE,0.00170394349277265 +"pcor.mat",17,"-43.6796560417861, -52.3636834230274, -32.689885282889, 29.6649182215333, 70.8439419511706, -78.822322236374, -7.2787752840668, -37.7680024132133, -9.91778918541968, 45.4824290703982, -1.96461407467723, -10.768158081919, -71.2498663924634, 23.788648378104, 81.2093367334455, -29.8483492340893, 42.7211379166692","54.4582905247808, 2.90980748832226, -49.7587429825217, 90.0067212525755, -62.2195774223655, 49.5222055818886, 64.7147801704705, -30.6467334739864, 43.9336315263063, -24.3989814538509, 93.3036277070642, -5.72181586176157, -51.6447205562145, 71.4890264440328, 35.5837760493159, -39.9753636214882, 64.5502870436758","-86.5306067280471, -2.41111759096384, 17.8865785710514, -66.7758407536894, -45.9109436254948, -99.6982547920197, 9.07599623315036, -49.4003663770854, -50.0817076303065, -52.7716889511794, 9.27476715296507, -1.14214201457798, -14.0225571580231, -46.0782612208277, 97.4677567835897, -70.6407638732344, -99.1432263981551","p",TRUE,0.181498113250831 +"pcor.mat",14,"-4.90339081734419, 72.9479049798101, 46.9192364253104, 92.628131667152, 56.5425228327513, 9.90580045618117, -61.4272825885564, 33.6759516969323, 81.8828757386655, 77.3399218916893, 67.7938031964004, 94.0767949912697, 82.1635375730693, -75.240781577304","21.4586552698165, -36.5642888005823, -38.3646843954921, -49.740192014724, -81.6746165510267, -19.1730958875269, 41.690668836236, -23.3391010668129, -78.1760632060468, 77.431286778301, 70.3289750963449, 39.766847435385, 3.62148815765977, 10.747673548758","17.7063988521695, 90.0697568897158, -93.0447159335017, 85.4728828649968, -18.4118247125298, -9.85785778611898, 70.2666643075645, -97.7391937281936, 54.3527046684176, -51.4394805766642, 39.0205434523523, -25.6685835774988, -14.7992834448814, 81.1236747074872","p",FALSE,-0.21445656018345 +"pcor.mat",15,"-76.8736738711596, -35.8509941026568, -48.1256343889982, -9.57123078405857, -72.2122399602085, -6.98926709592342, -31.3491718843579, 74.3320995010436, 54.9155391287059, -46.5018933173269, 51.3019453268498, 17.0857016462833, -99.9900157097727, -17.3139852005988, -85.5749220587313","-97.7581001352519, -97.2672377247363, -27.3427923209965, -1.21665806509554, -8.05344670079648, 21.0991605184972, -54.0536799002439, 95.0312656350434, 23.7382718361914, -98.728937190026, -80.2528636530042, -59.6354123670608, 20.57563085109, 90.7686199061573, 19.6493336930871","-38.4617018979043, 28.0117013957351, -74.6210919693112, -34.3639187980443, -28.0167740304023, -46.0126685444266, 37.4354778788984, 41.0279822535813, 80.8140107430518, -94.7356107644737, -91.9223290402442, -34.4586562830955, 90.2129443362355, 76.8807396292686, 80.0070276483893","k",FALSE,0.250746493151452 +"pcor.mat",7,"-66.7350410018116, 53.2712059561163, -43.8059563748538, -44.9987557251006, -67.2016165219247, 17.9846523795277, 77.0553316920996","-60.9613332431763, 99.9187499284744, -27.7070741169155, 14.3416102975607, -30.3307291120291, 5.47642167657614, -52.1709493827075","5.97298364154994, 70.3716231975704, -16.247583553195, 92.1821707859635, -80.4653100203723, -7.83197041600943, -66.9684283901006","k",TRUE,0.241209075662211 +"pcor.mat",18,"94.380710972473, -10.0111012812704, 85.1797969080508, -11.4021800924093, -99.7310696635395, -57.7457085251808, -34.8813917022198, 37.1367971878499, -57.5784567277879, 17.9361389484257, -20.6278771162033, -42.8640173282474, -62.0093574281782, 10.7791527640074, -42.4936424475163, 31.2512285541743, -6.26639267429709, 50.0969529151917","-35.3466201107949, 51.2795441318303, -9.26330988295376, 13.2600117940456, -70.25914513506, 24.8688437044621, -95.0622762087733, -78.8527075666934, 12.5830010510981, -40.3181817382574, -62.1690618339926, 65.2437281329185, 45.4263514839113, -20.7038762047887, 19.835890410468, -16.3075220305473, 10.154833085835, 31.5655742771924","-47.5495883729309, 31.0941505245864, -11.7687386460602, 47.550484072417, 19.7334853932261, 59.856044081971, 38.4999468922615, -29.1666014585644, -77.8870329726487, 75.2757792361081, -17.8823099005967, -93.2831089943647, -73.6799968872219, -36.3856283016503, 21.7388028744608, -41.7408903129399, -21.9456392340362, 5.71200731210411","p",TRUE,-0.153597125133576 +"pcor.mat",15,"-83.3593410905451, 33.8860942982137, 17.5660732202232, 44.9482867959887, 3.40795461088419, -98.6972364131361, -57.9294378869236, 49.1425832267851, -81.4089713152498, 22.2765766549855, -15.2078927494586, 64.7270672023296, -77.9068617615849, -13.5009704623371, -41.0612959414721","99.4176274631172, -28.8145580794662, 24.2324681021273, 70.3792416490614, 55.1269176416099, -46.6643883381039, 13.5340544395149, -81.6506992094219, 7.58900847285986, 76.2214359361678, -21.0444819182158, -19.7882746346295, -77.8520357329398, -60.2931962348521, -30.685667693615","-7.22203818149865, -62.021238123998, -34.5286842435598, -67.4230553675443, -62.1439764276147, -99.2042647209018, 7.09792547859251, -88.8404605910182, 79.5403079129755, 68.8092908356339, -87.8009828273207, -11.8701789993793, -40.4039821587503, -50.0366650056094, 61.1679489258677","p",TRUE,0.134662220884382 +"pcor.mat",18,"36.4026268012822, -40.8853712491691, 70.4748715274036, -93.3088712859899, -31.1693381983787, 44.5810994133353, -29.8538233153522, -55.898003000766, -83.1116971559823, 95.2613319735974, -86.9839164428413, -99.6416668407619, -71.7915004119277, 86.375200515613, 73.0707975570112, 9.46915657259524, 30.3790966048837, -32.9175783321261","20.2463141642511, 35.3073101490736, 96.6094605624676, 38.2854318711907, 20.0914516113698, -76.2724542990327, -2.5904384907335, 28.1036204192787, 27.5573522783816, 41.8770257849246, 17.9975534323603, -53.0143345706165, -1.92109285853803, -43.1404768954962, -89.0914923511446, -75.2585290931165, 31.8984744139016, -81.7458927165717","99.058653973043, -73.045432055369, -98.9125271327794, -10.9370147343725, 93.4558239299804, 21.3814281392843, -10.9608757775277, -94.0566421952099, 29.180516814813, 60.7905065640807, -69.4182314909995, 27.9442990664393, 16.5212750900537, -65.4938052408397, -91.3346993271261, -19.3851371761411, 54.6318108215928, 94.2573416978121","s",TRUE,-0.0480625888230071 +"pcor.mat",8,"70.9466312080622, -31.7683406174183, 25.0176505185664, -56.8918467033654, -9.20995227061212, 84.6444204915315, 66.9992076698691, -14.915213920176","-25.2351951319724, 53.1852985266596, 32.9547242727131, -82.4257594533265, -51.8481220584363, 61.490266257897, 16.8974718544632, -71.770367724821","25.6255140993744, 62.6514744479209, 2.26075490936637, -90.3473023790866, -8.56978320516646, 89.0561478678137, 3.07730589993298, 45.6199106760323","p",FALSE,0.307942034203085 +"pcor.mat",18,"23.8564316183329, -16.3905590772629, -12.3555054422468, 78.1761512625962, 49.3263760115951, 13.6127803940326, -35.0881972815841, 18.7167634721845, 47.3916597198695, 6.6052196547389, -47.4990267306566, 36.3517801277339, 77.3957766592503, -70.3038077335805, -28.512022132054, 93.2541827205569, -50.6320198066533, 2.28197425603867","4.66441703028977, 52.664560964331, 64.6692745853215, 64.0807087533176, -42.2254925593734, -28.3238022122532, 84.3502655625343, -22.6033370010555, -63.9537113253027, -82.1724142879248, -47.163494117558, 86.9036048650742, -25.5253764800727, -40.6565339770168, -64.6023235283792, 5.88995609432459, 60.3537472430617, -12.8357082139701","-7.05419671721756, 17.8630999755114, -94.5426801219583, -90.8921510912478, -52.0795451011509, 52.0008019171655, 77.9491205234081, -64.4113312475383, -13.6109072715044, -84.2732723336667, 57.4606000445783, 57.2238144930452, -17.8435018286109, 78.159570787102, -64.3654571380466, 25.7219140883535, 21.2949032895267, -89.99102874659","s",FALSE,0.098864763229466 +"pcor.mat",8,"36.1457616556436, 98.2861819211394, 40.8350063487887, 63.7187578249723, 13.0914898123592, -52.3402118124068, -13.3677611593157, 73.598525673151","79.2985305655748, -71.9141394365579, -0.420988909900188, -90.6284262426198, 72.2033147700131, 79.6287265606225, 20.301692513749, -54.6786930412054","96.6230187565088, -65.8682400360703, 26.0384120512754, -46.9612662214786, 47.5940535310656, -17.1155892312527, -45.7220804877579, -67.2774867620319","s",TRUE,-0.725794650937327 +"pcor.mat",6,"-57.665149634704, 94.4162191357464, -51.1441508308053, -52.6072693057358, -44.1887341905385, -14.2386069521308","-98.8703572191298, -9.2983465641737, -79.2660262435675, 23.2223530765623, 80.3647544234991, -58.0826134420931","81.1863256618381, 64.9427580181509, 45.6761348526925, 64.8033803794533, -40.9290973097086, -92.1668177470565","p",TRUE,0.118780545543647 +"pcor.mat",11,"40.5678772833198, 33.8221173267812, 65.0725501589477, 78.8693956099451, -35.8988873194903, -35.3420054074377, -87.4633281026036, 0.115021411329508, 67.6265092566609, 83.1133821513504, -18.3507286012173","-73.7955948337913, 29.9831629730761, 65.2690784074366, 25.2531439997256, -62.1108427643776, -47.4723324179649, 35.5791020672768, 26.2222751509398, 40.3645094949752, -91.2350233644247, -28.6233199760318","48.7291889730841, 33.8533046189696, 66.3264122325927, -19.7420272510499, -46.8001568224281, -39.1347371973097, 34.7272414714098, 65.1918939314783, 99.5216719806194, -29.0462920907885, 19.8831745423377","s",TRUE,-0.297493089362279 +"pcor.mat",11,"55.8680928312242, -76.9269882235676, -17.3182043712586, 15.2775115799159, -90.3137100860476, -99.032783228904, 13.8755587395281, -24.003914417699, 21.2662550620735, -8.40797564014792, -40.8448379952461","9.94491642341018, 76.8310205079615, -95.3446100465953, -74.8744533862919, -69.8509857058525, 6.55742576345801, 24.8502014670521, 97.212969744578, 29.4545858632773, -77.6854024268687, -80.0981419626623","14.1451966483146, -52.5070706848055, 52.3787314537913, 22.6627501659095, 5.18406489863992, 78.4387116320431, -37.6045362092555, -59.8206405062228, 97.1690027043223, 46.7755769845098, -23.1495135929435","k",FALSE,0.0919698779952353 +"pcor.mat",19,"12.6561464276165, 89.6340752951801, -86.4221294410527, -8.45101773738861, -79.0324212051928, -41.2799602374434, 41.9530363287777, 77.5156316813082, -98.2695916201919, 54.0546870790422, 18.4697377029806, -92.1382030006498, 22.3036497831345, -88.4184999857098, 87.4229540582746, 84.4335915520787, -86.3810521550477, -4.96541885659099, -4.21266416087747","77.7516108006239, 13.0087590776384, -52.281900215894, 46.1203761398792, -7.93849290348589, 30.4574410431087, -4.16998718865216, -76.5136891510338, 65.0717901531607, 41.985437553376, -10.8945969026536, -1.79670625366271, -80.059599224478, -27.9757288750261, -3.81275764666498, -40.5276663135737, -7.72571838460863, -21.2847925722599, -3.90572124160826","-16.1283437628299, -86.2985316198319, 15.8964606467634, 45.3664765227586, -10.7382515911013, -61.8415161035955, 75.2832551952451, 62.1664110571146, 14.5355282817036, 31.9144344422966, 63.7715006712824, 46.5569637250155, 20.0197615195066, 9.47772678919137, -79.8056298401207, -89.03838978149, 96.9052662607282, -3.97900892421603, -68.8863600604236","k",TRUE,-0.0783868693007469 +"pcor.mat",6,"41.7150890920311, 68.0406647268683, -56.6652314271778, -10.3111394215375, 72.7076691575348, 16.4696130901575","55.7349273469299, 33.0129407346249, -92.8235503379256, 67.6610651891679, -28.225592058152, 27.8548604343086","97.3419046029449, 92.7794307935983, 18.738874187693, -50.2989741973579, -31.1240924987942, -47.357566608116","k",FALSE,-0.0545544725589981 +"pcor.mat",7,"76.1037406977266, -51.2855937238783, -51.0953912511468, 61.8452743627131, 27.5623431429267, 32.935436675325, -23.7891209311783","-25.5972837097943, 35.7565317302942, -2.09780340082943, 31.380487093702, -65.0630551856011, -52.5524016004056, -45.8224846515805","35.1819013711065, 55.421924777329, 90.8943614922464, 65.8556955400854, -17.2470153309405, 50.2847956493497, -43.5768135823309","k",TRUE,-0.241209075662211 +"pcor.mat",14,"-86.9700414128602, -96.2525710929185, 13.2297853473574, 48.3323885593563, -42.72451386787, -64.586602896452, 26.2733123730868, -41.4743609726429, -27.5131822098047, -62.4261621385813, -16.2857410497963, 61.4362000953406, -71.6986550018191, 6.73192692920566","-1.76208755001426, 67.4144621472806, 40.1256877463311, 20.0672226957977, 75.7373407483101, -60.1804342586547, -24.0758131723851, -30.328988051042, 98.3264557551593, 18.7257033307105, -74.7150662820786, -66.4480000734329, 83.1373671069741, -83.8592982385308","-8.51446660235524, -33.5672379937023, 23.1306486297399, -71.0971800610423, -76.6779989469796, 17.668380215764, -6.54176617972553, 38.9708994887769, 36.8745916523039, 36.466611456126, -42.6107963547111, -43.292662827298, -34.305056463927, 3.72276022098958","k",FALSE,-0.237726218501727 +"pcor.mat",9,"87.9827535245568, 66.9526648242027, 77.764587290585, -63.0833296570927, 12.8970904741436, 12.7532111946493, -15.7931709196419, 76.1098874267191, -53.3998124301434","61.8036749772727, -53.057945612818, -21.9204508699477, -23.7275714520365, -81.9658347871155, 96.6755392961204, 23.4129578340799, -26.8468076363206, 11.6413829382509","6.22031539678574, -63.707418506965, -68.8293416053057, 51.3240036088973, -89.1044299583882, 96.3014227803797, 84.1399733442813, 3.21415988728404, -64.009400550276","p",TRUE,0.220999575445754 +"pcor.mat",18,"-2.85750310868025, -99.3862376082689, -96.015146560967, 63.2039456162602, -66.0570687614381, -66.0487032029778, -16.3392898160964, 93.4929385315627, -0.228785490617156, -94.138465821743, 89.7544200066477, -39.7632111795247, -60.3579618502408, -34.7465238533914, 49.7126227244735, 56.9427436217666, 69.6163312997669, -16.7142637073994","67.1196629293263, -69.1413426306099, 90.1762881316245, -33.8058187626302, 73.66002057679, 34.5961081795394, -59.5154983922839, 1.26353777013719, 48.2069759164006, -34.2219550162554, 14.3829472362995, 41.6792382951826, 39.1247006133199, -38.8760752510279, -11.6304269526154, -13.3687050547451, -5.31534324400127, -2.51060193404555","-86.3554051145911, 29.0978434961289, -95.5027301795781, 63.6454623192549, -29.499419266358, 73.207819275558, 39.0617064666003, -92.9985575377941, -51.6290077473968, 12.2396486345679, 48.3567856252193, -28.516500396654, -21.0198899265379, 53.046905528754, 44.2176911514252, 0.109824910759926, -99.0703694988042, 74.6371628716588","k",FALSE,-0.0887556361629261 +"pcor.mat",5,"24.8151850420982, -55.3720602765679, -48.1912312563509, 25.3140340093523, 7.37709770910442","27.1002457011491, 51.559735648334, 15.2347642462701, -19.9469642713666, -71.4244599919766","20.2690705657005, 10.2111615706235, 28.9990232791752, -81.5356591250747, 62.7182307653129","p",TRUE,-0.595476592392643 +"pcor.mat",10,"-80.8792762923986, -16.7048441711813, -27.4036565795541, 83.73913182877, -29.9381176009774, 53.5984759684652, -74.8886847868562, -35.0239771883935, -89.2459953203797, 42.7505305968225","55.4137516766787, -70.6881674006581, 32.317240908742, -69.2246387712657, -93.5175380203873, 42.5839690491557, 39.2618721351027, 19.604005292058, 29.0025069378316, 31.9192183203995","-57.4748635292053, -17.7012801170349, 86.0102667473257, -97.6800283882767, -33.8488628156483, -80.713168065995, 1.30178248509765, -82.9571642912924, 20.4808691516519, -23.3784267678857","p",TRUE,-0.247808971782581 +"pcor.mat",7,"-9.81413833796978, -95.0588807463646, -37.4823603779078, 96.0915867704898, 25.3856145311147, -90.2806713245809, 56.4173173159361","-17.8975068964064, -45.0020219665021, -53.689378220588, 13.3858302142471, -95.0690850615501, -45.9697632584721, 5.96692659892142","-74.4352919980884, -79.8946594353765, -36.3220115657896, 71.3168484624475, -32.7676126733422, 74.5314478874207, 47.3017191980034","p",TRUE,0.380658349962746 +"pcor.mat",7,"-12.2942595742643, -46.0883136838675, -21.6881454922259, -19.7250084485859, 54.6898206695914, -67.8715384099633, -98.035113979131","-31.2075863592327, -53.7305776961148, -96.1716986726969, 34.0433329343796, -86.3202335778624, -98.4303006436676, -81.2778456136584","-78.2337430864573, -33.7292415089905, 14.364256337285, 80.8441326953471, 14.6734802983701, -38.598564080894, -16.4908449631184","k",FALSE,0.233736747502114 +"pcor.mat",12,"65.5728437006474, -22.3883016966283, -16.1309017334133, -86.9484126102179, 55.0275014247745, 75.5027377512306, 56.8217232357711, -10.157274780795, -8.05552089586854, -95.0297535397112, 86.99438595213, 56.2756833154708","-50.9940889663994, 31.0440130997449, 55.3901108913124, 0.67323399707675, -93.814965011552, 43.19629650563, 82.1691108867526, 29.7341026831418, 23.4111852012575, -23.9989855792373, -41.8117068242282, -21.0978685878217","-94.9003085959703, 76.4557474758476, 71.228800015524, 1.28989322111011, 56.7563532851636, -74.5477284770459, -40.1864093728364, -62.3711896594614, -63.5766193736345, -34.8390635102987, -34.4627866521478, -60.8579785563052","k",TRUE,-0.0642824346533225 +"pcor.mat",16,"10.3261223994195, -66.3412994239479, -10.04778011702, 90.8491815906018, -16.8091387022287, -1.13998735323548, 8.87222946621478, 62.9582400433719, 51.0545901022851, -42.0804372988641, -72.740743868053, -98.6990892793983, 25.1725806389004, 30.7280816137791, 3.96932810544968, -57.8030949924141","60.728229675442, -74.0803788881749, -73.4922635369003, 21.5669278986752, -2.4874959141016, -42.8831906523556, -8.72258436866105, 41.053393855691, -49.3829999119043, -25.329764559865, -33.0748493783176, 64.0028734691441, -75.2295605372638, -3.0173609033227, -40.6044688075781, -90.4325042851269","-26.9309993833303, -77.9300230089575, -34.1201750095934, 18.6427622102201, -11.5215779747814, 43.2106466032565, 52.0845813211054, -27.0871427375823, 78.9493581280112, -60.0895206909627, 75.2652967814356, -64.8424350190908, 74.5653890538961, 79.290065029636, -83.871082868427, -55.8636627625674","p",TRUE,0.232814351928154 +"pcor.mat",18,"-94.2430725321174, -51.8685480579734, 21.5350433252752, 4.50745574198663, 44.5271090604365, 75.3100082743913, 36.3767127040774, 58.3390053827316, -33.6587901227176, 53.1314761377871, -90.0304151698947, 1.84677322395146, -43.2471524458379, 20.721254684031, -35.7563958037645, 44.6534116752446, 78.0897385440767, 62.626903411001","-86.8268391583115, -67.7875887136906, -20.8753589075059, -28.825512342155, 41.2515165284276, 6.46749134175479, -87.1187134645879, -87.9431148990989, -47.1682616043836, 7.15450858697295, -31.9803619757295, -45.8144799340516, 47.6873302366585, 94.4961855188012, 70.8510945085436, -10.3092920035124, 68.0197277572006, -86.2225097604096","42.146764555946, 35.4582188185304, -74.8004557099193, -69.1695068031549, 9.96355945244431, -1.00409551523626, -56.0459699481726, 57.2666853666306, -75.3820521291345, 61.0693466849625, -80.6058402173221, -28.1722619198263, 29.1725110728294, -84.9811018910259, 52.4267561268061, 3.33783319219947, 57.3508915491402, -16.6291590314358","k",TRUE,0.126881965715119 +"pcor.mat",11,"58.4281201008707, 18.3633047156036, -74.4007679168135, -70.9485304541886, -62.3421670403332, -75.4027212038636, -42.2465549781919, 45.5137318000197, -59.8607284482569, 62.6728146802634, 78.3472507726401","78.8005036301911, -11.6723335813731, 47.760496661067, 72.8375401347876, 44.0390994306654, 49.5243767276406, -49.906044267118, -93.3100801426917, 74.181916937232, 8.72853924520314, 83.0030017532408","-7.40372859872878, 19.830649998039, 32.0547481998801, -24.0255577024072, 15.4005860444158, 13.1488932296634, 8.03853832185268, -78.5669906530529, 80.1699983887374, -99.4674043729901, 40.1027225889266","p",TRUE,0.0557153883247975 +"pcor.mat",8,"-3.19936256855726, 41.1430836189538, -40.9489492420107, 32.8621160238981, -55.2679274696857, -85.6475236825645, -98.9018370397389, 37.6923420932144","-23.4679078217596, -70.4765893053263, -29.5889834873378, 73.5305113717914, 66.7411952745169, 8.31683478318155, 14.5889795385301, 72.6518555544317","78.9658954367042, -43.0149876978248, -8.42135692946613, 0.82630286924541, -0.558331841602921, -30.3489441052079, -19.2593446467072, 59.6474095713347","s",TRUE,-0.211100165460375 +"pcor.mat",12,"-46.8561482150108, 87.6810635440052, -57.6411653775722, -46.4993360452354, -35.9383462462574, -96.4581338688731, 72.101165773347, -92.8533762693405, -24.3875949177891, 81.7434745375067, 95.8580058533698, -39.7297702729702","-14.3783972598612, -62.9489183891565, -88.967556739226, 5.93087510205805, -20.3817227389663, -28.1361578963697, 98.5170270781964, -62.3654518276453, -21.2714700959623, -75.4275092389435, -45.0435093604028, -52.5260332040489","84.6728871576488, 77.3271079175174, -35.2307356428355, -63.2898768875748, -62.9697222262621, 57.5104051735252, -65.9628365654498, -77.7099144645035, -68.1009365711361, 21.6217519715428, 40.7055628951639, -11.8265327066183","p",FALSE,0.240265915193204 +"pcor.mat",14,"-65.2285707648844, 21.9669322483242, 73.5851485282183, 28.0581893399358, 34.4764126464725, -12.0250980835408, 44.0008006524295, 16.8571741785854, -32.5285179540515, 40.1795001234859, 14.344258280471, 42.7343318238854, 33.5459096822888, 17.8732588887215","-17.1958317514509, -31.969396257773, 26.989441877231, 52.442137664184, 42.9547981824726, 32.2006456553936, 80.7050887029618, 7.4744014069438, -56.099244300276, 47.6363920606673, -16.8571050744504, -45.9946841932833, -51.3697457965463, -93.8083261717111","-83.2655881065875, -35.3444519918412, 20.8411808125675, -89.538209233433, -85.8607416506857, -4.87791770137846, 16.466785594821, 71.7880600132048, -90.7291606999934, -47.3672876600176, 28.5109816584736, -6.68758857063949, -37.6607090700418, 78.6420990247279","k",FALSE,0.293285288009136 +"pcor.mat",6,"-46.0385966580361, -99.5740628801286, -29.4129090383649, 97.0183642581105, -37.6902215648443, 80.4221050348133","-88.8656401075423, -39.0352664981037, 37.8500768449157, -3.4251865465194, 16.7551717720926, -64.4463129807264","-85.469913110137, 82.1475684642792, -79.0366449858993, -17.5424363464117, -55.2734784781933, 8.78398092463613","k",FALSE,0.218217890235992 +"pcor.mat",19,"94.6966245770454, 80.9601898305118, -27.9354885220528, 32.8651154879481, -83.5247790906578, 68.0820679292083, 98.2801185455173, -51.8296324182302, 22.2090682946146, -57.0902567822486, -79.9241363536566, 82.232602359727, -31.2431594356894, 47.0965832006186, 45.9447079803795, 83.7373214308172, 43.1115242652595, -15.8762097824365, 24.6083721984178","-30.2270193584263, -18.9653075765818, 32.3881921358407, 62.3213729821146, 48.8383719697595, -64.4200759939849, -34.4498374499381, 74.7035726904869, -80.0148021429777, -72.3529085982591, 97.3054904025048, 81.4842638093978, -75.7931782398373, -36.0045140143484, 52.190304454416, -46.3511400856078, -27.5253375060856, -49.8220588080585, -94.6963192429394","-1.14815644919872, 38.8675629161298, -7.72479912266135, 80.9100962709635, 7.58379022590816, 83.3296971861273, 51.7409536056221, -33.8198636192828, -63.4376135654747, 80.6679456029087, -83.3767011761665, -82.7897766139358, -25.5388389341533, -99.9377169646323, -91.8954541441053, -75.1720157451928, 85.5636859312654, -35.8674420975149, -14.8491851519793","k",TRUE,-0.0612260637897383 +"pcor.mat",11,"43.6715835239738, 83.24592593126, 80.5671546142548, 50.718885473907, 91.4832427166402, -72.9882646352053, 1.08670038171113, 65.7646540552378, 32.857545139268, 98.8540512509644, 57.310037733987","-68.5883652418852, 57.6829582452774, 20.3366491477937, -20.9295519161969, -91.220309631899, 67.5120797473937, -84.0667628217489, -92.758432822302, 73.1769519392401, 31.0191483236849, -59.8639046307653","60.0395560264587, 49.4410765822977, -15.0798926129937, 76.642445102334, 43.1489706039429, -64.028698252514, -73.5862046014518, -11.8118531536311, -14.194271247834, 19.1962173674256, -62.6884501427412","p",TRUE,-0.239620090137985 +"pcor.mat",5,"84.436381328851, 72.004076000303, -40.9433365799487, -11.7642278783023, 36.9735128246248","92.926798760891, -99.3128840345889, -34.4348025508225, -47.6723862346262, 94.1138706635684","2.33245906420052, 59.2558087781072, -17.9977843537927, -79.5293167699128, -57.2229819372296","k",FALSE,0.0890870806374748 +"pcor.mat",13,"-52.8125622309744, 3.65753290243447, -17.9872157517821, 0.687318574637175, 48.9896171726286, -10.9520922414958, -42.2161420341581, -8.33622729405761, -52.7692852541804, 46.2861472740769, -63.7141830287874, 77.9755924828351, 69.3693526089191","-81.1979313846678, -81.2067239545286, 98.1338402722031, 81.5591927152127, 37.056217668578, -30.573401786387, 86.0113869421184, 22.4740816745907, 15.2922587003559, 4.40599746070802, 81.2510290648788, -91.3585484493524, -51.8274602945894","1.68427461758256, 35.6400829739869, 1.32666421122849, 28.9358278736472, 69.9353440199047, 22.5035205483437, 42.7461497485638, -60.8904164750129, 41.2500537466258, 72.3914569243789, -35.3465625550598, 11.877816170454, 41.2654601968825","s",TRUE,-0.432235260027861 +"pcor.mat",6,"36.2520147580653, -45.3618559986353, -3.36455763317645, 27.1406658459455, -32.130736252293, 89.6533737424761","91.0997018683702, -58.0772765446454, -45.8715479355305, -76.4125521760434, -51.5536211896688, -28.4703179262578","-59.4199031591415, 60.7980337925255, 86.4012580364943, 43.8618046697229, 27.8941972646862, -83.8361509144306","s",FALSE,0.361111111111111 +"pcor.mat",15,"-15.8772577065974, 12.7610163297504, -22.9708819650114, -71.8580039218068, -75.8046543691307, 47.7548703551292, -24.9429981224239, -31.5219290088862, -80.9420365840197, -0.135115487501025, 43.7512583099306, 82.602039212361, 32.6054238714278, 52.4210862349719, -25.4571683704853","2.32095182873309, 57.4718285817653, 91.6442870628089, -0.498835230246186, 42.3996091354638, 98.4292598906904, -69.7168925777078, 17.9197568446398, -60.0217215251178, -94.6461838204414, -56.8148406222463, -86.9362941477448, 23.4191815834492, -67.045795917511, -25.982434488833","88.8973289635032, 31.7113435361534, 1.63480490446091, 90.244840271771, 90.7815016340464, 3.64356338977814, -70.6344856880605, 20.8035066723824, 71.0505054797977, -41.0872615408152, 81.8894566036761, 27.3655611090362, -57.8210411127657, 80.1123460754752, 37.0346592739224","s",TRUE,-0.100259767542805 +"pcor.mat",17,"-8.47610384225845, -76.0521722026169, 36.9659481570125, 27.2644958924502, -63.1253079976887, -45.7246268168092, -91.299555497244, 79.9444675445557, 62.6849308609962, 77.2913023363799, -39.3468747846782, -31.9794123992324, -90.5704878270626, 3.36136179976165, 6.36215764097869, 34.7822861280292, -86.7615907918662","38.8797430787235, 87.957543740049, 27.9284121934325, -2.19381097704172, -93.5423448681831, -85.8565270435065, -1.78483547642827, 32.4997876770794, -84.6204502973706, 73.0989838484675, 46.5271977707744, 19.7806170675904, 2.54705562256277, -62.6201322302222, 47.8446535300463, 94.2804395221174, 43.5015312861651","-42.1679470688105, 44.9353978503495, 4.3509088922292, -26.6828402876854, 45.7676482386887, 34.6878333482891, 86.2517770845443, 54.4100513216108, 62.1482897084206, 93.2931664399803, 48.1029566843063, -49.8642263934016, -79.5734560117126, 82.6493532862514, -56.327466852963, 30.9423569124192, -75.3295318223536","k",FALSE,0.173343955251749 +"pcor.mat",15,"-12.115827947855, -23.5690898727626, 89.8483640048653, -76.0832019150257, 54.2692786082625, -31.3360400963575, -87.8199052065611, 62.5256759114563, -85.054659191519, 17.1253859531134, 86.8644420057535, -63.6440661270171, -2.54382686689496, -52.1825547330081, -86.5487120579928","87.855874421075, 11.8729826528579, 58.581341477111, -76.1566527653486, -54.7422365285456, -76.9119961187243, -51.5453061554581, -8.55491124093533, 41.1004772875458, 4.76148361340165, 27.0399220753461, -93.3408699929714, 43.2594683486968, 97.5612652488053, -27.2557357791811","-25.7235449738801, 98.6250419635326, -33.5626783315092, -76.8353697378188, 5.53134111687541, 11.2494019791484, 53.6648289300501, 58.8696902617812, 74.8723800759763, -83.5754144005477, -2.30161873623729, -0.636160280555487, -32.3559941258281, 9.53439651057124, -96.3161264080554","k",TRUE,0.203279781135864 +"pcor.mat",10,"-88.6766928713769, -99.7512009460479, 36.3819673191756, -78.1028961297125, 26.9118153490126, 8.51810127496719, 25.9507332928479, -2.06361203454435, 61.8650326039642, 53.7325612269342","44.7955575305969, -23.4671366401017, 67.7940716035664, -61.1387377139181, -77.4398116860539, -9.6572854090482, 29.9326512031257, -50.3714796155691, -29.1814834810793, 77.4120518472046","53.5698696039617, -33.2331659272313, 29.2508830782026, 30.7888105046004, -75.6014665588737, -21.6426336206496, 49.8834919184446, -31.1990667134523, -49.9284417368472, 52.3363713175058","s",TRUE,0.461061427308285 +"pcor.mat",16,"-83.9224993251264, -98.9909253083169, 41.2098858971149, 40.319947944954, -22.3131684586406, -4.72695007920265, 71.1222126148641, -73.4416379127651, 19.5892326999456, 51.5542230568826, -59.8082218784839, 83.2985554821789, -73.8052498083562, 81.1506273690611, -62.3849936295301, -65.9225380979478","-22.3732136655599, -76.6401294153184, -14.9951294530183, 17.2481925226748, 36.7321326863021, 30.8906201738864, -36.0778030008078, 27.3618204053491, -25.5863894242793, -77.5616424623877, 71.2329083122313, 92.7250783890486, 18.0521029513329, 20.1161385513842, -37.0644447859377, 74.0854462143034","63.1498238537461, 67.5584438722581, -2.90364040993154, 86.5714854560792, 80.625259783119, -83.5466306190938, -89.0106877777725, -11.5085924509913, 95.1227321755141, 26.8994387704879, -36.1149361357093, 13.4227952454239, -22.9821641929448, -81.5770137123764, 99.1007934324443, -24.637895449996","k",TRUE,0.00117273434060522 +"pcor.mat",12,"-30.6264939717948, -51.3202500529587, -91.8923989403993, 71.2572688702494, -50.3101641312242, -43.5825682710856, 68.9194604754448, -62.2129834722728, 74.4652757886797, 10.5425884481519, 39.5969454664737, 43.8930058851838","-3.49326506257057, -40.981019847095, -1.93292065523565, -55.6563400197774, 30.0884651020169, 5.1898842677474, -57.6860777102411, 92.7335068583488, 4.2677782010287, -73.3723870944232, 37.4122668523341, 97.195135615766","0.661881873384118, -77.0722641143948, 80.916742188856, 84.3042341526598, 60.0523283239454, -15.8854037057608, -41.8266508728266, 90.2447595726699, 78.685249062255, -98.4303796198219, 53.0869376845658, 97.2957746591419","s",TRUE,-0.309246046562802 +"pcor.mat",8,"43.6172465793788, -28.597435541451, 49.3047020863742, 23.4949984122068, 55.2344744559377, 50.4013098310679, -61.0196806956083, -13.4925350546837","-28.0354068614542, -58.4258052520454, 91.4929724764079, 5.28197917155921, 6.99444795027375, -37.798970984295, 14.2839945387095, 93.0717419367284","65.1908750180155, -76.971767982468, 78.4851297736168, -27.8413584455848, -14.1628153156489, -37.5672557391226, -58.8539640419185, 51.5223218593746","p",FALSE,-0.457862137278786 +"pcor.mat",5,"7.32707628048956, -97.153510292992, -58.0732712056488, 5.43075683526695, -50.3950014710426","-60.6064203195274, 70.2952838502824, 7.70989404991269, -90.4186028987169, -91.9082495383918","-27.0302977412939, -71.8158513773233, 60.5169426649809, -51.2578745372593, -71.4558880776167","p",FALSE,-0.811742988157054 +"pcor.mat",12,"-31.9100445136428, -15.4961660970002, 15.1833237614483, -96.8389748129994, 34.0211338829249, -26.4210654422641, -74.7212948743254, -73.451091023162, -48.6799724400043, 43.3380767703056, 33.7157489266247, -12.9206308629364","-25.7156142964959, -31.4395876601338, 27.1043297369033, -64.4430394284427, 69.3326181732118, 11.0314972698689, -56.0946275945753, -5.32854660414159, 61.7247725371271, -58.0520442686975, -98.0296685360372, -83.8190475013107","65.2698641642928, 23.0271658394486, -30.5951663292944, 87.3122846707702, -96.8001709319651, 80.7323037646711, 92.8447821643203, -96.3675274513662, -33.6922558955848, 59.8475752864033, -96.7984095681459, 82.4916113168001","k",TRUE,-0.0909090909090909 +"pcor.mat",12,"90.1167266536504, -66.6625558398664, 39.782078191638, -58.8765672873706, -59.9938517436385, -76.4870832674205, -10.5842749588192, -75.7783581502736, 1.28461210988462, -34.5959145110101, 50.9478696621954, -96.5802219230682","38.6262435931712, -94.669465906918, 56.7374847829342, 36.0493461135775, -54.2134216055274, -63.6453815735877, 81.5788346808404, -68.2411943562329, -22.1247639041394, 92.5449587870389, 35.5207106098533, 94.1242534667253","86.8828876875341, -60.6638357974589, -8.42275521717966, -64.6387516520917, -62.6291708089411, 40.5554509721696, 6.27670022659004, 24.3925095535815, 30.6437145452946, 9.16047729551792, -63.2885267492384, -17.5928950775415","s",TRUE,0.261481371449354 +"pcor.mat",18,"80.5951167363673, 90.9240923356265, 70.6974952481687, 68.0134673137218, -44.9470512103289, 25.955663016066, 30.7497585657984, -91.8298844713718, -4.40605725161731, 49.3009329773486, -78.929325286299, -78.4197290893644, 44.3274276796728, -61.9072982110083, 16.9208872597665, 88.0656720604748, -0.423743482679129, -22.9118093848228","31.6178977955133, 6.30270089022815, 87.8026704769582, -79.791863868013, -2.2237554192543, -26.5245907008648, 91.646106634289, -67.9212915245444, 32.4714999180287, 76.9008807372302, 92.0271085575223, 37.951097311452, 55.0852465443313, 81.3659423030913, -61.8186100851744, -34.2142827343196, 3.76891982741654, 9.98605671338737","94.6255694609135, -84.6232280135155, -26.6939069610089, -79.9416828900576, 61.19120195508, 4.79885442182422, -36.1860592849553, 71.0645910352468, -88.2137383334339, -8.42098467983305, 58.1183904316276, -15.7302843872458, -4.05891095288098, 85.9798874240369, 94.7344854008406, 7.95916928909719, 78.0328324530274, -99.0391628816724","k",FALSE,-0.107524911773377 +"pcor.mat",7,"-38.9586756005883, -57.8867371194065, -68.1198546662927, -89.4594067241997, 70.7473307847977, -35.7670163270086, 52.0461404696107","21.6805159114301, -28.8543162867427, -22.0741868950427, -84.8189734853804, -35.3580724913627, 19.6727192029357, 21.0121315903962","66.0285493824631, -4.54495996236801, 64.9962153751403, 74.2479239590466, 59.3966994900256, -13.1802632007748, 10.3553391993046","s",TRUE,0.253320198552449 +"pcor.mat",9,"-6.78211716003716, -79.588529560715, -65.7252383418381, 45.60412671417, 98.0520688928664, -76.6070755198598, -40.7307191286236, -14.1458517406136, -83.4068476222456","-41.9686838053167, 40.0618359446526, -71.2534620892256, -78.1008904334158, 13.2995546329767, 44.5248483214527, -82.3847197927535, -89.4571373704821, -79.4600131455809","-85.7230886816978, -13.998108310625, 66.9168075546622, 29.5824715401977, -86.4490587729961, 90.6398146878928, 32.4118531774729, 27.7746527921408, 80.8882680721581","p",FALSE,-0.28294999490249 +"pcor.mat",13,"-87.399728782475, 40.3655833564699, -3.77177731133997, -0.913261342793703, 84.5598533283919, -57.672530086711, 70.6847531720996, 17.5953175872564, -43.7333907932043, -24.1470513865352, 71.5449669864029, -51.1317191179842, 20.0356021057814","-39.3181677907705, 76.6436085104942, 45.0167378876358, -12.2507677879184, -11.5627334453166, -64.4468226004392, 81.8960891570896, -71.4755731634796, -82.4792180676013, -31.5537444315851, 22.1059046685696, -33.5309320129454, 48.856098158285","-25.2732687629759, -77.4636949412525, -31.5821984782815, -97.6564433425665, -5.07994783110917, -54.0312268771231, -50.5725503899157, 4.37337355688214, -9.34875644743443, 70.4601784236729, 40.7617360819131, 92.1488650143147, -10.1492855232209","k",FALSE,0.494775334448826 +"pcor.mat",5,"-95.295644691214, 85.2518345229328, 70.6566654611379, -15.488860104233, -39.7784407250583","54.2502315249294, 28.1581053044647, -68.6268703080714, -3.80988898687065, 53.7825032602996","-3.1055589672178, 6.64212079718709, 43.7012503389269, 17.2084089368582, -85.3145365137607","s",TRUE,-0.458831467741123 +"pcor.mat",16,"97.809230722487, -14.316190360114, -84.721079049632, -18.7376644462347, -25.5602215882391, 17.7533380687237, 39.1872539184988, -94.0707533620298, 2.72555686533451, 22.7984459139407, 59.4628068618476, -40.8906124997884, -92.1079889405519, 29.8243676312268, -12.0696670375764, -89.7928544320166","26.7640289384872, -96.4622846804559, -40.3722857590765, -80.3130167070776, -68.9347126986831, 98.9100785925984, 31.9554898422211, 64.5670853089541, -50.01574116759, -97.6768167689443, -87.454877840355, -74.6697645168751, -17.0667306985706, -20.0176582206041, 61.2935196608305, -60.0398785434663","42.3937499523163, 46.829612692818, -93.9524796325713, -63.3410033304244, 87.3350779991597, 9.56030515953898, -6.86939819715917, 6.62593231536448, 30.0475670956075, -67.5459566526115, 12.8623825497925, 19.4047554861754, 17.8637056145817, -45.1789702754468, -44.4462891668081, -58.5556023288518","k",FALSE,-0.0864597208956419 +"pcor.mat",13,"77.1156166680157, -4.95218234136701, -0.478975335136056, -88.6164400726557, 79.5374071225524, 64.5803040824831, -2.80681941658258, -79.7279377933592, 99.2951272986829, -97.9579760227352, 30.6757009122521, 1.96241005323827, -16.967974929139","-96.855311980471, -56.1395757365972, -2.78360079973936, -33.6360565852374, -44.3065817002207, -95.199401024729, -27.0363926421851, 75.0894209835678, 4.99337976798415, -7.82306902110577, -81.4332918729633, -56.5008042845875, 19.696054328233","16.2967632059008, -25.3815619740635, 94.3077141884714, 47.4075115751475, 96.9511947128922, -23.1907044071704, 38.797459891066, -97.7688763756305, -28.7548608146608, -83.8516177609563, -7.49311237595975, -26.1195019353181, 48.4767589252442","p",FALSE,-0.477487484222149 +"pcor.mat",9,"-39.2630732618272, -89.935081731528, -46.2339258752763, -89.5339810289443, -4.36198632232845, -14.5440776832402, -95.7827549427748, 93.4488965664059, 81.2002772465348","99.4978452567011, -30.0176431890577, -63.0747328046709, -54.7369061969221, 39.9523709435016, -27.1971534471959, -94.4386278744787, -78.7398369051516, 18.4704976622015","-42.4461417831481, 81.5393285825849, -52.1045574918389, -19.8012057226151, -87.6727635972202, -26.1554778087884, 5.14846704900265, 16.3954760879278, 75.12436225079","k",FALSE,0.20385887657505 +"pcor.mat",15,"60.3103106841445, 71.4415548369288, -98.9705654792488, 7.11592291481793, 10.6087463442236, 42.708487669006, 82.4820324312896, 38.3419292513281, 85.0099918898195, -0.90777650475502, -92.9779385682195, 3.21783553808928, 97.79725340195, -15.0709590874612, -88.6436254251748","59.2901791445911, -3.65023575723171, -0.826246337965131, -92.2944152727723, 4.78945928625762, -35.9777873847634, -4.00528195314109, 14.427507808432, -36.5650984458625, -30.6801207829267, -33.1895301584154, -72.0329152885824, 88.569199340418, -63.0710757337511, 81.6133069805801","-4.55778324976563, 49.8842949513346, -24.1089406423271, 15.2178956661373, 93.4157602954656, -14.0120008029044, 74.634336354211, -76.262500602752, -0.484065152704716, -24.2140971589833, 55.4016582202166, 59.3731869477779, 79.561612335965, -26.1603471823037, -32.2228459641337","p",TRUE,0.111079544613507 +"pcor.mat",12,"-47.1727962139994, -62.7806689590216, 14.7163263522089, 98.5433207359165, -2.45944913476706, -48.7231005448848, 15.0826691649854, -78.9477611426264, -66.5948192588985, 8.53210580535233, 33.7848087307066, -11.1786916386336","-53.4802015405148, -67.8791525308043, 16.3833658210933, 8.16084523685277, -68.3082328177989, 52.1591320168227, -94.9673681054264, -51.7830446828157, 48.8592490553856, 80.6429937947541, 18.254310823977, 21.4851890690625","59.5537723042071, 28.640017285943, -53.3816957380623, 52.5868681725115, 61.431689793244, 38.7933161575347, 63.6210044380277, 74.1345513146371, -31.347640696913, -11.0894621815532, -53.0158845707774, 53.0884329695255","k",FALSE,-0.138443731048635 +"pcor.mat",6,"16.9672078453004, 39.5416527055204, -65.5000091996044, -90.130511764437, 63.6201905552298, -18.7544235493988","-81.3643315806985, 87.5242207664996, -87.3709872830659, -94.47445650585, 80.7427565567195, 97.7012349292636","21.0985390935093, -19.1841311287135, 61.7898017633706, -90.6381107866764, 61.5531626157463, 50.346623826772","s",FALSE,0.58925565098879 +"pcor.mat",7,"-56.6911320667714, 14.7237893659621, 72.7042480837554, 67.854171898216, 54.2756285984069, 87.7428719308227, -62.4983601737767","56.7447266541421, -63.2602260448039, 95.9155341144651, 79.549733037129, -31.7429569549859, -96.1661211680621, 89.6558737382293","17.7951748482883, 52.8001375962049, -17.0254016760737, -0.180792575702071, -69.1782949492335, 5.72048868052661, -73.80879400298","p",TRUE,-0.344955719900739 +"pcor.mat",14,"8.34259777329862, -90.7544204033911, 53.8198739290237, -73.6186733935028, 65.3159111272544, -54.8385083675385, -56.6149288788438, 93.1464713532478, -49.6990147978067, -62.7166502177715, 26.090932963416, 59.4254573341459, -78.5409053321928, 13.1633264012635","71.73405229114, 47.2987382672727, -66.5379968006164, 80.1759538240731, -32.3648356366903, 10.4439327027649, -84.9242614582181, 98.0132193304598, 31.8165130913258, -75.4577403888106, 27.8047663159668, -52.8659251984209, -61.3233786541969, -31.609858199954","92.3250074964017, 41.1538690794259, -70.4804343637079, -33.9494093786925, 67.3102808184922, 30.5022850167006, 14.392489567399, -66.8610816355795, -21.4584674686193, -87.7356766723096, 86.1648599617183, 34.3186971265823, -45.2394630759954, -97.3335643764585","p",TRUE,0.0376321132257061 +"pcor.mat",19,"17.2792347613722, 44.7029660455883, 7.22097363322973, -65.7868965063244, -75.2946712076664, -75.9451765101403, -65.4915338382125, -42.1579808928072, 0.180424936115742, 60.9645693097264, -79.4751405715942, -88.1112538278103, -3.82754770107567, 11.970756854862, -89.807746373117, -75.4269581288099, -83.210919983685, -49.4484897702932, -79.4092588126659","98.0341942049563, -77.4498141836375, 28.0400432180613, -31.759634707123, -8.49162279628217, -77.7130985166878, -44.0454395022243, -40.247108368203, 44.3426605779678, 48.202803870663, 13.207955705002, 27.6490168180317, -3.62952486611903, -15.9190153237432, -34.1904443688691, -1.11497580073774, 10.264601605013, 39.9211245123297, 27.739332895726","88.2835000287741, 33.0788629129529, 66.6329775005579, -58.9400433935225, -67.8360211662948, -23.8581227138638, -64.4136915449053, -71.0973926819861, -6.4570713788271, 5.39726838469505, -64.308940153569, -80.775932315737, 17.806462245062, 64.6042937878519, 25.6625287234783, -53.9103304501623, 10.1242880802602, 31.6518820822239, 71.827148180455","p",TRUE,0.0548011187422948 +"pcor.mat",15,"-48.3876196667552, -26.4751517679542, 86.0122847370803, -2.21008872613311, 88.2522213738412, 36.0168526880443, 53.617551876232, 46.2094876449555, -55.7492116466165, -48.1529265176505, -27.9851477127522, 62.0271205436438, 6.54048435389996, 65.1294771116227, -97.3066220059991","88.3713206741959, 70.3678138088435, -17.6713398192078, 92.8743582218885, 67.6384199876338, -56.5470991190523, 28.6562576889992, -89.9442651774734, 14.1420055180788, -39.6874803584069, -68.7506389338523, -46.1653867270797, 54.8760372679681, 31.6477505024523, -74.1190653759986","-50.7720490451902, 13.1769198458642, 60.0184863433242, 69.6465944871306, -4.16778987273574, 42.1332813799381, 44.0076574683189, 47.2968339920044, 47.09054636769, -90.304255951196, 90.9836431499571, 61.1754382494837, -95.954512199387, 65.8738845027983, 18.4467539191246","p",FALSE,0.155278581425428 +"pcor.mat",12,"66.9760071672499, -10.0718723144382, 98.4006015583873, 49.9737814068794, 93.0611060000956, -30.8278535492718, -49.5318784378469, -74.5468678884208, 53.2779390923679, 45.9250777494162, 7.21664810553193, 98.5868971794844","86.4792299922556, 66.300771990791, -30.303956894204, 99.7657214757055, 21.8715326860547, -0.453599169850349, -49.4858743157238, 95.0286555103958, -75.6651264615357, 61.6245118435472, 50.6951719522476, 73.4736283775419","-76.645670318976, -46.4482659008354, 14.1620874870569, -42.584248399362, -53.2975015696138, 54.3731088284403, 94.7233782615513, 5.24166952818632, 33.9543189387769, -39.5664878189564, -64.9096461012959, 64.3044523429126","k",TRUE,-0.029027606770737 +"pcor.mat",5,"90.8192429691553, 48.4106589574367, -21.8404297251254, 41.0448144190013, -83.0681975465268","-59.1780140064657, -51.5384333673865, -47.804808197543, 12.2319002635777, 15.4189415741712","87.9196766763926, 56.3696804456413, 10.8711638953537, -25.8778809569776, -61.6596679203212","p",FALSE,0.828266806248407 +"pcor.mat",15,"-84.2769027221948, -99.7776164673269, 53.0052073765546, -56.7098737228662, -87.9683969076723, -51.0782906785607, -35.9742659609765, 17.2527201939374, 58.1052905414253, 79.0114177856594, -98.0878078378737, 49.7950758785009, -84.3974281102419, -79.6418719459325, 82.9541291110218","91.2282381206751, 32.1592024061829, -55.6543642189354, -73.2480760663748, 2.29297978803515, 88.1192316766828, 70.9258356131613, 8.78023901022971, -54.8915889114141, -16.0259561147541, -62.4688476789743, 35.7657310552895, -85.5574174318463, -78.2423210795969, 57.0005943533033","68.9237471204251, 97.5910210981965, -70.7898926921189, 78.3896393608302, -26.9685154780746, 31.1476676724851, -7.25077791139483, 4.25968733616173, 71.4906623121351, 99.7103612869978, -70.5109211150557, -29.5995627064258, -89.8151689674705, -61.3775999750942, -23.73201623559","s",TRUE,0.131094606641465 +"pcor.mat",12,"-4.51542986556888, 65.3962709475309, 54.7027637250721, 21.8017288018018, -45.6481758039445, 56.3114468473941, -10.0910985376686, -33.9759476948529, 47.1306453458965, -81.5762444864959, -15.2306498959661, -55.8099669404328","78.4110291860998, 51.8248929642141, -74.8319068457931, -27.2911807522178, 99.4782904628664, 96.8407794833183, 88.3730117697269, 51.7726821359247, 34.6810360439122, 94.3698732182384, -27.2285795770586, 60.5969968717545","-56.935870507732, 35.1825864054263, 46.9766597729176, -0.979113671928644, -0.491952011361718, 2.96344561502337, -53.3740632236004, 63.3763818070292, 98.6882844939828, 32.3614825028926, -9.01708984747529, -89.2050859052688","k",FALSE,-0.238461538461539 +"pcor.mat",16,"-86.2841431982815, -18.3129501063377, 60.0204044952989, 49.4004330597818, 73.2034908607602, 36.0958587378263, -26.9164501689374, 99.3937272578478, 99.4885763153434, -15.9275187179446, -64.6454212721437, -25.9472228586674, 35.9230092726648, 25.0261219218373, 17.5404471345246, 1.84494755230844","96.1923027876765, -42.1271054539829, -8.16392744891346, -97.7614040952176, -10.3897859342396, 63.9586094766855, -50.9310736320913, 82.2031420189887, 72.7375000715256, -22.3871399648488, 57.6591491699219, 90.738725150004, -46.6567573137581, 94.6342563722283, -29.7158366069198, -79.2119293473661","-22.4795233458281, -96.3848259765655, 21.2546060327441, 68.0201687850058, -97.928561642766, -67.2587384004146, 44.8108606506139, 82.0129224099219, 24.2342098616064, -86.4289211574942, -79.5525341294706, 19.2005013581365, -51.4744527172297, -63.8537698891014, 17.4904732964933, -32.1932288818061","p",FALSE,-0.0517037216543802 +"pcor.mat",9,"-12.2494653332978, 81.3471322413534, 15.8859042916447, -40.0486988015473, 52.4177443701774, 19.3593227304518, -47.6214892696589, 98.4649391379207, 73.2301543932408","89.4672878552228, -82.9613993875682, -66.7588278185576, 78.6925439257175, -4.60034948773682, -52.7979515027255, 2.19829431734979, 72.0490128267556, 86.0512541607022","33.8618124369532, 90.739763667807, -55.6767753791064, 39.5474712364376, 83.0445552710444, 34.4050417654216, -59.1911187861115, -8.19138023070991, 99.0859573241323","p",FALSE,-0.198035626518398 +"pcor.mat",10,"47.6879670284688, 16.5959696285427, -63.4765389375389, -27.5170926470309, -22.5022290833294, -43.0537707172334, 70.5259828362614, 59.2826380394399, -88.5750241577625, -1.89512646757066","-61.3072986714542, -26.0851273313165, -8.67939637973905, -27.971677435562, -40.7435014378279, 1.29813449457288, 2.31690336950123, 16.4261620491743, -52.7925265487283, -89.1311551444232","52.5048244278878, 4.67872102744877, -46.2626181542873, -45.9650584962219, -50.2988358028233, 87.9835510160774, 56.6933359019458, 96.3448523078114, 53.302510920912, 1.91744468174875","p",FALSE,0.0988233148075562 +"pcor.mat",9,"14.4472865387797, -47.3339173942804, 88.0170038435608, -31.5219953190535, 46.918716840446, 56.6940610762686, 6.99824644252658, 98.6299303360283, -5.93640897423029","22.6194951217622, -77.684145513922, 75.3283645957708, -40.9434220287949, -38.5339342523366, -91.2029369268566, -63.4814173448831, 10.7932053040713, -49.4684089906514","-33.6434269323945, 73.0934476479888, -23.9013602025807, -76.148905325681, 60.0582375656813, 70.3553961124271, 7.24662998691201, -66.3810072466731, -94.6542747784406","s",TRUE,0.541229427257326 +"pcor.mat",14,"62.3325610999018, 28.3598528243601, 45.8982207346708, -8.46395660191774, -63.4389164857566, 72.4040941335261, 0.539024919271469, 91.1112579517066, 16.1043775267899, 68.5833586845547, -90.9464060328901, -99.2442855145782, 17.0317857526243, -9.96274407953024","-4.58235912956297, 11.521205957979, -75.3375723026693, -5.17353126779199, -40.0790630374104, -70.08021697402, 53.5009195562452, -58.0623977351934, -9.79966381564736, -35.5031280312687, 68.6820048838854, -48.3796393033117, 10.2691211737692, 52.6988474652171","41.5283095557243, -6.18213326670229, -20.2820646576583, -43.5107395984232, 97.0502740703523, 60.2817252743989, 1.80356446653605, 48.0388806201518, 13.3720958605409, -19.7484199889004, 65.0038605555892, 86.6087830625474, 84.9961121100932, -55.2010769490153","p",FALSE,-0.496536277317825 +"pcor.mat",11,"-86.8348072748631, -68.1555027607828, 93.7882163096219, -17.574486322701, -3.01832188852131, 82.4596357531846, -70.7045842893422, -41.0055582877249, 85.1761696860194, -76.0164870880544, 9.26548577845097","78.6481990013272, 33.5281310137361, -46.5702877379954, 13.5015867650509, 11.9400870520622, 28.7497514858842, -32.9607792664319, -34.5967058558017, 46.3658351451159, 53.1044125556946, 88.4551724884659","8.02730321884155, -14.3242678139359, 10.4656010866165, 44.1013956442475, 41.8432073201984, 16.2981065455824, -42.1405011322349, -81.4176644664258, 41.9636760372669, -95.8132732659578, -96.6605862602592","s",FALSE,-0.187531875709659 +"pcor.mat",15,"-8.95890998654068, 87.6476715318859, -82.3296630755067, 54.1639633011073, -56.9908442441374, 32.6043246779591, -85.6081826612353, 77.9518540017307, 26.4017198700458, -99.6459340676665, -2.37713954411447, 57.1259008720517, 15.9859085921198, -21.3041906710714, -88.4612631518394","71.0004774853587, 33.6280925199389, -44.5519751403481, 61.0465653240681, 82.826607953757, -72.3422850482166, -27.0270694512874, -48.9543684292585, -13.1586199160665, -48.2837385963649, 71.7649020254612, 89.9132785387337, -46.7835825867951, -5.76893505640328, 68.2509062811732","-79.8319123219699, 4.72839176654816, -51.0409486014396, -58.6709169205278, 53.0833051074296, -70.3293783590198, 19.1716862842441, -67.5588438753039, 62.886883597821, -96.4109890162945, -34.4456045888364, 45.6756661646068, 47.4764776416123, 7.42012783885002, 38.5514346882701","s",TRUE,0.0110289747628682 +"pcor.mat",16,"31.4061987679452, -74.9066208954901, -64.9867978878319, -5.39299356751144, -53.42126484029, -47.4726263433695, 69.5169975049794, 31.62314100191, -22.9675776790828, -74.656882788986, -1.33912023156881, -98.8822244573385, -35.7455586083233, -33.464961964637, -3.55721861124039, -27.8399859089404","72.7164791896939, -83.5368575528264, 64.1068436671048, 3.18035068921745, 71.0855689365417, -68.9065222628415, 88.6347917374223, 84.7157137468457, -38.3024057373405, 8.57474114745855, -65.9063815139234, 43.8279079273343, -6.10163295641541, 61.0187361482531, 2.19916221685708, -9.51254032552242","56.0140502639115, 56.2448440585285, -48.0950287077576, -38.731576455757, -71.3526351843029, -26.7311075236648, 50.0080749392509, 39.7566744126379, -0.389600452035666, -6.86149629764259, -87.0373306330293, -5.545165669173, -14.8602196481079, -45.7474006805569, 10.8187668025494, 45.559770334512","k",TRUE,0.236643191323985 +"pcor.mat",6,"43.2217205408961, 95.0128023047, -37.1413607615978, -85.5048784054816, -17.2799117863178, 35.998792340979","8.15750281326473, 43.2605781126767, -44.8291454464197, -31.1379416380078, -44.7567201219499, -44.5435838773847","-28.5342446528375, 59.9700956605375, 71.0424310062081, -25.7011258974671, -79.6189298853278, 28.7746171001345","k",TRUE,0.607142857142857 +"pcor.mat",10,"63.2382842712104, -45.6831192597747, -55.7130093686283, -82.2273524012417, -10.8993649948388, -20.6117415335029, -72.7630480192602, -77.4749230127782, 53.6859362386167, 68.9426238182932","30.9459066949785, -80.7866416405886, -47.3474097438157, 49.9985641334206, -84.2809103894979, -56.8257133476436, -13.4179298300296, 60.9060937073082, 48.940838733688, -62.3239307198673","-73.7048507202417, -57.31729445979, 14.9673992302269, -14.3290285952389, -76.3574062846601, -60.4541322682053, -16.2746643647552, -28.6148637533188, 18.4534307103604, -83.0491851549596","s",TRUE,-0.193126854288765 +"pcor.mat",9,"-36.237419815734, -82.6313697267324, -45.2068409416825, 28.2838310115039, -8.59123645350337, 64.9153559468687, -53.2393038272858, 62.8279895056039, 1.16134048439562","-10.1885996758938, -91.6434466373175, -46.7915282119066, 25.4895669408143, -24.0784865338355, 58.5600736085325, -44.0702077001333, -98.0394726619124, 76.2519818730652","33.8238641154021, 7.84905035980046, 36.8167491164058, -17.6727590151131, 9.43915518000722, 5.15828183852136, 92.3964754212648, -85.2526424452662, -63.7069202959538","p",FALSE,0.398179069149688 +"pcor.mat",13,"78.1919818371534, 64.493830408901, 0.710873352363706, -40.3782351408154, 57.4935470242053, 38.2916694041342, -41.3470767438412, 76.0839499533176, 27.3725191596895, 28.8496494758874, 21.4308275841177, -26.0073396842927, 38.606214011088","16.4913782849908, 27.8782834298909, -80.1846226677299, -72.8203158825636, -16.3325851783156, 86.8600406683981, 93.3527871966362, 14.9770261719823, -45.6588900648057, -87.0777580421418, 13.9018434099853, -22.1736597828567, -12.0512451045215","-71.655789623037, 14.8334824945778, -16.8137946166098, -60.0538752041757, 17.0944395940751, 22.4857289344072, -77.132256841287, -55.0677491351962, 2.21382677555084, 69.3236303050071, 39.8013096302748, -39.7288813255727, -63.2540795020759","s",TRUE,0.336736697396128 +"pcor.mat",13,"91.7842994909734, 38.721524970606, 39.1705478075892, 18.6643098015338, -4.83868648298085, 96.8743856530637, -8.04941062815487, 88.7948990333825, -42.6608783658594, 74.295567907393, 20.754674077034, 20.6958107184619, 7.28423306718469","39.8056766949594, -61.7218984756619, -1.59168504178524, 4.02580439113081, 60.1681916043162, -89.8049416486174, -35.8231709338725, 78.1130255199969, -55.8174833655357, 51.9783590454608, -36.2147870473564, 35.5141086038202, -8.96845734678209","4.79736779816449, -56.6321770660579, -76.5336334705353, -22.4140492267907, 77.5082608219236, -61.9375938083977, -6.95173270069063, 19.7686547413468, -30.8583251200616, 47.0094705931842, -54.2295054998249, -98.6059594433755, 87.8028795588762","k",TRUE,0.212316868169448 +"pcor.mat",15,"-3.59630105085671, 86.7999098729342, -17.786830663681, -92.8564656991512, -51.1485965456814, -14.4706445280463, -17.7462406922132, -28.2284520566463, 58.7217133492231, 79.4202568475157, 94.2491712979972, -15.5174071900547, -10.2361090481281, 66.6180044878274, -50.6200913805515","65.4638954438269, 6.78580459207296, -35.6246003415436, 58.6391407065094, 18.2316683232784, 86.3036005757749, 46.5730607975274, -84.4369672238827, -44.6714565623552, 17.6646849140525, 37.9040233790874, 32.2640858590603, 77.358628436923, 55.9946102555841, -33.5247005801648","-19.0743586514145, 82.9343199264258, -8.59537380747497, 14.3348595593125, -41.50315746665, 12.1748448815197, -52.9024983756244, 52.8367889579386, -65.2377155609429, 24.2413009516895, -35.3585127275437, 26.4716796576977, 47.1821424551308, -15.6605173368007, -48.333586147055","p",TRUE,-0.0118283348531814 +"pcor.mat",6,"24.3941873777658, 0.587183143943548, 50.1822246704251, 61.6280217655003, 74.6993770357221, -69.6933365892619","-72.6307827513665, 21.0318620782346, -32.1439458057284, 26.9628962501884, -2.04706066288054, 33.2147478125989","66.891982126981, -18.3136829175055, 88.7454390525818, 78.3952571917325, -97.2121218219399, -20.8632645197213","s",FALSE,-0.303802497166359 +"pcor.mat",14,"-77.750310394913, 86.9882957544178, -85.0523100234568, -36.57017191872, -18.1189219001681, 20.1568298507482, 87.3199927154928, -10.1865636650473, 87.327975500375, -17.7946219686419, 4.59059923887253, 19.7666067630053, -31.7012812476605, 52.6644026394933","-60.2974510286003, 74.7249050065875, 1.42830195836723, -15.9695675596595, -83.7907467503101, 55.462152371183, 41.3278543855995, 89.4937683828175, -57.9569500405341, 74.0428008139133, -79.0337625425309, -49.0267637185752, 97.498970804736, -30.8440355118364","-91.0899322014302, 73.1682816520333, 92.4029916524887, -80.4349666461349, -33.0292509868741, -17.2952547669411, -51.6502045560628, 81.4240960869938, -72.4618446547538, -26.8657810520381, -4.80628688819706, 72.3387493286282, 2.85462928004563, 23.4467320144176","k",TRUE,0.000509880332891465 +"pcor.mat",13,"10.7691071461886, 65.1007527951151, -12.0915657840669, 91.6448481846601, -53.240419505164, -69.8381493799388, 21.602482162416, -34.3285651411861, 43.1247111409903, -37.4003404285759, 94.0640051383525, -65.0122064165771, -7.96503899618983","-85.3995600249618, 67.8450697101653, -56.2912890221924, 58.0509331542999, 36.6984612308443, 87.1452712919563, 49.0658250637352, -52.1726700011641, 94.9811044149101, -53.7899555172771, 39.8667695466429, 98.3075775206089, 63.3846609387547","-46.4738335926086, 37.4508975539356, 44.48222653009, 8.24846290051937, -69.1236611455679, -95.8152562379837, -3.39012276381254, -2.47371718287468, -11.9899280369282, 43.2109453715384, 2.20609768293798, -49.9354481697083, -95.7224021200091","p",FALSE,0.380657823856592 +"pcor.mat",5,"15.9143696073443, 48.3970512636006, 23.7569111865014, 83.6479561869055, -89.9238623213023","-20.0500118546188, 93.1261721998453, -91.0053466912359, -23.429145431146, 45.976064959541","-2.69081904552877, -4.5110234990716, -33.4870064165443, -74.1843503434211, 2.36937236040831","k",FALSE,0.218217890235992 +"pcor.mat",6,"10.1451388094574, -90.6787392683327, -87.4421800021082, 20.2668400015682, 78.3513565082103, 20.7683491986245","-97.6740748155862, 10.7196703087538, -54.752997867763, 80.7648414280266, 12.498453585431, 29.1912749875337","-63.6234064586461, -45.7921910565346, -50.1311025116593, -91.5211007930338, 16.7567258700728, 85.7384174596518","p",FALSE,0.236960037693682 +"pcor.mat",12,"73.2413066085428, -14.7738272324204, 50.0003031920642, 45.0548450928181, -48.7516783643514, -23.1134415604174, -87.6020579133183, 30.5087967775762, 82.4424541555345, 72.7492412086576, 32.3323079384863, 85.7122719287872","-9.44385454058647, -7.42488116957247, 3.06755122728646, 35.4948386084288, 69.3501094356179, -19.1765882074833, 95.9793315734714, 29.2394527699798, 53.3461356069893, 11.7002569604665, -71.7540245968848, 20.5835649278015","66.2635098677129, 48.2205909211189, 81.5142437815666, -31.1989811249077, 5.75581910088658, 93.6992627568543, 72.9302003979683, 30.9292090125382, -55.1979901269078, -78.7769370246679, 14.8034851066768, 37.4370891135186","p",TRUE,-0.48727199671024 +"pcor.mat",10,"52.8255486860871, 34.2574729584157, 44.7404673323035, 52.2620148025453, -69.898310629651, -85.9551533591002, -52.2192012518644, -56.3183640595526, -19.7211066260934, -6.08869907446206","-67.6190298050642, 75.8668028283864, 74.6253774967045, -66.1169764585793, -81.1506592668593, -33.249074826017, -21.2896263692528, -97.763530863449, -54.6630097553134, -96.6868148185313","-35.384417232126, 13.2294847629964, 22.9882229119539, -58.4000170230865, 88.3519669994712, 59.8886359948665, -30.7637225370854, 40.6464832834899, -62.5224160030484, -0.506686419248581","p",TRUE,0.492210961830229 +"pcor.mat",8,"18.1551295798272, -8.32464881241322, -99.8132115229964, 18.6201244592667, -53.1589215621352, 70.2180631458759, -36.3900125026703, 92.1965328045189","6.02451944723725, -68.5814322903752, 70.58563423343, 1.00183109752834, 16.1975951399654, 64.5838780794293, -84.6291496884078, -54.131712205708","80.0181794445962, -12.9483319818974, -3.88606782071292, -48.0255630798638, -3.62709653563797, 31.62224679254, 57.1325340308249, -93.3892488945276","p",TRUE,-0.141482085540883 +"pcor.mat",17,"90.1813358999789, -3.33601352758706, -70.5867488868535, -40.8890372607857, 58.0897845327854, 8.4102772641927, 31.2019024044275, 67.8843731526285, -5.85478777065873, 93.743189284578, -21.4788604527712, 48.0386326089501, -42.5454632379115, -78.037649858743, 5.827397108078, -59.5929707866162, 22.9059528559446","46.3524929713458, -42.5642458721995, -69.567626202479, 91.2107714917511, 80.4405058268458, -83.3648740779608, -5.59279890730977, 67.8364232182503, 9.23628495074809, -45.9923652466387, -2.29323050007224, 92.1013004146516, 34.326039114967, -10.8744602650404, 89.988622488454, -23.287376947701, 72.6627949625254","48.8092821557075, -84.7605162765831, -68.7700709793717, -67.7357694599777, 25.1485624350607, 61.709990631789, 29.2394532822073, 47.8424397762865, 37.0008739177138, -47.5637663155794, -14.6964757237583, -69.9305152054876, -54.4029568322003, 80.0897337496281, 9.39622772857547, -1.27441040240228, 74.3666623719037","s",TRUE,0.270551782409472 +"pcor.mat",13,"-68.030820786953, 48.6679933033884, 51.8114904407412, 78.5725246183574, 18.9902665093541, 25.0479029957205, 56.8353782407939, -4.79650879278779, -87.2707166243345, -64.176924712956, -56.511168833822, 41.7948929592967, 79.8323729075491","87.0083963032812, 12.2851114254445, -48.7783022690564, 2.98262075521052, 61.5149905905128, 72.0769232138991, -33.8758388534188, 19.778781151399, -12.315073935315, -95.3089885413647, -40.8825332764536, -50.1593578606844, -29.2145641520619","82.5196304824203, 86.4081613719463, -63.7102510314435, 82.9122426919639, 86.7011873517185, 1.18320896290243, -7.11194663308561, 31.899410719052, -69.8009483516216, -57.3877718299627, 2.83222463913262, -17.2023222781718, -38.1276280619204","p",FALSE,-0.215982700387935 +"pcor.mat",12,"-36.3307877443731, 74.7712590266019, -79.8354192636907, 93.8916243612766, -50.0289557501674, -54.7662570606917, -38.7290718965232, -84.6648510545492, 71.2978508323431, 88.4917345829308, 32.1320930030197, 76.4375317841768","2.62319510802627, -97.154287295416, 21.7567156534642, 95.8672656677663, -0.763413123786449, -9.49476859532297, 83.9058271143585, -38.3374994620681, -16.9302582275122, -85.5358060449362, -83.2731044851243, -18.7622617464513","-76.2503104750067, 36.5515212062746, 48.5381714068353, 72.03823258169, 36.652302602306, 29.980877507478, 21.0754222236574, -96.8017131090164, -66.5918422862887, -10.5546385981143, 91.4459123276174, -84.6182245295495","k",TRUE,-0.161695275103975 +"pcor.mat",13,"65.4542396776378, 2.08085202611983, -88.9037624932826, 52.2526708897203, -38.4136536624283, -13.373964605853, -48.226101975888, 93.4839099645615, 39.563751546666, 69.0497747156769, -94.8003361001611, 24.9876524321735, 25.2306204754859","82.8150092158467, -9.80691406875849, -84.2437265440822, -48.5185658093542, 93.8153511844575, 76.507264515385, 96.1720596533269, 91.2560781463981, -86.2542728893459, -47.9744947515428, 25.5869822110981, -15.71259717457, 99.3623040616512","64.0070253051817, -90.157330268994, 78.4984151832759, 36.6091389209032, -85.7790939509869, -43.4162854682654, -81.61596711725, -7.2117717936635, 69.8510519228876, 87.7512107603252, 60.0242395885289, -77.6109307538718, 33.9131449349225","s",FALSE,0.0846468464958684 +"pcor.mat",14,"6.42584343440831, 89.4456365611404, -94.9723384808749, -4.63838037103415, 82.1529622189701, -72.2434451803565, 21.8717840965837, 13.9814134221524, -70.8967028185725, 99.243081593886, -67.1596728730947, -69.3361242301762, -52.0885898265988, 54.4663844164461","-6.86167716048658, 63.0930243059993, 62.3814635910094, 42.8769947495311, 12.4187188688666, -55.67507436499, 68.4297569096088, 57.5610874220729, -4.82598571106791, -79.5595136005431, -55.5029585491866, -94.9160863645375, 82.0372765418142, -52.3549461271614","-96.7493511270732, 16.427826648578, 26.2085369322449, 89.924060087651, 64.0857739374042, 65.0612049736083, -50.4840951412916, -27.8882106766105, -37.310868408531, -41.0194541793317, -37.8566451836377, -97.9508240241557, -74.5396174024791, 76.8885430879891","p",FALSE,0.0312670434242096 +"pcor.mat",12,"34.8341395147145, 43.1037290487438, 82.2314764373004, -63.9271955937147, 70.3003748320043, 51.0297972708941, 95.4673350322992, 74.5106549467891, -71.5771752875298, 32.5960139743984, 85.8803272712976, -12.2395237442106","-27.241831831634, -76.5246210154146, 86.3751742523164, 74.9675445724279, 63.8482879847288, 14.7356034722179, -30.9328155592084, 73.2200371101499, 26.5261144377291, 42.3744561616331, -80.7972604874521, 95.1648845802993","30.9194989036769, -29.2449895292521, -75.1953874249011, -97.2041368950158, -63.0337142385542, -96.9185112509876, -72.140100877732, 50.4067888017744, 80.1865959074348, 69.9119384400547, 28.0939280521125, -78.1314740888774","p",FALSE,-0.344081701794653 +"pcor.mat",17,"-32.3364136740565, -74.5505046565086, 64.3489994108677, 95.3302425798029, -47.4365599453449, -99.5640191715211, -81.8646350875497, -10.4291386436671, -46.2970128748566, -66.2438121624291, 3.38349812664092, 46.3537188712507, 50.3833524882793, 76.8161817919463, -35.9225623309612, -30.2367287687957, -15.6686681322753","-85.6091414112598, -74.5855379849672, 31.7983427084982, 12.1914628893137, -76.0027903132141, -25.2544173505157, -53.2312866300344, -66.4824201725423, -35.0571169052273, 25.0753607135266, 57.0668096188456, 97.4866581615061, -34.1166456695646, 70.7655222155154, -25.6891251541674, -99.2252895608544, 30.7619682978839","44.1535466350615, 57.7384070493281, -42.7488908171654, -81.2754278071225, 97.9185460601002, 35.2168054319918, -26.9714017864317, -93.0728284176439, -60.7041460927576, -99.858339689672, -53.829790558666, 85.15021414496, -98.6793769989163, -86.0895386897027, 51.4472865033895, -15.630559111014, -28.9994670078158","k",TRUE,0.261679778734634 +"pcor.mat",10,"89.7360242903233, 47.9975900612772, 36.5392371080816, -51.0348361451179, 7.82818463630974, -6.9301129784435, -75.5731589626521, 47.0917036756873, -58.8109106291085, 33.4785438142717","54.0308193303645, 41.3668432738632, 98.2857145369053, -14.9101806804538, 30.7341996114701, 92.3570320941508, -35.8356348704547, -91.0546428058296, 77.7767921797931, 13.7820704840124","-65.3565419837832, -24.2730437777936, 13.4862332604825, -97.8464429732412, 91.0171907860786, -52.4954450316727, -31.7320866975933, 33.8117491919547, 49.1156910546124, -42.7486607804894","p",FALSE,0.109506018207148 diff --git a/tests/unit/computations/partial_correlations_test_data/pcor_rec_blackbox_test.csv b/tests/unit/computations/partial_correlations_test_data/pcor_rec_blackbox_test.csv new file mode 100644 index 0000000..a1558a0 --- /dev/null +++ b/tests/unit/computations/partial_correlations_test_data/pcor_rec_blackbox_test.csv @@ -0,0 +1,101 @@ +"function_name","count","x","y","z","method","rm","result" +"pcor.mat",13,"-89.1427156049758, -70.2603165991604, 52.4590492714196, -57.2846714872867, -26.3361851219088, -0.000567594543099403, 17.9622953757644, -64.1319836024195, 39.2497098539025, 20.8931459579617, 74.1897551808506, -35.3126015048474, -55.9552798978984","47.3745858296752, -68.9209029078484, -31.9765134248883, -45.0486478861421, -85.1716816890985, 65.432888455689, 19.2734406329691, 87.9198614973575, -68.2076670229435, -38.1280574947596, 52.754437038675, -73.271297942847, 67.7760738879442","-78.9239354431629, -85.3030194528401, -20.3673145733774, -22.6184178609401, 16.5013548452407, 18.5637861024588, 96.5889988467097, 36.156284250319, 35.1589790545404, -73.1023930944502, -50.7484216243029, 41.8345319107175, -47.8776978328824","s",TRUE,-0.0325789017360908 +"pcor.mat",18,"64.013504376635, 53.1150240916759, -77.8307237662375, -33.1533540505916, -13.6034480296075, 93.2804300449789, -46.3470680173486, 17.427362408489, -66.663983091712, 4.23776390962303, 77.7521491982043, -3.10332304798067, -61.5989458281547, -13.5284000542015, 7.71856023930013, 89.0885920263827, -35.3556916583329, -95.9261478390545","-35.6941626407206, 41.877265740186, 69.6430462878197, 64.2008605413139, -59.4343301840127, 79.7348674852401, 61.3097242545336, 9.0187989640981, 51.7997904680669, 45.9638734348118, 41.0136769060045, -73.4738738741726, -47.0628185197711, 57.6456079725176, -2.5194660294801, -53.7642545998096, 18.9816055819392, -54.8453160561621","-55.6193302385509, 63.7390994466841, 85.8707739040256, -77.2866525221616, 29.9346832558513, -24.1673247888684, -61.8650471325964, 19.6793714072555, -60.1225732360035, 12.063248641789, -51.2589928694069, -41.5690367575735, -58.2409225869924, 37.0499972254038, -9.5894614700228, 2.70932037383318, 56.0281782411039, -39.5718538668007","s",FALSE,-0.0406099988399257 +"pcor.mat",18,"56.9747474044561, 55.6495593860745, -36.6002877708524, 61.6530403494835, -11.1073412466794, -70.2817751094699, 34.5848673954606, -40.1073589455336, 22.4086964968592, -34.9243235308677, -31.6865964792669, -81.9148152600974, -7.01485783793032, -0.294096721336246, -19.4921953603625, -55.370055232197, 33.2327066455036, -65.3158040251583","-13.8067095074803, -83.5349172819406, -12.6486663240939, -8.66694604046643, 86.2149322871119, 60.7879475224763, -73.3523240312934, 34.5676413737237, -4.87876599654555, 18.5876747593284, 89.8641737177968, -72.3610286135226, -32.7410754282027, 27.3812759667635, -45.791448559612, 80.4758272599429, -76.585627021268, -36.1723904497921","49.7649329714477, -56.3095143996179, 92.719935066998, -17.5905505660921, -34.11227283068, 8.69290293194354, 51.1472036596388, -52.1146316081285, 18.716375855729, 44.0671648364514, -81.5424187108874, 17.9900521878153, 83.1838137004524, -36.2067365087569, 6.58109332434833, 33.7925261352211, 43.0417039897293, -24.2647144943476","s",FALSE,-0.326536819677434 +"pcor.mat",16,"-27.0166050642729, 25.6161904428154, 18.0927545763552, -97.8309890720993, 83.225102070719, 41.1768469493836, 52.531653130427, 90.7089609187096, 45.9316388238221, 44.4865159224719, -65.3349446132779, -63.2685597520322, -63.5370531585068, -20.7488086074591, -21.5636825188994, 70.8061812445521","89.9359612260014, -24.0224461536855, -88.7139027938247, 33.0363452900201, 89.8786358069628, 72.6242340635508, -33.4980245213956, 18.209078675136, -98.510293290019, -45.0928752310574, -56.3632266130298, 36.2233767751604, 24.8566114809364, 41.1938649136573, 98.1815246865153, -31.8091072142124","-83.4077485837042, 67.2828705515712, -46.1948299780488, 44.6621300186962, -68.071247311309, 69.5944227278233, -72.4484366830438, -19.5607443805784, -10.3165994398296, -38.1281117442995, 92.4075163435191, 27.103430358693, 7.35686598345637, -68.8319525215775, -35.345290414989, -22.3868970759213","s",FALSE,-0.265133848612843 +"pcor.mat",16,"62.6007101032883, -31.4669733867049, -1.02701690047979, 89.1588015947491, 89.4676355645061, 72.146376548335, -48.5373890493065, 27.8906877152622, 84.9362426437438, 22.9195747990161, -0.477400049567223, -55.017494270578, 16.0360316745937, -40.5794956721365, -76.5294233337045, 99.2066614329815","32.9774639569223, 99.4476685766131, 19.444046029821, -87.4037025496364, -49.6627463493496, -79.1786927729845, 69.5362528320402, -42.9193137213588, 88.4448691736907, 96.2614195886999, 99.7840614058077, -30.6426415685564, 52.9562290757895, -75.0585582572967, -92.611052794382, 67.6107355859131","99.6344119310379, -43.7020116951317, -14.1780937556177, 29.8982600681484, 67.7026726771146, 12.5789169687778, 5.22102704271674, 47.3305377177894, -10.2066915482283, 44.158894661814, 16.616974119097, 67.5522029399872, 10.2959530893713, 2.26272544823587, -24.1713169030845, -81.4385517500341","k",FALSE,0.00170394349277265 +"pcor.mat",17,"-43.6796560417861, -52.3636834230274, -32.689885282889, 29.6649182215333, 70.8439419511706, -78.822322236374, -7.2787752840668, -37.7680024132133, -9.91778918541968, 45.4824290703982, -1.96461407467723, -10.768158081919, -71.2498663924634, 23.788648378104, 81.2093367334455, -29.8483492340893, 42.7211379166692","54.4582905247808, 2.90980748832226, -49.7587429825217, 90.0067212525755, -62.2195774223655, 49.5222055818886, 64.7147801704705, -30.6467334739864, 43.9336315263063, -24.3989814538509, 93.3036277070642, -5.72181586176157, -51.6447205562145, 71.4890264440328, 35.5837760493159, -39.9753636214882, 64.5502870436758","-86.5306067280471, -2.41111759096384, 17.8865785710514, -66.7758407536894, -45.9109436254948, -99.6982547920197, 9.07599623315036, -49.4003663770854, -50.0817076303065, -52.7716889511794, 9.27476715296507, -1.14214201457798, -14.0225571580231, -46.0782612208277, 97.4677567835897, -70.6407638732344, -99.1432263981551","p",TRUE,0.181498113250831 +"pcor.mat",14,"-4.90339081734419, 72.9479049798101, 46.9192364253104, 92.628131667152, 56.5425228327513, 9.90580045618117, -61.4272825885564, 33.6759516969323, 81.8828757386655, 77.3399218916893, 67.7938031964004, 94.0767949912697, 82.1635375730693, -75.240781577304","21.4586552698165, -36.5642888005823, -38.3646843954921, -49.740192014724, -81.6746165510267, -19.1730958875269, 41.690668836236, -23.3391010668129, -78.1760632060468, 77.431286778301, 70.3289750963449, 39.766847435385, 3.62148815765977, 10.747673548758","17.7063988521695, 90.0697568897158, -93.0447159335017, 85.4728828649968, -18.4118247125298, -9.85785778611898, 70.2666643075645, -97.7391937281936, 54.3527046684176, -51.4394805766642, 39.0205434523523, -25.6685835774988, -14.7992834448814, 81.1236747074872","p",FALSE,-0.21445656018345 +"pcor.mat",15,"-76.8736738711596, -35.8509941026568, -48.1256343889982, -9.57123078405857, -72.2122399602085, -6.98926709592342, -31.3491718843579, 74.3320995010436, 54.9155391287059, -46.5018933173269, 51.3019453268498, 17.0857016462833, -99.9900157097727, -17.3139852005988, -85.5749220587313","-97.7581001352519, -97.2672377247363, -27.3427923209965, -1.21665806509554, -8.05344670079648, 21.0991605184972, -54.0536799002439, 95.0312656350434, 23.7382718361914, -98.728937190026, -80.2528636530042, -59.6354123670608, 20.57563085109, 90.7686199061573, 19.6493336930871","-38.4617018979043, 28.0117013957351, -74.6210919693112, -34.3639187980443, -28.0167740304023, -46.0126685444266, 37.4354778788984, 41.0279822535813, 80.8140107430518, -94.7356107644737, -91.9223290402442, -34.4586562830955, 90.2129443362355, 76.8807396292686, 80.0070276483893","k",FALSE,0.250746493151452 +"pcor.mat",7,"-66.7350410018116, 53.2712059561163, -43.8059563748538, -44.9987557251006, -67.2016165219247, 17.9846523795277, 77.0553316920996","-60.9613332431763, 99.9187499284744, -27.7070741169155, 14.3416102975607, -30.3307291120291, 5.47642167657614, -52.1709493827075","5.97298364154994, 70.3716231975704, -16.247583553195, 92.1821707859635, -80.4653100203723, -7.83197041600943, -66.9684283901006","k",TRUE,0.241209075662211 +"pcor.mat",18,"94.380710972473, -10.0111012812704, 85.1797969080508, -11.4021800924093, -99.7310696635395, -57.7457085251808, -34.8813917022198, 37.1367971878499, -57.5784567277879, 17.9361389484257, -20.6278771162033, -42.8640173282474, -62.0093574281782, 10.7791527640074, -42.4936424475163, 31.2512285541743, -6.26639267429709, 50.0969529151917","-35.3466201107949, 51.2795441318303, -9.26330988295376, 13.2600117940456, -70.25914513506, 24.8688437044621, -95.0622762087733, -78.8527075666934, 12.5830010510981, -40.3181817382574, -62.1690618339926, 65.2437281329185, 45.4263514839113, -20.7038762047887, 19.835890410468, -16.3075220305473, 10.154833085835, 31.5655742771924","-47.5495883729309, 31.0941505245864, -11.7687386460602, 47.550484072417, 19.7334853932261, 59.856044081971, 38.4999468922615, -29.1666014585644, -77.8870329726487, 75.2757792361081, -17.8823099005967, -93.2831089943647, -73.6799968872219, -36.3856283016503, 21.7388028744608, -41.7408903129399, -21.9456392340362, 5.71200731210411","p",TRUE,-0.153597125133576 +"pcor.mat",15,"-83.3593410905451, 33.8860942982137, 17.5660732202232, 44.9482867959887, 3.40795461088419, -98.6972364131361, -57.9294378869236, 49.1425832267851, -81.4089713152498, 22.2765766549855, -15.2078927494586, 64.7270672023296, -77.9068617615849, -13.5009704623371, -41.0612959414721","99.4176274631172, -28.8145580794662, 24.2324681021273, 70.3792416490614, 55.1269176416099, -46.6643883381039, 13.5340544395149, -81.6506992094219, 7.58900847285986, 76.2214359361678, -21.0444819182158, -19.7882746346295, -77.8520357329398, -60.2931962348521, -30.685667693615","-7.22203818149865, -62.021238123998, -34.5286842435598, -67.4230553675443, -62.1439764276147, -99.2042647209018, 7.09792547859251, -88.8404605910182, 79.5403079129755, 68.8092908356339, -87.8009828273207, -11.8701789993793, -40.4039821587503, -50.0366650056094, 61.1679489258677","p",TRUE,0.134662220884382 +"pcor.mat",18,"36.4026268012822, -40.8853712491691, 70.4748715274036, -93.3088712859899, -31.1693381983787, 44.5810994133353, -29.8538233153522, -55.898003000766, -83.1116971559823, 95.2613319735974, -86.9839164428413, -99.6416668407619, -71.7915004119277, 86.375200515613, 73.0707975570112, 9.46915657259524, 30.3790966048837, -32.9175783321261","20.2463141642511, 35.3073101490736, 96.6094605624676, 38.2854318711907, 20.0914516113698, -76.2724542990327, -2.5904384907335, 28.1036204192787, 27.5573522783816, 41.8770257849246, 17.9975534323603, -53.0143345706165, -1.92109285853803, -43.1404768954962, -89.0914923511446, -75.2585290931165, 31.8984744139016, -81.7458927165717","99.058653973043, -73.045432055369, -98.9125271327794, -10.9370147343725, 93.4558239299804, 21.3814281392843, -10.9608757775277, -94.0566421952099, 29.180516814813, 60.7905065640807, -69.4182314909995, 27.9442990664393, 16.5212750900537, -65.4938052408397, -91.3346993271261, -19.3851371761411, 54.6318108215928, 94.2573416978121","s",TRUE,-0.0480625888230071 +"pcor.mat",8,"70.9466312080622, -31.7683406174183, 25.0176505185664, -56.8918467033654, -9.20995227061212, 84.6444204915315, 66.9992076698691, -14.915213920176","-25.2351951319724, 53.1852985266596, 32.9547242727131, -82.4257594533265, -51.8481220584363, 61.490266257897, 16.8974718544632, -71.770367724821","25.6255140993744, 62.6514744479209, 2.26075490936637, -90.3473023790866, -8.56978320516646, 89.0561478678137, 3.07730589993298, 45.6199106760323","p",FALSE,0.307942034203085 +"pcor.mat",18,"23.8564316183329, -16.3905590772629, -12.3555054422468, 78.1761512625962, 49.3263760115951, 13.6127803940326, -35.0881972815841, 18.7167634721845, 47.3916597198695, 6.6052196547389, -47.4990267306566, 36.3517801277339, 77.3957766592503, -70.3038077335805, -28.512022132054, 93.2541827205569, -50.6320198066533, 2.28197425603867","4.66441703028977, 52.664560964331, 64.6692745853215, 64.0807087533176, -42.2254925593734, -28.3238022122532, 84.3502655625343, -22.6033370010555, -63.9537113253027, -82.1724142879248, -47.163494117558, 86.9036048650742, -25.5253764800727, -40.6565339770168, -64.6023235283792, 5.88995609432459, 60.3537472430617, -12.8357082139701","-7.05419671721756, 17.8630999755114, -94.5426801219583, -90.8921510912478, -52.0795451011509, 52.0008019171655, 77.9491205234081, -64.4113312475383, -13.6109072715044, -84.2732723336667, 57.4606000445783, 57.2238144930452, -17.8435018286109, 78.159570787102, -64.3654571380466, 25.7219140883535, 21.2949032895267, -89.99102874659","s",FALSE,0.098864763229466 +"pcor.mat",8,"36.1457616556436, 98.2861819211394, 40.8350063487887, 63.7187578249723, 13.0914898123592, -52.3402118124068, -13.3677611593157, 73.598525673151","79.2985305655748, -71.9141394365579, -0.420988909900188, -90.6284262426198, 72.2033147700131, 79.6287265606225, 20.301692513749, -54.6786930412054","96.6230187565088, -65.8682400360703, 26.0384120512754, -46.9612662214786, 47.5940535310656, -17.1155892312527, -45.7220804877579, -67.2774867620319","s",TRUE,-0.725794650937327 +"pcor.mat",6,"-57.665149634704, 94.4162191357464, -51.1441508308053, -52.6072693057358, -44.1887341905385, -14.2386069521308","-98.8703572191298, -9.2983465641737, -79.2660262435675, 23.2223530765623, 80.3647544234991, -58.0826134420931","81.1863256618381, 64.9427580181509, 45.6761348526925, 64.8033803794533, -40.9290973097086, -92.1668177470565","p",TRUE,0.118780545543647 +"pcor.mat",11,"40.5678772833198, 33.8221173267812, 65.0725501589477, 78.8693956099451, -35.8988873194903, -35.3420054074377, -87.4633281026036, 0.115021411329508, 67.6265092566609, 83.1133821513504, -18.3507286012173","-73.7955948337913, 29.9831629730761, 65.2690784074366, 25.2531439997256, -62.1108427643776, -47.4723324179649, 35.5791020672768, 26.2222751509398, 40.3645094949752, -91.2350233644247, -28.6233199760318","48.7291889730841, 33.8533046189696, 66.3264122325927, -19.7420272510499, -46.8001568224281, -39.1347371973097, 34.7272414714098, 65.1918939314783, 99.5216719806194, -29.0462920907885, 19.8831745423377","s",TRUE,-0.297493089362279 +"pcor.mat",11,"55.8680928312242, -76.9269882235676, -17.3182043712586, 15.2775115799159, -90.3137100860476, -99.032783228904, 13.8755587395281, -24.003914417699, 21.2662550620735, -8.40797564014792, -40.8448379952461","9.94491642341018, 76.8310205079615, -95.3446100465953, -74.8744533862919, -69.8509857058525, 6.55742576345801, 24.8502014670521, 97.212969744578, 29.4545858632773, -77.6854024268687, -80.0981419626623","14.1451966483146, -52.5070706848055, 52.3787314537913, 22.6627501659095, 5.18406489863992, 78.4387116320431, -37.6045362092555, -59.8206405062228, 97.1690027043223, 46.7755769845098, -23.1495135929435","k",FALSE,0.0919698779952353 +"pcor.mat",19,"12.6561464276165, 89.6340752951801, -86.4221294410527, -8.45101773738861, -79.0324212051928, -41.2799602374434, 41.9530363287777, 77.5156316813082, -98.2695916201919, 54.0546870790422, 18.4697377029806, -92.1382030006498, 22.3036497831345, -88.4184999857098, 87.4229540582746, 84.4335915520787, -86.3810521550477, -4.96541885659099, -4.21266416087747","77.7516108006239, 13.0087590776384, -52.281900215894, 46.1203761398792, -7.93849290348589, 30.4574410431087, -4.16998718865216, -76.5136891510338, 65.0717901531607, 41.985437553376, -10.8945969026536, -1.79670625366271, -80.059599224478, -27.9757288750261, -3.81275764666498, -40.5276663135737, -7.72571838460863, -21.2847925722599, -3.90572124160826","-16.1283437628299, -86.2985316198319, 15.8964606467634, 45.3664765227586, -10.7382515911013, -61.8415161035955, 75.2832551952451, 62.1664110571146, 14.5355282817036, 31.9144344422966, 63.7715006712824, 46.5569637250155, 20.0197615195066, 9.47772678919137, -79.8056298401207, -89.03838978149, 96.9052662607282, -3.97900892421603, -68.8863600604236","k",TRUE,-0.0783868693007469 +"pcor.mat",6,"41.7150890920311, 68.0406647268683, -56.6652314271778, -10.3111394215375, 72.7076691575348, 16.4696130901575","55.7349273469299, 33.0129407346249, -92.8235503379256, 67.6610651891679, -28.225592058152, 27.8548604343086","97.3419046029449, 92.7794307935983, 18.738874187693, -50.2989741973579, -31.1240924987942, -47.357566608116","k",FALSE,-0.0545544725589981 +"pcor.mat",7,"76.1037406977266, -51.2855937238783, -51.0953912511468, 61.8452743627131, 27.5623431429267, 32.935436675325, -23.7891209311783","-25.5972837097943, 35.7565317302942, -2.09780340082943, 31.380487093702, -65.0630551856011, -52.5524016004056, -45.8224846515805","35.1819013711065, 55.421924777329, 90.8943614922464, 65.8556955400854, -17.2470153309405, 50.2847956493497, -43.5768135823309","k",TRUE,-0.241209075662211 +"pcor.mat",14,"-86.9700414128602, -96.2525710929185, 13.2297853473574, 48.3323885593563, -42.72451386787, -64.586602896452, 26.2733123730868, -41.4743609726429, -27.5131822098047, -62.4261621385813, -16.2857410497963, 61.4362000953406, -71.6986550018191, 6.73192692920566","-1.76208755001426, 67.4144621472806, 40.1256877463311, 20.0672226957977, 75.7373407483101, -60.1804342586547, -24.0758131723851, -30.328988051042, 98.3264557551593, 18.7257033307105, -74.7150662820786, -66.4480000734329, 83.1373671069741, -83.8592982385308","-8.51446660235524, -33.5672379937023, 23.1306486297399, -71.0971800610423, -76.6779989469796, 17.668380215764, -6.54176617972553, 38.9708994887769, 36.8745916523039, 36.466611456126, -42.6107963547111, -43.292662827298, -34.305056463927, 3.72276022098958","k",FALSE,-0.237726218501727 +"pcor.mat",9,"87.9827535245568, 66.9526648242027, 77.764587290585, -63.0833296570927, 12.8970904741436, 12.7532111946493, -15.7931709196419, 76.1098874267191, -53.3998124301434","61.8036749772727, -53.057945612818, -21.9204508699477, -23.7275714520365, -81.9658347871155, 96.6755392961204, 23.4129578340799, -26.8468076363206, 11.6413829382509","6.22031539678574, -63.707418506965, -68.8293416053057, 51.3240036088973, -89.1044299583882, 96.3014227803797, 84.1399733442813, 3.21415988728404, -64.009400550276","p",TRUE,0.220999575445754 +"pcor.mat",18,"-2.85750310868025, -99.3862376082689, -96.015146560967, 63.2039456162602, -66.0570687614381, -66.0487032029778, -16.3392898160964, 93.4929385315627, -0.228785490617156, -94.138465821743, 89.7544200066477, -39.7632111795247, -60.3579618502408, -34.7465238533914, 49.7126227244735, 56.9427436217666, 69.6163312997669, -16.7142637073994","67.1196629293263, -69.1413426306099, 90.1762881316245, -33.8058187626302, 73.66002057679, 34.5961081795394, -59.5154983922839, 1.26353777013719, 48.2069759164006, -34.2219550162554, 14.3829472362995, 41.6792382951826, 39.1247006133199, -38.8760752510279, -11.6304269526154, -13.3687050547451, -5.31534324400127, -2.51060193404555","-86.3554051145911, 29.0978434961289, -95.5027301795781, 63.6454623192549, -29.499419266358, 73.207819275558, 39.0617064666003, -92.9985575377941, -51.6290077473968, 12.2396486345679, 48.3567856252193, -28.516500396654, -21.0198899265379, 53.046905528754, 44.2176911514252, 0.109824910759926, -99.0703694988042, 74.6371628716588","k",FALSE,-0.0887556361629261 +"pcor.mat",5,"24.8151850420982, -55.3720602765679, -48.1912312563509, 25.3140340093523, 7.37709770910442","27.1002457011491, 51.559735648334, 15.2347642462701, -19.9469642713666, -71.4244599919766","20.2690705657005, 10.2111615706235, 28.9990232791752, -81.5356591250747, 62.7182307653129","p",TRUE,-0.595476592392643 +"pcor.mat",10,"-80.8792762923986, -16.7048441711813, -27.4036565795541, 83.73913182877, -29.9381176009774, 53.5984759684652, -74.8886847868562, -35.0239771883935, -89.2459953203797, 42.7505305968225","55.4137516766787, -70.6881674006581, 32.317240908742, -69.2246387712657, -93.5175380203873, 42.5839690491557, 39.2618721351027, 19.604005292058, 29.0025069378316, 31.9192183203995","-57.4748635292053, -17.7012801170349, 86.0102667473257, -97.6800283882767, -33.8488628156483, -80.713168065995, 1.30178248509765, -82.9571642912924, 20.4808691516519, -23.3784267678857","p",TRUE,-0.247808971782581 +"pcor.mat",7,"-9.81413833796978, -95.0588807463646, -37.4823603779078, 96.0915867704898, 25.3856145311147, -90.2806713245809, 56.4173173159361","-17.8975068964064, -45.0020219665021, -53.689378220588, 13.3858302142471, -95.0690850615501, -45.9697632584721, 5.96692659892142","-74.4352919980884, -79.8946594353765, -36.3220115657896, 71.3168484624475, -32.7676126733422, 74.5314478874207, 47.3017191980034","p",TRUE,0.380658349962746 +"pcor.mat",7,"-12.2942595742643, -46.0883136838675, -21.6881454922259, -19.7250084485859, 54.6898206695914, -67.8715384099633, -98.035113979131","-31.2075863592327, -53.7305776961148, -96.1716986726969, 34.0433329343796, -86.3202335778624, -98.4303006436676, -81.2778456136584","-78.2337430864573, -33.7292415089905, 14.364256337285, 80.8441326953471, 14.6734802983701, -38.598564080894, -16.4908449631184","k",FALSE,0.233736747502114 +"pcor.mat",12,"65.5728437006474, -22.3883016966283, -16.1309017334133, -86.9484126102179, 55.0275014247745, 75.5027377512306, 56.8217232357711, -10.157274780795, -8.05552089586854, -95.0297535397112, 86.99438595213, 56.2756833154708","-50.9940889663994, 31.0440130997449, 55.3901108913124, 0.67323399707675, -93.814965011552, 43.19629650563, 82.1691108867526, 29.7341026831418, 23.4111852012575, -23.9989855792373, -41.8117068242282, -21.0978685878217","-94.9003085959703, 76.4557474758476, 71.228800015524, 1.28989322111011, 56.7563532851636, -74.5477284770459, -40.1864093728364, -62.3711896594614, -63.5766193736345, -34.8390635102987, -34.4627866521478, -60.8579785563052","k",TRUE,-0.0642824346533225 +"pcor.mat",16,"10.3261223994195, -66.3412994239479, -10.04778011702, 90.8491815906018, -16.8091387022287, -1.13998735323548, 8.87222946621478, 62.9582400433719, 51.0545901022851, -42.0804372988641, -72.740743868053, -98.6990892793983, 25.1725806389004, 30.7280816137791, 3.96932810544968, -57.8030949924141","60.728229675442, -74.0803788881749, -73.4922635369003, 21.5669278986752, -2.4874959141016, -42.8831906523556, -8.72258436866105, 41.053393855691, -49.3829999119043, -25.329764559865, -33.0748493783176, 64.0028734691441, -75.2295605372638, -3.0173609033227, -40.6044688075781, -90.4325042851269","-26.9309993833303, -77.9300230089575, -34.1201750095934, 18.6427622102201, -11.5215779747814, 43.2106466032565, 52.0845813211054, -27.0871427375823, 78.9493581280112, -60.0895206909627, 75.2652967814356, -64.8424350190908, 74.5653890538961, 79.290065029636, -83.871082868427, -55.8636627625674","p",TRUE,0.232814351928154 +"pcor.mat",18,"-94.2430725321174, -51.8685480579734, 21.5350433252752, 4.50745574198663, 44.5271090604365, 75.3100082743913, 36.3767127040774, 58.3390053827316, -33.6587901227176, 53.1314761377871, -90.0304151698947, 1.84677322395146, -43.2471524458379, 20.721254684031, -35.7563958037645, 44.6534116752446, 78.0897385440767, 62.626903411001","-86.8268391583115, -67.7875887136906, -20.8753589075059, -28.825512342155, 41.2515165284276, 6.46749134175479, -87.1187134645879, -87.9431148990989, -47.1682616043836, 7.15450858697295, -31.9803619757295, -45.8144799340516, 47.6873302366585, 94.4961855188012, 70.8510945085436, -10.3092920035124, 68.0197277572006, -86.2225097604096","42.146764555946, 35.4582188185304, -74.8004557099193, -69.1695068031549, 9.96355945244431, -1.00409551523626, -56.0459699481726, 57.2666853666306, -75.3820521291345, 61.0693466849625, -80.6058402173221, -28.1722619198263, 29.1725110728294, -84.9811018910259, 52.4267561268061, 3.33783319219947, 57.3508915491402, -16.6291590314358","k",TRUE,0.126881965715119 +"pcor.mat",11,"58.4281201008707, 18.3633047156036, -74.4007679168135, -70.9485304541886, -62.3421670403332, -75.4027212038636, -42.2465549781919, 45.5137318000197, -59.8607284482569, 62.6728146802634, 78.3472507726401","78.8005036301911, -11.6723335813731, 47.760496661067, 72.8375401347876, 44.0390994306654, 49.5243767276406, -49.906044267118, -93.3100801426917, 74.181916937232, 8.72853924520314, 83.0030017532408","-7.40372859872878, 19.830649998039, 32.0547481998801, -24.0255577024072, 15.4005860444158, 13.1488932296634, 8.03853832185268, -78.5669906530529, 80.1699983887374, -99.4674043729901, 40.1027225889266","p",TRUE,0.0557153883247975 +"pcor.mat",8,"-3.19936256855726, 41.1430836189538, -40.9489492420107, 32.8621160238981, -55.2679274696857, -85.6475236825645, -98.9018370397389, 37.6923420932144","-23.4679078217596, -70.4765893053263, -29.5889834873378, 73.5305113717914, 66.7411952745169, 8.31683478318155, 14.5889795385301, 72.6518555544317","78.9658954367042, -43.0149876978248, -8.42135692946613, 0.82630286924541, -0.558331841602921, -30.3489441052079, -19.2593446467072, 59.6474095713347","s",TRUE,-0.211100165460375 +"pcor.mat",12,"-46.8561482150108, 87.6810635440052, -57.6411653775722, -46.4993360452354, -35.9383462462574, -96.4581338688731, 72.101165773347, -92.8533762693405, -24.3875949177891, 81.7434745375067, 95.8580058533698, -39.7297702729702","-14.3783972598612, -62.9489183891565, -88.967556739226, 5.93087510205805, -20.3817227389663, -28.1361578963697, 98.5170270781964, -62.3654518276453, -21.2714700959623, -75.4275092389435, -45.0435093604028, -52.5260332040489","84.6728871576488, 77.3271079175174, -35.2307356428355, -63.2898768875748, -62.9697222262621, 57.5104051735252, -65.9628365654498, -77.7099144645035, -68.1009365711361, 21.6217519715428, 40.7055628951639, -11.8265327066183","p",FALSE,0.240265915193204 +"pcor.mat",14,"-65.2285707648844, 21.9669322483242, 73.5851485282183, 28.0581893399358, 34.4764126464725, -12.0250980835408, 44.0008006524295, 16.8571741785854, -32.5285179540515, 40.1795001234859, 14.344258280471, 42.7343318238854, 33.5459096822888, 17.8732588887215","-17.1958317514509, -31.969396257773, 26.989441877231, 52.442137664184, 42.9547981824726, 32.2006456553936, 80.7050887029618, 7.4744014069438, -56.099244300276, 47.6363920606673, -16.8571050744504, -45.9946841932833, -51.3697457965463, -93.8083261717111","-83.2655881065875, -35.3444519918412, 20.8411808125675, -89.538209233433, -85.8607416506857, -4.87791770137846, 16.466785594821, 71.7880600132048, -90.7291606999934, -47.3672876600176, 28.5109816584736, -6.68758857063949, -37.6607090700418, 78.6420990247279","k",FALSE,0.293285288009136 +"pcor.mat",6,"-46.0385966580361, -99.5740628801286, -29.4129090383649, 97.0183642581105, -37.6902215648443, 80.4221050348133","-88.8656401075423, -39.0352664981037, 37.8500768449157, -3.4251865465194, 16.7551717720926, -64.4463129807264","-85.469913110137, 82.1475684642792, -79.0366449858993, -17.5424363464117, -55.2734784781933, 8.78398092463613","k",FALSE,0.218217890235992 +"pcor.mat",19,"94.6966245770454, 80.9601898305118, -27.9354885220528, 32.8651154879481, -83.5247790906578, 68.0820679292083, 98.2801185455173, -51.8296324182302, 22.2090682946146, -57.0902567822486, -79.9241363536566, 82.232602359727, -31.2431594356894, 47.0965832006186, 45.9447079803795, 83.7373214308172, 43.1115242652595, -15.8762097824365, 24.6083721984178","-30.2270193584263, -18.9653075765818, 32.3881921358407, 62.3213729821146, 48.8383719697595, -64.4200759939849, -34.4498374499381, 74.7035726904869, -80.0148021429777, -72.3529085982591, 97.3054904025048, 81.4842638093978, -75.7931782398373, -36.0045140143484, 52.190304454416, -46.3511400856078, -27.5253375060856, -49.8220588080585, -94.6963192429394","-1.14815644919872, 38.8675629161298, -7.72479912266135, 80.9100962709635, 7.58379022590816, 83.3296971861273, 51.7409536056221, -33.8198636192828, -63.4376135654747, 80.6679456029087, -83.3767011761665, -82.7897766139358, -25.5388389341533, -99.9377169646323, -91.8954541441053, -75.1720157451928, 85.5636859312654, -35.8674420975149, -14.8491851519793","k",TRUE,-0.0612260637897383 +"pcor.mat",11,"43.6715835239738, 83.24592593126, 80.5671546142548, 50.718885473907, 91.4832427166402, -72.9882646352053, 1.08670038171113, 65.7646540552378, 32.857545139268, 98.8540512509644, 57.310037733987","-68.5883652418852, 57.6829582452774, 20.3366491477937, -20.9295519161969, -91.220309631899, 67.5120797473937, -84.0667628217489, -92.758432822302, 73.1769519392401, 31.0191483236849, -59.8639046307653","60.0395560264587, 49.4410765822977, -15.0798926129937, 76.642445102334, 43.1489706039429, -64.028698252514, -73.5862046014518, -11.8118531536311, -14.194271247834, 19.1962173674256, -62.6884501427412","p",TRUE,-0.239620090137985 +"pcor.mat",5,"84.436381328851, 72.004076000303, -40.9433365799487, -11.7642278783023, 36.9735128246248","92.926798760891, -99.3128840345889, -34.4348025508225, -47.6723862346262, 94.1138706635684","2.33245906420052, 59.2558087781072, -17.9977843537927, -79.5293167699128, -57.2229819372296","k",FALSE,0.0890870806374748 +"pcor.mat",13,"-52.8125622309744, 3.65753290243447, -17.9872157517821, 0.687318574637175, 48.9896171726286, -10.9520922414958, -42.2161420341581, -8.33622729405761, -52.7692852541804, 46.2861472740769, -63.7141830287874, 77.9755924828351, 69.3693526089191","-81.1979313846678, -81.2067239545286, 98.1338402722031, 81.5591927152127, 37.056217668578, -30.573401786387, 86.0113869421184, 22.4740816745907, 15.2922587003559, 4.40599746070802, 81.2510290648788, -91.3585484493524, -51.8274602945894","1.68427461758256, 35.6400829739869, 1.32666421122849, 28.9358278736472, 69.9353440199047, 22.5035205483437, 42.7461497485638, -60.8904164750129, 41.2500537466258, 72.3914569243789, -35.3465625550598, 11.877816170454, 41.2654601968825","s",TRUE,-0.432235260027861 +"pcor.mat",6,"36.2520147580653, -45.3618559986353, -3.36455763317645, 27.1406658459455, -32.130736252293, 89.6533737424761","91.0997018683702, -58.0772765446454, -45.8715479355305, -76.4125521760434, -51.5536211896688, -28.4703179262578","-59.4199031591415, 60.7980337925255, 86.4012580364943, 43.8618046697229, 27.8941972646862, -83.8361509144306","s",FALSE,0.361111111111111 +"pcor.mat",15,"-15.8772577065974, 12.7610163297504, -22.9708819650114, -71.8580039218068, -75.8046543691307, 47.7548703551292, -24.9429981224239, -31.5219290088862, -80.9420365840197, -0.135115487501025, 43.7512583099306, 82.602039212361, 32.6054238714278, 52.4210862349719, -25.4571683704853","2.32095182873309, 57.4718285817653, 91.6442870628089, -0.498835230246186, 42.3996091354638, 98.4292598906904, -69.7168925777078, 17.9197568446398, -60.0217215251178, -94.6461838204414, -56.8148406222463, -86.9362941477448, 23.4191815834492, -67.045795917511, -25.982434488833","88.8973289635032, 31.7113435361534, 1.63480490446091, 90.244840271771, 90.7815016340464, 3.64356338977814, -70.6344856880605, 20.8035066723824, 71.0505054797977, -41.0872615408152, 81.8894566036761, 27.3655611090362, -57.8210411127657, 80.1123460754752, 37.0346592739224","s",TRUE,-0.100259767542805 +"pcor.mat",17,"-8.47610384225845, -76.0521722026169, 36.9659481570125, 27.2644958924502, -63.1253079976887, -45.7246268168092, -91.299555497244, 79.9444675445557, 62.6849308609962, 77.2913023363799, -39.3468747846782, -31.9794123992324, -90.5704878270626, 3.36136179976165, 6.36215764097869, 34.7822861280292, -86.7615907918662","38.8797430787235, 87.957543740049, 27.9284121934325, -2.19381097704172, -93.5423448681831, -85.8565270435065, -1.78483547642827, 32.4997876770794, -84.6204502973706, 73.0989838484675, 46.5271977707744, 19.7806170675904, 2.54705562256277, -62.6201322302222, 47.8446535300463, 94.2804395221174, 43.5015312861651","-42.1679470688105, 44.9353978503495, 4.3509088922292, -26.6828402876854, 45.7676482386887, 34.6878333482891, 86.2517770845443, 54.4100513216108, 62.1482897084206, 93.2931664399803, 48.1029566843063, -49.8642263934016, -79.5734560117126, 82.6493532862514, -56.327466852963, 30.9423569124192, -75.3295318223536","k",FALSE,0.173343955251749 +"pcor.mat",15,"-12.115827947855, -23.5690898727626, 89.8483640048653, -76.0832019150257, 54.2692786082625, -31.3360400963575, -87.8199052065611, 62.5256759114563, -85.054659191519, 17.1253859531134, 86.8644420057535, -63.6440661270171, -2.54382686689496, -52.1825547330081, -86.5487120579928","87.855874421075, 11.8729826528579, 58.581341477111, -76.1566527653486, -54.7422365285456, -76.9119961187243, -51.5453061554581, -8.55491124093533, 41.1004772875458, 4.76148361340165, 27.0399220753461, -93.3408699929714, 43.2594683486968, 97.5612652488053, -27.2557357791811","-25.7235449738801, 98.6250419635326, -33.5626783315092, -76.8353697378188, 5.53134111687541, 11.2494019791484, 53.6648289300501, 58.8696902617812, 74.8723800759763, -83.5754144005477, -2.30161873623729, -0.636160280555487, -32.3559941258281, 9.53439651057124, -96.3161264080554","k",TRUE,0.203279781135864 +"pcor.mat",10,"-88.6766928713769, -99.7512009460479, 36.3819673191756, -78.1028961297125, 26.9118153490126, 8.51810127496719, 25.9507332928479, -2.06361203454435, 61.8650326039642, 53.7325612269342","44.7955575305969, -23.4671366401017, 67.7940716035664, -61.1387377139181, -77.4398116860539, -9.6572854090482, 29.9326512031257, -50.3714796155691, -29.1814834810793, 77.4120518472046","53.5698696039617, -33.2331659272313, 29.2508830782026, 30.7888105046004, -75.6014665588737, -21.6426336206496, 49.8834919184446, -31.1990667134523, -49.9284417368472, 52.3363713175058","s",TRUE,0.461061427308285 +"pcor.mat",16,"-83.9224993251264, -98.9909253083169, 41.2098858971149, 40.319947944954, -22.3131684586406, -4.72695007920265, 71.1222126148641, -73.4416379127651, 19.5892326999456, 51.5542230568826, -59.8082218784839, 83.2985554821789, -73.8052498083562, 81.1506273690611, -62.3849936295301, -65.9225380979478","-22.3732136655599, -76.6401294153184, -14.9951294530183, 17.2481925226748, 36.7321326863021, 30.8906201738864, -36.0778030008078, 27.3618204053491, -25.5863894242793, -77.5616424623877, 71.2329083122313, 92.7250783890486, 18.0521029513329, 20.1161385513842, -37.0644447859377, 74.0854462143034","63.1498238537461, 67.5584438722581, -2.90364040993154, 86.5714854560792, 80.625259783119, -83.5466306190938, -89.0106877777725, -11.5085924509913, 95.1227321755141, 26.8994387704879, -36.1149361357093, 13.4227952454239, -22.9821641929448, -81.5770137123764, 99.1007934324443, -24.637895449996","k",TRUE,0.00117273434060522 +"pcor.mat",12,"-30.6264939717948, -51.3202500529587, -91.8923989403993, 71.2572688702494, -50.3101641312242, -43.5825682710856, 68.9194604754448, -62.2129834722728, 74.4652757886797, 10.5425884481519, 39.5969454664737, 43.8930058851838","-3.49326506257057, -40.981019847095, -1.93292065523565, -55.6563400197774, 30.0884651020169, 5.1898842677474, -57.6860777102411, 92.7335068583488, 4.2677782010287, -73.3723870944232, 37.4122668523341, 97.195135615766","0.661881873384118, -77.0722641143948, 80.916742188856, 84.3042341526598, 60.0523283239454, -15.8854037057608, -41.8266508728266, 90.2447595726699, 78.685249062255, -98.4303796198219, 53.0869376845658, 97.2957746591419","s",TRUE,-0.309246046562802 +"pcor.mat",8,"43.6172465793788, -28.597435541451, 49.3047020863742, 23.4949984122068, 55.2344744559377, 50.4013098310679, -61.0196806956083, -13.4925350546837","-28.0354068614542, -58.4258052520454, 91.4929724764079, 5.28197917155921, 6.99444795027375, -37.798970984295, 14.2839945387095, 93.0717419367284","65.1908750180155, -76.971767982468, 78.4851297736168, -27.8413584455848, -14.1628153156489, -37.5672557391226, -58.8539640419185, 51.5223218593746","p",FALSE,-0.457862137278786 +"pcor.mat",5,"7.32707628048956, -97.153510292992, -58.0732712056488, 5.43075683526695, -50.3950014710426","-60.6064203195274, 70.2952838502824, 7.70989404991269, -90.4186028987169, -91.9082495383918","-27.0302977412939, -71.8158513773233, 60.5169426649809, -51.2578745372593, -71.4558880776167","p",FALSE,-0.811742988157054 +"pcor.mat",12,"-31.9100445136428, -15.4961660970002, 15.1833237614483, -96.8389748129994, 34.0211338829249, -26.4210654422641, -74.7212948743254, -73.451091023162, -48.6799724400043, 43.3380767703056, 33.7157489266247, -12.9206308629364","-25.7156142964959, -31.4395876601338, 27.1043297369033, -64.4430394284427, 69.3326181732118, 11.0314972698689, -56.0946275945753, -5.32854660414159, 61.7247725371271, -58.0520442686975, -98.0296685360372, -83.8190475013107","65.2698641642928, 23.0271658394486, -30.5951663292944, 87.3122846707702, -96.8001709319651, 80.7323037646711, 92.8447821643203, -96.3675274513662, -33.6922558955848, 59.8475752864033, -96.7984095681459, 82.4916113168001","k",TRUE,-0.0909090909090909 +"pcor.mat",12,"90.1167266536504, -66.6625558398664, 39.782078191638, -58.8765672873706, -59.9938517436385, -76.4870832674205, -10.5842749588192, -75.7783581502736, 1.28461210988462, -34.5959145110101, 50.9478696621954, -96.5802219230682","38.6262435931712, -94.669465906918, 56.7374847829342, 36.0493461135775, -54.2134216055274, -63.6453815735877, 81.5788346808404, -68.2411943562329, -22.1247639041394, 92.5449587870389, 35.5207106098533, 94.1242534667253","86.8828876875341, -60.6638357974589, -8.42275521717966, -64.6387516520917, -62.6291708089411, 40.5554509721696, 6.27670022659004, 24.3925095535815, 30.6437145452946, 9.16047729551792, -63.2885267492384, -17.5928950775415","s",TRUE,0.261481371449354 +"pcor.mat",18,"80.5951167363673, 90.9240923356265, 70.6974952481687, 68.0134673137218, -44.9470512103289, 25.955663016066, 30.7497585657984, -91.8298844713718, -4.40605725161731, 49.3009329773486, -78.929325286299, -78.4197290893644, 44.3274276796728, -61.9072982110083, 16.9208872597665, 88.0656720604748, -0.423743482679129, -22.9118093848228","31.6178977955133, 6.30270089022815, 87.8026704769582, -79.791863868013, -2.2237554192543, -26.5245907008648, 91.646106634289, -67.9212915245444, 32.4714999180287, 76.9008807372302, 92.0271085575223, 37.951097311452, 55.0852465443313, 81.3659423030913, -61.8186100851744, -34.2142827343196, 3.76891982741654, 9.98605671338737","94.6255694609135, -84.6232280135155, -26.6939069610089, -79.9416828900576, 61.19120195508, 4.79885442182422, -36.1860592849553, 71.0645910352468, -88.2137383334339, -8.42098467983305, 58.1183904316276, -15.7302843872458, -4.05891095288098, 85.9798874240369, 94.7344854008406, 7.95916928909719, 78.0328324530274, -99.0391628816724","k",FALSE,-0.107524911773377 +"pcor.mat",7,"-38.9586756005883, -57.8867371194065, -68.1198546662927, -89.4594067241997, 70.7473307847977, -35.7670163270086, 52.0461404696107","21.6805159114301, -28.8543162867427, -22.0741868950427, -84.8189734853804, -35.3580724913627, 19.6727192029357, 21.0121315903962","66.0285493824631, -4.54495996236801, 64.9962153751403, 74.2479239590466, 59.3966994900256, -13.1802632007748, 10.3553391993046","s",TRUE,0.253320198552449 +"pcor.mat",9,"-6.78211716003716, -79.588529560715, -65.7252383418381, 45.60412671417, 98.0520688928664, -76.6070755198598, -40.7307191286236, -14.1458517406136, -83.4068476222456","-41.9686838053167, 40.0618359446526, -71.2534620892256, -78.1008904334158, 13.2995546329767, 44.5248483214527, -82.3847197927535, -89.4571373704821, -79.4600131455809","-85.7230886816978, -13.998108310625, 66.9168075546622, 29.5824715401977, -86.4490587729961, 90.6398146878928, 32.4118531774729, 27.7746527921408, 80.8882680721581","p",FALSE,-0.28294999490249 +"pcor.mat",13,"-87.399728782475, 40.3655833564699, -3.77177731133997, -0.913261342793703, 84.5598533283919, -57.672530086711, 70.6847531720996, 17.5953175872564, -43.7333907932043, -24.1470513865352, 71.5449669864029, -51.1317191179842, 20.0356021057814","-39.3181677907705, 76.6436085104942, 45.0167378876358, -12.2507677879184, -11.5627334453166, -64.4468226004392, 81.8960891570896, -71.4755731634796, -82.4792180676013, -31.5537444315851, 22.1059046685696, -33.5309320129454, 48.856098158285","-25.2732687629759, -77.4636949412525, -31.5821984782815, -97.6564433425665, -5.07994783110917, -54.0312268771231, -50.5725503899157, 4.37337355688214, -9.34875644743443, 70.4601784236729, 40.7617360819131, 92.1488650143147, -10.1492855232209","k",FALSE,0.494775334448826 +"pcor.mat",5,"-95.295644691214, 85.2518345229328, 70.6566654611379, -15.488860104233, -39.7784407250583","54.2502315249294, 28.1581053044647, -68.6268703080714, -3.80988898687065, 53.7825032602996","-3.1055589672178, 6.64212079718709, 43.7012503389269, 17.2084089368582, -85.3145365137607","s",TRUE,-0.458831467741123 +"pcor.mat",16,"97.809230722487, -14.316190360114, -84.721079049632, -18.7376644462347, -25.5602215882391, 17.7533380687237, 39.1872539184988, -94.0707533620298, 2.72555686533451, 22.7984459139407, 59.4628068618476, -40.8906124997884, -92.1079889405519, 29.8243676312268, -12.0696670375764, -89.7928544320166","26.7640289384872, -96.4622846804559, -40.3722857590765, -80.3130167070776, -68.9347126986831, 98.9100785925984, 31.9554898422211, 64.5670853089541, -50.01574116759, -97.6768167689443, -87.454877840355, -74.6697645168751, -17.0667306985706, -20.0176582206041, 61.2935196608305, -60.0398785434663","42.3937499523163, 46.829612692818, -93.9524796325713, -63.3410033304244, 87.3350779991597, 9.56030515953898, -6.86939819715917, 6.62593231536448, 30.0475670956075, -67.5459566526115, 12.8623825497925, 19.4047554861754, 17.8637056145817, -45.1789702754468, -44.4462891668081, -58.5556023288518","k",FALSE,-0.0864597208956419 +"pcor.mat",13,"77.1156166680157, -4.95218234136701, -0.478975335136056, -88.6164400726557, 79.5374071225524, 64.5803040824831, -2.80681941658258, -79.7279377933592, 99.2951272986829, -97.9579760227352, 30.6757009122521, 1.96241005323827, -16.967974929139","-96.855311980471, -56.1395757365972, -2.78360079973936, -33.6360565852374, -44.3065817002207, -95.199401024729, -27.0363926421851, 75.0894209835678, 4.99337976798415, -7.82306902110577, -81.4332918729633, -56.5008042845875, 19.696054328233","16.2967632059008, -25.3815619740635, 94.3077141884714, 47.4075115751475, 96.9511947128922, -23.1907044071704, 38.797459891066, -97.7688763756305, -28.7548608146608, -83.8516177609563, -7.49311237595975, -26.1195019353181, 48.4767589252442","p",FALSE,-0.477487484222149 +"pcor.mat",9,"-39.2630732618272, -89.935081731528, -46.2339258752763, -89.5339810289443, -4.36198632232845, -14.5440776832402, -95.7827549427748, 93.4488965664059, 81.2002772465348","99.4978452567011, -30.0176431890577, -63.0747328046709, -54.7369061969221, 39.9523709435016, -27.1971534471959, -94.4386278744787, -78.7398369051516, 18.4704976622015","-42.4461417831481, 81.5393285825849, -52.1045574918389, -19.8012057226151, -87.6727635972202, -26.1554778087884, 5.14846704900265, 16.3954760879278, 75.12436225079","k",FALSE,0.20385887657505 +"pcor.mat",15,"60.3103106841445, 71.4415548369288, -98.9705654792488, 7.11592291481793, 10.6087463442236, 42.708487669006, 82.4820324312896, 38.3419292513281, 85.0099918898195, -0.90777650475502, -92.9779385682195, 3.21783553808928, 97.79725340195, -15.0709590874612, -88.6436254251748","59.2901791445911, -3.65023575723171, -0.826246337965131, -92.2944152727723, 4.78945928625762, -35.9777873847634, -4.00528195314109, 14.427507808432, -36.5650984458625, -30.6801207829267, -33.1895301584154, -72.0329152885824, 88.569199340418, -63.0710757337511, 81.6133069805801","-4.55778324976563, 49.8842949513346, -24.1089406423271, 15.2178956661373, 93.4157602954656, -14.0120008029044, 74.634336354211, -76.262500602752, -0.484065152704716, -24.2140971589833, 55.4016582202166, 59.3731869477779, 79.561612335965, -26.1603471823037, -32.2228459641337","p",TRUE,0.111079544613507 +"pcor.mat",12,"-47.1727962139994, -62.7806689590216, 14.7163263522089, 98.5433207359165, -2.45944913476706, -48.7231005448848, 15.0826691649854, -78.9477611426264, -66.5948192588985, 8.53210580535233, 33.7848087307066, -11.1786916386336","-53.4802015405148, -67.8791525308043, 16.3833658210933, 8.16084523685277, -68.3082328177989, 52.1591320168227, -94.9673681054264, -51.7830446828157, 48.8592490553856, 80.6429937947541, 18.254310823977, 21.4851890690625","59.5537723042071, 28.640017285943, -53.3816957380623, 52.5868681725115, 61.431689793244, 38.7933161575347, 63.6210044380277, 74.1345513146371, -31.347640696913, -11.0894621815532, -53.0158845707774, 53.0884329695255","k",FALSE,-0.138443731048635 +"pcor.mat",6,"16.9672078453004, 39.5416527055204, -65.5000091996044, -90.130511764437, 63.6201905552298, -18.7544235493988","-81.3643315806985, 87.5242207664996, -87.3709872830659, -94.47445650585, 80.7427565567195, 97.7012349292636","21.0985390935093, -19.1841311287135, 61.7898017633706, -90.6381107866764, 61.5531626157463, 50.346623826772","s",FALSE,0.58925565098879 +"pcor.mat",7,"-56.6911320667714, 14.7237893659621, 72.7042480837554, 67.854171898216, 54.2756285984069, 87.7428719308227, -62.4983601737767","56.7447266541421, -63.2602260448039, 95.9155341144651, 79.549733037129, -31.7429569549859, -96.1661211680621, 89.6558737382293","17.7951748482883, 52.8001375962049, -17.0254016760737, -0.180792575702071, -69.1782949492335, 5.72048868052661, -73.80879400298","p",TRUE,-0.344955719900739 +"pcor.mat",14,"8.34259777329862, -90.7544204033911, 53.8198739290237, -73.6186733935028, 65.3159111272544, -54.8385083675385, -56.6149288788438, 93.1464713532478, -49.6990147978067, -62.7166502177715, 26.090932963416, 59.4254573341459, -78.5409053321928, 13.1633264012635","71.73405229114, 47.2987382672727, -66.5379968006164, 80.1759538240731, -32.3648356366903, 10.4439327027649, -84.9242614582181, 98.0132193304598, 31.8165130913258, -75.4577403888106, 27.8047663159668, -52.8659251984209, -61.3233786541969, -31.609858199954","92.3250074964017, 41.1538690794259, -70.4804343637079, -33.9494093786925, 67.3102808184922, 30.5022850167006, 14.392489567399, -66.8610816355795, -21.4584674686193, -87.7356766723096, 86.1648599617183, 34.3186971265823, -45.2394630759954, -97.3335643764585","p",TRUE,0.0376321132257061 +"pcor.mat",19,"17.2792347613722, 44.7029660455883, 7.22097363322973, -65.7868965063244, -75.2946712076664, -75.9451765101403, -65.4915338382125, -42.1579808928072, 0.180424936115742, 60.9645693097264, -79.4751405715942, -88.1112538278103, -3.82754770107567, 11.970756854862, -89.807746373117, -75.4269581288099, -83.210919983685, -49.4484897702932, -79.4092588126659","98.0341942049563, -77.4498141836375, 28.0400432180613, -31.759634707123, -8.49162279628217, -77.7130985166878, -44.0454395022243, -40.247108368203, 44.3426605779678, 48.202803870663, 13.207955705002, 27.6490168180317, -3.62952486611903, -15.9190153237432, -34.1904443688691, -1.11497580073774, 10.264601605013, 39.9211245123297, 27.739332895726","88.2835000287741, 33.0788629129529, 66.6329775005579, -58.9400433935225, -67.8360211662948, -23.8581227138638, -64.4136915449053, -71.0973926819861, -6.4570713788271, 5.39726838469505, -64.308940153569, -80.775932315737, 17.806462245062, 64.6042937878519, 25.6625287234783, -53.9103304501623, 10.1242880802602, 31.6518820822239, 71.827148180455","p",TRUE,0.0548011187422948 +"pcor.mat",15,"-48.3876196667552, -26.4751517679542, 86.0122847370803, -2.21008872613311, 88.2522213738412, 36.0168526880443, 53.617551876232, 46.2094876449555, -55.7492116466165, -48.1529265176505, -27.9851477127522, 62.0271205436438, 6.54048435389996, 65.1294771116227, -97.3066220059991","88.3713206741959, 70.3678138088435, -17.6713398192078, 92.8743582218885, 67.6384199876338, -56.5470991190523, 28.6562576889992, -89.9442651774734, 14.1420055180788, -39.6874803584069, -68.7506389338523, -46.1653867270797, 54.8760372679681, 31.6477505024523, -74.1190653759986","-50.7720490451902, 13.1769198458642, 60.0184863433242, 69.6465944871306, -4.16778987273574, 42.1332813799381, 44.0076574683189, 47.2968339920044, 47.09054636769, -90.304255951196, 90.9836431499571, 61.1754382494837, -95.954512199387, 65.8738845027983, 18.4467539191246","p",FALSE,0.155278581425428 +"pcor.mat",12,"66.9760071672499, -10.0718723144382, 98.4006015583873, 49.9737814068794, 93.0611060000956, -30.8278535492718, -49.5318784378469, -74.5468678884208, 53.2779390923679, 45.9250777494162, 7.21664810553193, 98.5868971794844","86.4792299922556, 66.300771990791, -30.303956894204, 99.7657214757055, 21.8715326860547, -0.453599169850349, -49.4858743157238, 95.0286555103958, -75.6651264615357, 61.6245118435472, 50.6951719522476, 73.4736283775419","-76.645670318976, -46.4482659008354, 14.1620874870569, -42.584248399362, -53.2975015696138, 54.3731088284403, 94.7233782615513, 5.24166952818632, 33.9543189387769, -39.5664878189564, -64.9096461012959, 64.3044523429126","k",TRUE,-0.029027606770737 +"pcor.mat",5,"90.8192429691553, 48.4106589574367, -21.8404297251254, 41.0448144190013, -83.0681975465268","-59.1780140064657, -51.5384333673865, -47.804808197543, 12.2319002635777, 15.4189415741712","87.9196766763926, 56.3696804456413, 10.8711638953537, -25.8778809569776, -61.6596679203212","p",FALSE,0.828266806248407 +"pcor.mat",15,"-84.2769027221948, -99.7776164673269, 53.0052073765546, -56.7098737228662, -87.9683969076723, -51.0782906785607, -35.9742659609765, 17.2527201939374, 58.1052905414253, 79.0114177856594, -98.0878078378737, 49.7950758785009, -84.3974281102419, -79.6418719459325, 82.9541291110218","91.2282381206751, 32.1592024061829, -55.6543642189354, -73.2480760663748, 2.29297978803515, 88.1192316766828, 70.9258356131613, 8.78023901022971, -54.8915889114141, -16.0259561147541, -62.4688476789743, 35.7657310552895, -85.5574174318463, -78.2423210795969, 57.0005943533033","68.9237471204251, 97.5910210981965, -70.7898926921189, 78.3896393608302, -26.9685154780746, 31.1476676724851, -7.25077791139483, 4.25968733616173, 71.4906623121351, 99.7103612869978, -70.5109211150557, -29.5995627064258, -89.8151689674705, -61.3775999750942, -23.73201623559","s",TRUE,0.131094606641465 +"pcor.mat",12,"-4.51542986556888, 65.3962709475309, 54.7027637250721, 21.8017288018018, -45.6481758039445, 56.3114468473941, -10.0910985376686, -33.9759476948529, 47.1306453458965, -81.5762444864959, -15.2306498959661, -55.8099669404328","78.4110291860998, 51.8248929642141, -74.8319068457931, -27.2911807522178, 99.4782904628664, 96.8407794833183, 88.3730117697269, 51.7726821359247, 34.6810360439122, 94.3698732182384, -27.2285795770586, 60.5969968717545","-56.935870507732, 35.1825864054263, 46.9766597729176, -0.979113671928644, -0.491952011361718, 2.96344561502337, -53.3740632236004, 63.3763818070292, 98.6882844939828, 32.3614825028926, -9.01708984747529, -89.2050859052688","k",FALSE,-0.238461538461539 +"pcor.mat",16,"-86.2841431982815, -18.3129501063377, 60.0204044952989, 49.4004330597818, 73.2034908607602, 36.0958587378263, -26.9164501689374, 99.3937272578478, 99.4885763153434, -15.9275187179446, -64.6454212721437, -25.9472228586674, 35.9230092726648, 25.0261219218373, 17.5404471345246, 1.84494755230844","96.1923027876765, -42.1271054539829, -8.16392744891346, -97.7614040952176, -10.3897859342396, 63.9586094766855, -50.9310736320913, 82.2031420189887, 72.7375000715256, -22.3871399648488, 57.6591491699219, 90.738725150004, -46.6567573137581, 94.6342563722283, -29.7158366069198, -79.2119293473661","-22.4795233458281, -96.3848259765655, 21.2546060327441, 68.0201687850058, -97.928561642766, -67.2587384004146, 44.8108606506139, 82.0129224099219, 24.2342098616064, -86.4289211574942, -79.5525341294706, 19.2005013581365, -51.4744527172297, -63.8537698891014, 17.4904732964933, -32.1932288818061","p",FALSE,-0.0517037216543802 +"pcor.mat",9,"-12.2494653332978, 81.3471322413534, 15.8859042916447, -40.0486988015473, 52.4177443701774, 19.3593227304518, -47.6214892696589, 98.4649391379207, 73.2301543932408","89.4672878552228, -82.9613993875682, -66.7588278185576, 78.6925439257175, -4.60034948773682, -52.7979515027255, 2.19829431734979, 72.0490128267556, 86.0512541607022","33.8618124369532, 90.739763667807, -55.6767753791064, 39.5474712364376, 83.0445552710444, 34.4050417654216, -59.1911187861115, -8.19138023070991, 99.0859573241323","p",FALSE,-0.198035626518398 +"pcor.mat",10,"47.6879670284688, 16.5959696285427, -63.4765389375389, -27.5170926470309, -22.5022290833294, -43.0537707172334, 70.5259828362614, 59.2826380394399, -88.5750241577625, -1.89512646757066","-61.3072986714542, -26.0851273313165, -8.67939637973905, -27.971677435562, -40.7435014378279, 1.29813449457288, 2.31690336950123, 16.4261620491743, -52.7925265487283, -89.1311551444232","52.5048244278878, 4.67872102744877, -46.2626181542873, -45.9650584962219, -50.2988358028233, 87.9835510160774, 56.6933359019458, 96.3448523078114, 53.302510920912, 1.91744468174875","p",FALSE,0.0988233148075562 +"pcor.mat",9,"14.4472865387797, -47.3339173942804, 88.0170038435608, -31.5219953190535, 46.918716840446, 56.6940610762686, 6.99824644252658, 98.6299303360283, -5.93640897423029","22.6194951217622, -77.684145513922, 75.3283645957708, -40.9434220287949, -38.5339342523366, -91.2029369268566, -63.4814173448831, 10.7932053040713, -49.4684089906514","-33.6434269323945, 73.0934476479888, -23.9013602025807, -76.148905325681, 60.0582375656813, 70.3553961124271, 7.24662998691201, -66.3810072466731, -94.6542747784406","s",TRUE,0.541229427257326 +"pcor.mat",14,"62.3325610999018, 28.3598528243601, 45.8982207346708, -8.46395660191774, -63.4389164857566, 72.4040941335261, 0.539024919271469, 91.1112579517066, 16.1043775267899, 68.5833586845547, -90.9464060328901, -99.2442855145782, 17.0317857526243, -9.96274407953024","-4.58235912956297, 11.521205957979, -75.3375723026693, -5.17353126779199, -40.0790630374104, -70.08021697402, 53.5009195562452, -58.0623977351934, -9.79966381564736, -35.5031280312687, 68.6820048838854, -48.3796393033117, 10.2691211737692, 52.6988474652171","41.5283095557243, -6.18213326670229, -20.2820646576583, -43.5107395984232, 97.0502740703523, 60.2817252743989, 1.80356446653605, 48.0388806201518, 13.3720958605409, -19.7484199889004, 65.0038605555892, 86.6087830625474, 84.9961121100932, -55.2010769490153","p",FALSE,-0.496536277317825 +"pcor.mat",11,"-86.8348072748631, -68.1555027607828, 93.7882163096219, -17.574486322701, -3.01832188852131, 82.4596357531846, -70.7045842893422, -41.0055582877249, 85.1761696860194, -76.0164870880544, 9.26548577845097","78.6481990013272, 33.5281310137361, -46.5702877379954, 13.5015867650509, 11.9400870520622, 28.7497514858842, -32.9607792664319, -34.5967058558017, 46.3658351451159, 53.1044125556946, 88.4551724884659","8.02730321884155, -14.3242678139359, 10.4656010866165, 44.1013956442475, 41.8432073201984, 16.2981065455824, -42.1405011322349, -81.4176644664258, 41.9636760372669, -95.8132732659578, -96.6605862602592","s",FALSE,-0.187531875709659 +"pcor.mat",15,"-8.95890998654068, 87.6476715318859, -82.3296630755067, 54.1639633011073, -56.9908442441374, 32.6043246779591, -85.6081826612353, 77.9518540017307, 26.4017198700458, -99.6459340676665, -2.37713954411447, 57.1259008720517, 15.9859085921198, -21.3041906710714, -88.4612631518394","71.0004774853587, 33.6280925199389, -44.5519751403481, 61.0465653240681, 82.826607953757, -72.3422850482166, -27.0270694512874, -48.9543684292585, -13.1586199160665, -48.2837385963649, 71.7649020254612, 89.9132785387337, -46.7835825867951, -5.76893505640328, 68.2509062811732","-79.8319123219699, 4.72839176654816, -51.0409486014396, -58.6709169205278, 53.0833051074296, -70.3293783590198, 19.1716862842441, -67.5588438753039, 62.886883597821, -96.4109890162945, -34.4456045888364, 45.6756661646068, 47.4764776416123, 7.42012783885002, 38.5514346882701","s",TRUE,0.0110289747628682 +"pcor.mat",16,"31.4061987679452, -74.9066208954901, -64.9867978878319, -5.39299356751144, -53.42126484029, -47.4726263433695, 69.5169975049794, 31.62314100191, -22.9675776790828, -74.656882788986, -1.33912023156881, -98.8822244573385, -35.7455586083233, -33.464961964637, -3.55721861124039, -27.8399859089404","72.7164791896939, -83.5368575528264, 64.1068436671048, 3.18035068921745, 71.0855689365417, -68.9065222628415, 88.6347917374223, 84.7157137468457, -38.3024057373405, 8.57474114745855, -65.9063815139234, 43.8279079273343, -6.10163295641541, 61.0187361482531, 2.19916221685708, -9.51254032552242","56.0140502639115, 56.2448440585285, -48.0950287077576, -38.731576455757, -71.3526351843029, -26.7311075236648, 50.0080749392509, 39.7566744126379, -0.389600452035666, -6.86149629764259, -87.0373306330293, -5.545165669173, -14.8602196481079, -45.7474006805569, 10.8187668025494, 45.559770334512","k",TRUE,0.236643191323985 +"pcor.mat",6,"43.2217205408961, 95.0128023047, -37.1413607615978, -85.5048784054816, -17.2799117863178, 35.998792340979","8.15750281326473, 43.2605781126767, -44.8291454464197, -31.1379416380078, -44.7567201219499, -44.5435838773847","-28.5342446528375, 59.9700956605375, 71.0424310062081, -25.7011258974671, -79.6189298853278, 28.7746171001345","k",TRUE,0.607142857142857 +"pcor.mat",10,"63.2382842712104, -45.6831192597747, -55.7130093686283, -82.2273524012417, -10.8993649948388, -20.6117415335029, -72.7630480192602, -77.4749230127782, 53.6859362386167, 68.9426238182932","30.9459066949785, -80.7866416405886, -47.3474097438157, 49.9985641334206, -84.2809103894979, -56.8257133476436, -13.4179298300296, 60.9060937073082, 48.940838733688, -62.3239307198673","-73.7048507202417, -57.31729445979, 14.9673992302269, -14.3290285952389, -76.3574062846601, -60.4541322682053, -16.2746643647552, -28.6148637533188, 18.4534307103604, -83.0491851549596","s",TRUE,-0.193126854288765 +"pcor.mat",9,"-36.237419815734, -82.6313697267324, -45.2068409416825, 28.2838310115039, -8.59123645350337, 64.9153559468687, -53.2393038272858, 62.8279895056039, 1.16134048439562","-10.1885996758938, -91.6434466373175, -46.7915282119066, 25.4895669408143, -24.0784865338355, 58.5600736085325, -44.0702077001333, -98.0394726619124, 76.2519818730652","33.8238641154021, 7.84905035980046, 36.8167491164058, -17.6727590151131, 9.43915518000722, 5.15828183852136, 92.3964754212648, -85.2526424452662, -63.7069202959538","p",FALSE,0.398179069149688 +"pcor.mat",13,"78.1919818371534, 64.493830408901, 0.710873352363706, -40.3782351408154, 57.4935470242053, 38.2916694041342, -41.3470767438412, 76.0839499533176, 27.3725191596895, 28.8496494758874, 21.4308275841177, -26.0073396842927, 38.606214011088","16.4913782849908, 27.8782834298909, -80.1846226677299, -72.8203158825636, -16.3325851783156, 86.8600406683981, 93.3527871966362, 14.9770261719823, -45.6588900648057, -87.0777580421418, 13.9018434099853, -22.1736597828567, -12.0512451045215","-71.655789623037, 14.8334824945778, -16.8137946166098, -60.0538752041757, 17.0944395940751, 22.4857289344072, -77.132256841287, -55.0677491351962, 2.21382677555084, 69.3236303050071, 39.8013096302748, -39.7288813255727, -63.2540795020759","s",TRUE,0.336736697396128 +"pcor.mat",13,"91.7842994909734, 38.721524970606, 39.1705478075892, 18.6643098015338, -4.83868648298085, 96.8743856530637, -8.04941062815487, 88.7948990333825, -42.6608783658594, 74.295567907393, 20.754674077034, 20.6958107184619, 7.28423306718469","39.8056766949594, -61.7218984756619, -1.59168504178524, 4.02580439113081, 60.1681916043162, -89.8049416486174, -35.8231709338725, 78.1130255199969, -55.8174833655357, 51.9783590454608, -36.2147870473564, 35.5141086038202, -8.96845734678209","4.79736779816449, -56.6321770660579, -76.5336334705353, -22.4140492267907, 77.5082608219236, -61.9375938083977, -6.95173270069063, 19.7686547413468, -30.8583251200616, 47.0094705931842, -54.2295054998249, -98.6059594433755, 87.8028795588762","k",TRUE,0.212316868169448 +"pcor.mat",15,"-3.59630105085671, 86.7999098729342, -17.786830663681, -92.8564656991512, -51.1485965456814, -14.4706445280463, -17.7462406922132, -28.2284520566463, 58.7217133492231, 79.4202568475157, 94.2491712979972, -15.5174071900547, -10.2361090481281, 66.6180044878274, -50.6200913805515","65.4638954438269, 6.78580459207296, -35.6246003415436, 58.6391407065094, 18.2316683232784, 86.3036005757749, 46.5730607975274, -84.4369672238827, -44.6714565623552, 17.6646849140525, 37.9040233790874, 32.2640858590603, 77.358628436923, 55.9946102555841, -33.5247005801648","-19.0743586514145, 82.9343199264258, -8.59537380747497, 14.3348595593125, -41.50315746665, 12.1748448815197, -52.9024983756244, 52.8367889579386, -65.2377155609429, 24.2413009516895, -35.3585127275437, 26.4716796576977, 47.1821424551308, -15.6605173368007, -48.333586147055","p",TRUE,-0.0118283348531814 +"pcor.mat",6,"24.3941873777658, 0.587183143943548, 50.1822246704251, 61.6280217655003, 74.6993770357221, -69.6933365892619","-72.6307827513665, 21.0318620782346, -32.1439458057284, 26.9628962501884, -2.04706066288054, 33.2147478125989","66.891982126981, -18.3136829175055, 88.7454390525818, 78.3952571917325, -97.2121218219399, -20.8632645197213","s",FALSE,-0.303802497166359 +"pcor.mat",14,"-77.750310394913, 86.9882957544178, -85.0523100234568, -36.57017191872, -18.1189219001681, 20.1568298507482, 87.3199927154928, -10.1865636650473, 87.327975500375, -17.7946219686419, 4.59059923887253, 19.7666067630053, -31.7012812476605, 52.6644026394933","-60.2974510286003, 74.7249050065875, 1.42830195836723, -15.9695675596595, -83.7907467503101, 55.462152371183, 41.3278543855995, 89.4937683828175, -57.9569500405341, 74.0428008139133, -79.0337625425309, -49.0267637185752, 97.498970804736, -30.8440355118364","-91.0899322014302, 73.1682816520333, 92.4029916524887, -80.4349666461349, -33.0292509868741, -17.2952547669411, -51.6502045560628, 81.4240960869938, -72.4618446547538, -26.8657810520381, -4.80628688819706, 72.3387493286282, 2.85462928004563, 23.4467320144176","k",TRUE,0.000509880332891465 +"pcor.mat",13,"10.7691071461886, 65.1007527951151, -12.0915657840669, 91.6448481846601, -53.240419505164, -69.8381493799388, 21.602482162416, -34.3285651411861, 43.1247111409903, -37.4003404285759, 94.0640051383525, -65.0122064165771, -7.96503899618983","-85.3995600249618, 67.8450697101653, -56.2912890221924, 58.0509331542999, 36.6984612308443, 87.1452712919563, 49.0658250637352, -52.1726700011641, 94.9811044149101, -53.7899555172771, 39.8667695466429, 98.3075775206089, 63.3846609387547","-46.4738335926086, 37.4508975539356, 44.48222653009, 8.24846290051937, -69.1236611455679, -95.8152562379837, -3.39012276381254, -2.47371718287468, -11.9899280369282, 43.2109453715384, 2.20609768293798, -49.9354481697083, -95.7224021200091","p",FALSE,0.380657823856592 +"pcor.mat",5,"15.9143696073443, 48.3970512636006, 23.7569111865014, 83.6479561869055, -89.9238623213023","-20.0500118546188, 93.1261721998453, -91.0053466912359, -23.429145431146, 45.976064959541","-2.69081904552877, -4.5110234990716, -33.4870064165443, -74.1843503434211, 2.36937236040831","k",FALSE,0.218217890235992 +"pcor.mat",6,"10.1451388094574, -90.6787392683327, -87.4421800021082, 20.2668400015682, 78.3513565082103, 20.7683491986245","-97.6740748155862, 10.7196703087538, -54.752997867763, 80.7648414280266, 12.498453585431, 29.1912749875337","-63.6234064586461, -45.7921910565346, -50.1311025116593, -91.5211007930338, 16.7567258700728, 85.7384174596518","p",FALSE,0.236960037693682 +"pcor.mat",12,"73.2413066085428, -14.7738272324204, 50.0003031920642, 45.0548450928181, -48.7516783643514, -23.1134415604174, -87.6020579133183, 30.5087967775762, 82.4424541555345, 72.7492412086576, 32.3323079384863, 85.7122719287872","-9.44385454058647, -7.42488116957247, 3.06755122728646, 35.4948386084288, 69.3501094356179, -19.1765882074833, 95.9793315734714, 29.2394527699798, 53.3461356069893, 11.7002569604665, -71.7540245968848, 20.5835649278015","66.2635098677129, 48.2205909211189, 81.5142437815666, -31.1989811249077, 5.75581910088658, 93.6992627568543, 72.9302003979683, 30.9292090125382, -55.1979901269078, -78.7769370246679, 14.8034851066768, 37.4370891135186","p",TRUE,-0.48727199671024 +"pcor.mat",10,"52.8255486860871, 34.2574729584157, 44.7404673323035, 52.2620148025453, -69.898310629651, -85.9551533591002, -52.2192012518644, -56.3183640595526, -19.7211066260934, -6.08869907446206","-67.6190298050642, 75.8668028283864, 74.6253774967045, -66.1169764585793, -81.1506592668593, -33.249074826017, -21.2896263692528, -97.763530863449, -54.6630097553134, -96.6868148185313","-35.384417232126, 13.2294847629964, 22.9882229119539, -58.4000170230865, 88.3519669994712, 59.8886359948665, -30.7637225370854, 40.6464832834899, -62.5224160030484, -0.506686419248581","p",TRUE,0.492210961830229 +"pcor.mat",8,"18.1551295798272, -8.32464881241322, -99.8132115229964, 18.6201244592667, -53.1589215621352, 70.2180631458759, -36.3900125026703, 92.1965328045189","6.02451944723725, -68.5814322903752, 70.58563423343, 1.00183109752834, 16.1975951399654, 64.5838780794293, -84.6291496884078, -54.131712205708","80.0181794445962, -12.9483319818974, -3.88606782071292, -48.0255630798638, -3.62709653563797, 31.62224679254, 57.1325340308249, -93.3892488945276","p",TRUE,-0.141482085540883 +"pcor.mat",17,"90.1813358999789, -3.33601352758706, -70.5867488868535, -40.8890372607857, 58.0897845327854, 8.4102772641927, 31.2019024044275, 67.8843731526285, -5.85478777065873, 93.743189284578, -21.4788604527712, 48.0386326089501, -42.5454632379115, -78.037649858743, 5.827397108078, -59.5929707866162, 22.9059528559446","46.3524929713458, -42.5642458721995, -69.567626202479, 91.2107714917511, 80.4405058268458, -83.3648740779608, -5.59279890730977, 67.8364232182503, 9.23628495074809, -45.9923652466387, -2.29323050007224, 92.1013004146516, 34.326039114967, -10.8744602650404, 89.988622488454, -23.287376947701, 72.6627949625254","48.8092821557075, -84.7605162765831, -68.7700709793717, -67.7357694599777, 25.1485624350607, 61.709990631789, 29.2394532822073, 47.8424397762865, 37.0008739177138, -47.5637663155794, -14.6964757237583, -69.9305152054876, -54.4029568322003, 80.0897337496281, 9.39622772857547, -1.27441040240228, 74.3666623719037","s",TRUE,0.270551782409472 +"pcor.mat",13,"-68.030820786953, 48.6679933033884, 51.8114904407412, 78.5725246183574, 18.9902665093541, 25.0479029957205, 56.8353782407939, -4.79650879278779, -87.2707166243345, -64.176924712956, -56.511168833822, 41.7948929592967, 79.8323729075491","87.0083963032812, 12.2851114254445, -48.7783022690564, 2.98262075521052, 61.5149905905128, 72.0769232138991, -33.8758388534188, 19.778781151399, -12.315073935315, -95.3089885413647, -40.8825332764536, -50.1593578606844, -29.2145641520619","82.5196304824203, 86.4081613719463, -63.7102510314435, 82.9122426919639, 86.7011873517185, 1.18320896290243, -7.11194663308561, 31.899410719052, -69.8009483516216, -57.3877718299627, 2.83222463913262, -17.2023222781718, -38.1276280619204","p",FALSE,-0.215982700387935 +"pcor.mat",12,"-36.3307877443731, 74.7712590266019, -79.8354192636907, 93.8916243612766, -50.0289557501674, -54.7662570606917, -38.7290718965232, -84.6648510545492, 71.2978508323431, 88.4917345829308, 32.1320930030197, 76.4375317841768","2.62319510802627, -97.154287295416, 21.7567156534642, 95.8672656677663, -0.763413123786449, -9.49476859532297, 83.9058271143585, -38.3374994620681, -16.9302582275122, -85.5358060449362, -83.2731044851243, -18.7622617464513","-76.2503104750067, 36.5515212062746, 48.5381714068353, 72.03823258169, 36.652302602306, 29.980877507478, 21.0754222236574, -96.8017131090164, -66.5918422862887, -10.5546385981143, 91.4459123276174, -84.6182245295495","k",TRUE,-0.161695275103975 +"pcor.mat",13,"65.4542396776378, 2.08085202611983, -88.9037624932826, 52.2526708897203, -38.4136536624283, -13.373964605853, -48.226101975888, 93.4839099645615, 39.563751546666, 69.0497747156769, -94.8003361001611, 24.9876524321735, 25.2306204754859","82.8150092158467, -9.80691406875849, -84.2437265440822, -48.5185658093542, 93.8153511844575, 76.507264515385, 96.1720596533269, 91.2560781463981, -86.2542728893459, -47.9744947515428, 25.5869822110981, -15.71259717457, 99.3623040616512","64.0070253051817, -90.157330268994, 78.4984151832759, 36.6091389209032, -85.7790939509869, -43.4162854682654, -81.61596711725, -7.2117717936635, 69.8510519228876, 87.7512107603252, 60.0242395885289, -77.6109307538718, 33.9131449349225","s",FALSE,0.0846468464958684 +"pcor.mat",14,"6.42584343440831, 89.4456365611404, -94.9723384808749, -4.63838037103415, 82.1529622189701, -72.2434451803565, 21.8717840965837, 13.9814134221524, -70.8967028185725, 99.243081593886, -67.1596728730947, -69.3361242301762, -52.0885898265988, 54.4663844164461","-6.86167716048658, 63.0930243059993, 62.3814635910094, 42.8769947495311, 12.4187188688666, -55.67507436499, 68.4297569096088, 57.5610874220729, -4.82598571106791, -79.5595136005431, -55.5029585491866, -94.9160863645375, 82.0372765418142, -52.3549461271614","-96.7493511270732, 16.427826648578, 26.2085369322449, 89.924060087651, 64.0857739374042, 65.0612049736083, -50.4840951412916, -27.8882106766105, -37.310868408531, -41.0194541793317, -37.8566451836377, -97.9508240241557, -74.5396174024791, 76.8885430879891","p",FALSE,0.0312670434242096 +"pcor.mat",12,"34.8341395147145, 43.1037290487438, 82.2314764373004, -63.9271955937147, 70.3003748320043, 51.0297972708941, 95.4673350322992, 74.5106549467891, -71.5771752875298, 32.5960139743984, 85.8803272712976, -12.2395237442106","-27.241831831634, -76.5246210154146, 86.3751742523164, 74.9675445724279, 63.8482879847288, 14.7356034722179, -30.9328155592084, 73.2200371101499, 26.5261144377291, 42.3744561616331, -80.7972604874521, 95.1648845802993","30.9194989036769, -29.2449895292521, -75.1953874249011, -97.2041368950158, -63.0337142385542, -96.9185112509876, -72.140100877732, 50.4067888017744, 80.1865959074348, 69.9119384400547, 28.0939280521125, -78.1314740888774","p",FALSE,-0.344081701794653 +"pcor.mat",17,"-32.3364136740565, -74.5505046565086, 64.3489994108677, 95.3302425798029, -47.4365599453449, -99.5640191715211, -81.8646350875497, -10.4291386436671, -46.2970128748566, -66.2438121624291, 3.38349812664092, 46.3537188712507, 50.3833524882793, 76.8161817919463, -35.9225623309612, -30.2367287687957, -15.6686681322753","-85.6091414112598, -74.5855379849672, 31.7983427084982, 12.1914628893137, -76.0027903132141, -25.2544173505157, -53.2312866300344, -66.4824201725423, -35.0571169052273, 25.0753607135266, 57.0668096188456, 97.4866581615061, -34.1166456695646, 70.7655222155154, -25.6891251541674, -99.2252895608544, 30.7619682978839","44.1535466350615, 57.7384070493281, -42.7488908171654, -81.2754278071225, 97.9185460601002, 35.2168054319918, -26.9714017864317, -93.0728284176439, -60.7041460927576, -99.858339689672, -53.829790558666, 85.15021414496, -98.6793769989163, -86.0895386897027, 51.4472865033895, -15.630559111014, -28.9994670078158","k",TRUE,0.261679778734634 +"pcor.mat",10,"89.7360242903233, 47.9975900612772, 36.5392371080816, -51.0348361451179, 7.82818463630974, -6.9301129784435, -75.5731589626521, 47.0917036756873, -58.8109106291085, 33.4785438142717","54.0308193303645, 41.3668432738632, 98.2857145369053, -14.9101806804538, 30.7341996114701, 92.3570320941508, -35.8356348704547, -91.0546428058296, 77.7767921797931, 13.7820704840124","-65.3565419837832, -24.2730437777936, 13.4862332604825, -97.8464429732412, 91.0171907860786, -52.4954450316727, -31.7320866975933, 33.8117491919547, 49.1156910546124, -42.7486607804894","p",FALSE,0.109506018207148 diff --git a/tests/unit/computations/test_partial_correlations.py b/tests/unit/computations/test_partial_correlations.py index f7217a9..c5c35d1 100644 --- a/tests/unit/computations/test_partial_correlations.py +++ b/tests/unit/computations/test_partial_correlations.py @@ -1,5 +1,6 @@ """Module contains tests for gn3.partial_correlations""" +import csv from unittest import TestCase from gn3.computations.partial_correlations import ( fix_samples, @@ -7,7 +8,9 @@ from gn3.computations.partial_correlations import ( dictify_by_samples, tissue_correlation, find_identical_traits, - good_dataset_samples_indexes) + partial_correlation_matrix, + good_dataset_samples_indexes, + partial_correlation_recursive) sampleslist = ["B6cC3-1", "BXD1", "BXD12", "BXD16", "BXD19", "BXD2"] control_traits = ( @@ -90,6 +93,28 @@ dictified_control_samples = ( "BXD1": {"sample_name": "BXD1", "value": 7.77141, "variance": None}, "BXD2": {"sample_name": "BXD2", "value": 7.80944, "variance": None}}) +def parse_test_data_csv(filename): + """ + Parse test data csv files for R -> Python conversion of some functions. + """ + def __str__to_tuple(line, field): + return tuple(float(s.strip()) for s in line[field].split(",")) + + with open(filename, newline="\n") as csvfile: + reader = csv.DictReader(csvfile, delimiter=",", quotechar='"') + lines = tuple(row for row in reader) + + methods = {"p": "pearson", "s": "spearman", "k": "kendall"} + return tuple({ + **line, + "x": __str__to_tuple(line, "x"), + "y": __str__to_tuple(line, "y"), + "z": __str__to_tuple(line, "z"), + "method": methods[line["method"]], + "rm": line["rm"] == "TRUE", + "result": float(line["result"]) + } for line in lines) + class TestPartialCorrelations(TestCase): """Class for testing partial correlations computation functions""" @@ -271,3 +296,37 @@ class TestPartialCorrelations(TestCase): ("a", "e", "i", "k"), ("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l")), (0, 4, 8, 10)) + + def test_partial_correlation_matrix(self): + """ + Test that `partial_correlation_matrix` computes the appropriate + correlation value. + """ + for sample in parse_test_data_csv( + ("tests/unit/computations/partial_correlations_test_data/" + "pcor_mat_blackbox_test.csv")): + with self.subTest( + xdata=sample["x"], ydata=sample["y"], zdata=sample["z"], + method=sample["method"], omit_nones=sample["rm"]): + self.assertEqual( + partial_correlation_matrix( + sample["x"], sample["y"], sample["z"], + method=sample["method"], omit_nones=sample["rm"]), + sample["result"]) + + def test_partial_correlation_recursive(self): + """ + Test that `partial_correlation_recursive` computes the appropriate + correlation value. + """ + for sample in parse_test_data_csv( + ("tests/unit/computations/partial_correlations_test_data/" + "pcor_rec_blackbox_test.csv")): + with self.subTest( + xdata=sample["x"], ydata=sample["y"], zdata=sample["z"], + method=sample["method"], omit_nones=sample["rm"]): + self.assertEqual( + partial_correlation_recursive( + sample["x"], sample["y"], sample["z"], + method=sample["method"], omit_nones=sample["rm"]), + sample["result"]) -- cgit v1.2.3 From 905626a2a27332f2fab74195bbcf615bf5c5b6bf Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Tue, 9 Nov 2021 16:41:48 +0300 Subject: replace list with generators --- gn3/computations/correlations.py | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/correlations.py b/gn3/computations/correlations.py index c930df0..8eaa523 100644 --- a/gn3/computations/correlations.py +++ b/gn3/computations/correlations.py @@ -49,13 +49,9 @@ def normalize_values(a_values: List, ([2.3, 4.1, 5], [3.4, 6.2, 4.1], 3) """ - a_new = [] - b_new = [] for a_val, b_val in zip(a_values, b_values): if (a_val and b_val is not None): - a_new.append(a_val) - b_new.append(b_val) - return a_new, b_new, len(a_new) + yield a_val, b_val def compute_corr_coeff_p_value(primary_values: List, target_values: List, @@ -81,8 +77,10 @@ def compute_sample_r_correlation(trait_name, corr_method, trait_vals, correlation coeff and p value """ - (sanitized_traits_vals, sanitized_target_vals, - num_overlap) = normalize_values(trait_vals, target_samples_vals) + + sanitized_traits_vals, sanitized_target_vals = list( + zip(*list(normalize_values(trait_vals, target_samples_vals)))) + num_overlap = len(sanitized_traits_vals) if num_overlap > 5: @@ -114,13 +112,9 @@ def filter_shared_sample_keys(this_samplelist, filter the values using the shared keys """ - this_vals = [] - target_vals = [] for key, value in target_samplelist.items(): if key in this_samplelist: - target_vals.append(value) - this_vals.append(this_samplelist[key]) - return (this_vals, target_vals) + yield value, this_samplelist[key] def fast_compute_all_sample_correlation(this_trait, @@ -139,9 +133,10 @@ def fast_compute_all_sample_correlation(this_trait, for target_trait in target_dataset: trait_name = target_trait.get("trait_id") target_trait_data = target_trait["trait_sample_data"] - processed_values.append((trait_name, corr_method, *filter_shared_sample_keys( - this_trait_samples, target_trait_data))) - with multiprocessing.Pool(4) as pool: + processed_values.append((trait_name, corr_method, *list(zip(*list(filter_shared_sample_keys( + this_trait_samples, target_trait_data)))) + )) + with multiprocessing.Pool() as pool: results = pool.starmap(compute_sample_r_correlation, processed_values) for sample_correlation in results: @@ -172,8 +167,10 @@ def compute_all_sample_correlation(this_trait, for target_trait in target_dataset: trait_name = target_trait.get("trait_id") target_trait_data = target_trait["trait_sample_data"] - this_vals, target_vals = filter_shared_sample_keys( - this_trait_samples, target_trait_data) + this_vals, target_vals = list(zip(*list(filter_shared_sample_keys( + this_trait_samples, target_trait_data)))) + # this_vals, target_vals = filter_shared_sample_keys( + # this_trait_samples, target_trait_data) sample_correlation = compute_sample_r_correlation( trait_name=trait_name, -- cgit v1.2.3 From 01ddb7300b451108983327ae11f69e265a2ec2e0 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Wed, 10 Nov 2021 11:38:35 +0300 Subject: fix:spawned processes memory issues --- gn3/computations/correlations.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/correlations.py b/gn3/computations/correlations.py index 8eaa523..8302afc 100644 --- a/gn3/computations/correlations.py +++ b/gn3/computations/correlations.py @@ -1,6 +1,7 @@ """module contains code for correlations""" import math import multiprocessing +from contextlib import closing from typing import List from typing import Tuple @@ -136,7 +137,7 @@ def fast_compute_all_sample_correlation(this_trait, processed_values.append((trait_name, corr_method, *list(zip(*list(filter_shared_sample_keys( this_trait_samples, target_trait_data)))) )) - with multiprocessing.Pool() as pool: + with closing(multiprocessing.Pool()) as pool: results = pool.starmap(compute_sample_r_correlation, processed_values) for sample_correlation in results: -- cgit v1.2.3 From e9fb78b5bc43bd8c63b8b790f0f3fe826051fbe7 Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Thu, 11 Nov 2021 00:23:55 +0300 Subject: fix target and base sample data order --- gn3/computations/correlations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gn3/computations') diff --git a/gn3/computations/correlations.py b/gn3/computations/correlations.py index 8302afc..4987571 100644 --- a/gn3/computations/correlations.py +++ b/gn3/computations/correlations.py @@ -115,7 +115,7 @@ def filter_shared_sample_keys(this_samplelist, """ for key, value in target_samplelist.items(): if key in this_samplelist: - yield value, this_samplelist[key] + yield this_samplelist[key], value def fast_compute_all_sample_correlation(this_trait, -- cgit v1.2.3 From fa1af0daa093e80a2c235f0294d7fe61a5b65b4b Mon Sep 17 00:00:00 2001 From: Alexander Kabui Date: Thu, 11 Nov 2021 00:31:48 +0300 Subject: pylint fixes and pep8 formatting --- gn3/computations/correlations.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) (limited to 'gn3/computations') diff --git a/gn3/computations/correlations.py b/gn3/computations/correlations.py index 4987571..c5c56db 100644 --- a/gn3/computations/correlations.py +++ b/gn3/computations/correlations.py @@ -134,9 +134,9 @@ def fast_compute_all_sample_correlation(this_trait, for target_trait in target_dataset: trait_name = target_trait.get("trait_id") target_trait_data = target_trait["trait_sample_data"] - processed_values.append((trait_name, corr_method, *list(zip(*list(filter_shared_sample_keys( - this_trait_samples, target_trait_data)))) - )) + processed_values.append((trait_name, corr_method, + list(zip(*list(filter_shared_sample_keys( + this_trait_samples, target_trait_data)))))) with closing(multiprocessing.Pool()) as pool: results = pool.starmap(compute_sample_r_correlation, processed_values) @@ -170,8 +170,6 @@ def compute_all_sample_correlation(this_trait, target_trait_data = target_trait["trait_sample_data"] this_vals, target_vals = list(zip(*list(filter_shared_sample_keys( this_trait_samples, target_trait_data)))) - # this_vals, target_vals = filter_shared_sample_keys( - # this_trait_samples, target_trait_data) sample_correlation = compute_sample_r_correlation( trait_name=trait_name, -- cgit v1.2.3