From 21bf6af02e33865f00319467ba4670fa3d872961 Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Fri, 29 Oct 2021 08:33:37 +0300 Subject: Add auth module --- gn3/authentication.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 gn3/authentication.py (limited to 'gn3') diff --git a/gn3/authentication.py b/gn3/authentication.py new file mode 100644 index 0000000..baf2c7a --- /dev/null +++ b/gn3/authentication.py @@ -0,0 +1,94 @@ +import functools +import json +import redis +import requests + +from typing import Dict +from enum import Enum, unique +from urllib.parse import urljoin + + +@functools.total_ordering +class OrderedEnum(Enum): + @classmethod + @functools.lru_cache(None) + def _member_list(cls): + return list(cls) + + def __lt__(self, other): + if self.__class__ is other.__class__: + member_list = self.__class__._member_list() + return member_list.index(self) < member_list.index(other) + return NotImplemented + + +@unique +class DataRole(OrderedEnum): + NO_ACCESS = "no-access" + VIEW = "view" + EDIT = "edit" + + +@unique +class AdminRole(OrderedEnum): + NOT_ADMIN = "not-admin" + EDIT_ACCESS = "edit-access" + EDIT_ADMINS = "edit-admins" + + +def get_user_membership(conn: redis.Redis, user_id: str, + group_id: str) -> Dict: + """Return a dictionary that indicates whether the `user_id` is a + member or admin of `group_id`. + + Args: + - conn: a Redis Connection with the responses decoded. + - user_id: a user's unique id + e.g. '8ad942fe-490d-453e-bd37-56f252e41603' + - group_id: a group's unique id + e.g. '7fa95d07-0e2d-4bc5-b47c-448fdc1260b2' + + Returns: + A dict indicating whether the user is an admin or a member of + the group: {"member": True, "admin": False} + + """ + results = {"member": False, "admin": False} + for key, value in conn.hgetall('groups').items(): + if key == group_id: + group_info = json.loads(value) + if user_id in group_info.get("admins"): + results["admin"] = True + if user_id in group_info.get("members"): + results["member"] = True + break + return results + + +def get_highest_user_access_role( + resource_id: str, + user_id: str, + gn_proxy_url: str = "http://localhost:8080") -> Dict: + """Get the highest access roles for a given user + + Args: + - resource_id: The unique id of a given resource. + - user_id: The unique id of a given user. + - gn_proxy_url: The URL where gn-proxy is running. + + Returns: + A dict indicating the highest access role the user has. + + """ + role_mapping = {} + for x, y in zip(DataRole, AdminRole): + role_mapping.update({x.value: x, }) + role_mapping.update({y.value: y, }) + access_role = {} + for key, value in json.loads( + requests.get(urljoin( + gn_proxy_url, + ("available?resource=" + f"{resource_id}&user={user_id}"))).content).items(): + access_role[key] = max(map(lambda x: role_mapping[x], value)) + return access_role -- cgit v1.2.3 From a74df27eae7481cc8f1f12cc8a0adcc06cd1a984 Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Sun, 31 Oct 2021 15:58:18 +0300 Subject: Fix pylint issues in gn3.authentication --- gn3/authentication.py | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'gn3') diff --git a/gn3/authentication.py b/gn3/authentication.py index baf2c7a..892aa8f 100644 --- a/gn3/authentication.py +++ b/gn3/authentication.py @@ -1,15 +1,17 @@ +"""Methods for interacting with gn-proxy.""" import functools import json +from urllib.parse import urljoin +from enum import Enum, unique +from typing import Dict + import redis import requests -from typing import Dict -from enum import Enum, unique -from urllib.parse import urljoin - @functools.total_ordering class OrderedEnum(Enum): + """A class that ordered Enums in order of position""" @classmethod @functools.lru_cache(None) def _member_list(cls): @@ -24,6 +26,7 @@ class OrderedEnum(Enum): @unique class DataRole(OrderedEnum): + """Enums for Data Access""" NO_ACCESS = "no-access" VIEW = "view" EDIT = "edit" @@ -31,6 +34,7 @@ class DataRole(OrderedEnum): @unique class AdminRole(OrderedEnum): + """Enums for Admin status""" NOT_ADMIN = "not-admin" EDIT_ACCESS = "edit-access" EDIT_ADMINS = "edit-admins" @@ -81,14 +85,13 @@ def get_highest_user_access_role( """ role_mapping = {} - for x, y in zip(DataRole, AdminRole): - role_mapping.update({x.value: x, }) - role_mapping.update({y.value: y, }) + for data_role, admin_role in zip(DataRole, AdminRole): + role_mapping.update({data_role.value: data_role, }) + role_mapping.update({admin_role.value: admin_role, }) access_role = {} - for key, value in json.loads( - requests.get(urljoin( - gn_proxy_url, - ("available?resource=" - f"{resource_id}&user={user_id}"))).content).items(): - access_role[key] = max(map(lambda x: role_mapping[x], value)) + response = requests.get(urljoin(gn_proxy_url, + ("available?resource=" + f"{resource_id}&user={user_id}"))) + for key, value in json.loads(response.content).items(): + access_role[key] = max(map(lambda role: role_mapping[role], value)) return access_role -- cgit v1.2.3 From 8169d8aacd8598730fd2e6eba06052e7502f2cc1 Mon Sep 17 00:00:00 2001 From: BonfaceKilz Date: Mon, 1 Nov 2021 09:05:32 +0300 Subject: Fix mypy issues --- gn3/authentication.py | 8 ++++---- mypy.ini | 6 ++++++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'gn3') diff --git a/gn3/authentication.py b/gn3/authentication.py index 892aa8f..7bc7b77 100644 --- a/gn3/authentication.py +++ b/gn3/authentication.py @@ -3,9 +3,9 @@ import functools import json from urllib.parse import urljoin from enum import Enum, unique -from typing import Dict +from typing import Dict, Union -import redis +from redis import Redis import requests @@ -40,7 +40,7 @@ class AdminRole(OrderedEnum): EDIT_ADMINS = "edit-admins" -def get_user_membership(conn: redis.Redis, user_id: str, +def get_user_membership(conn: Redis, user_id: str, group_id: str) -> Dict: """Return a dictionary that indicates whether the `user_id` is a member or admin of `group_id`. @@ -84,7 +84,7 @@ def get_highest_user_access_role( A dict indicating the highest access role the user has. """ - role_mapping = {} + role_mapping: Dict[str, Union[DataRole, AdminRole]] = {} for data_role, admin_role in zip(DataRole, AdminRole): role_mapping.update({data_role.value: data_role, }) role_mapping.update({admin_role.value: admin_role, }) diff --git a/mypy.ini b/mypy.ini index a507703..b0c48df 100644 --- a/mypy.ini +++ b/mypy.ini @@ -13,4 +13,10 @@ ignore_missing_imports = True ignore_missing_imports = True [mypy-pingouin.*] +ignore_missing_imports = True + +[mypy-redis.*] +ignore_missing_imports = True + +[mypy-requests.*] ignore_missing_imports = True \ No newline at end of file -- cgit v1.2.3 From 42dee16ec8a7d7620367dd31481999bfca9313db Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Tue, 26 Oct 2021 08:59:30 +0300 Subject: Implement `fetch_gene_symbol_tissue_value_dict_for_trait` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Implement `fetch_gene_symbol_tissue_value_dict_for_trait` function which is a migration of the `web.webqtl.correlation.correlationFunction.getGeneSymbolTissueValueDictForTrait` function in GeneNetwork1. --- gn3/db/correlations.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'gn3') diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index 87ab082..cae8080 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -266,7 +266,22 @@ def fetch_tissue_probeset_xref_info( (tuple(), {}, {}, {}, {}, {}, {})) def correlations_of_all_tissue_traits() -> Tuple[dict, dict]: +def fetch_gene_symbol_tissue_value_dict_for_trait( + gene_name_list: Tuple[str, ...], probeset_freeze_id: int, + conn: Any) -> dict: + """ + Fetches a map of the gene symbols to the tissue values. + + This is a migration of the + `web.webqtl.correlation.correlationFunction.getGeneSymbolTissueValueDictForTrait` + function in GeneNetwork1. """ + xref_info = fetch_tissue_probeset_xref_info( + gene_name_list, probeset_freeze_id, conn) + if xref_info[0]: + return fetch_gene_symbol_tissue_value_dict(xref_info[0], xref_info[2], conn) + return {} + This is a migration of the `web.webqtl.correlation.CorrelationPage.calculateCorrOfAllTissueTrait` function in GeneNetwork1. -- cgit v1.2.3 From d6e392c2488421ae04b4ffd5de26be40ed86a9b3 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Tue, 26 Oct 2021 09:17:52 +0300 Subject: Complete `correlations_of_all_tissue_traits` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Complete the implementation of the `correlations_of_all_tissue_traits` function by providing a call to a non-implemented function. --- gn3/db/correlations.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'gn3') diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index cae8080..f43b8a5 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -265,7 +265,6 @@ def fetch_tissue_probeset_xref_info( results or tuple(), (tuple(), {}, {}, {}, {}, {}, {})) -def correlations_of_all_tissue_traits() -> Tuple[dict, dict]: def fetch_gene_symbol_tissue_value_dict_for_trait( gene_name_list: Tuple[str, ...], probeset_freeze_id: int, conn: Any) -> dict: @@ -282,12 +281,25 @@ 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.CorrelationPage.calculateCorrOfAllTissueTrait` + `web.webqtl.correlation.correlationFunction.calculateCorrOfAllTissueTrait` function in GeneNetwork1. """ - raise Exception("Unimplemented!!!") - return ({}, {}) + 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, @@ -298,6 +310,8 @@ def build_temporary_tissue_correlations_table( This is a migration of the `web.webqtl.correlation.CorrelationPage.getTempTissueCorrTable` function in GeneNetwork1.""" + symbol_corr_dict, symbol_p_value_dict = correlations_of_all_tissue_traits( + trait_symbol, probeset_freeze_id, method, conn) raise Exception("Unimplemented!!!") return "" -- cgit v1.2.3 From 5079e5077adafdbfd0b7e7c0ef12431e9aed443d Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Tue, 26 Oct 2021 09:23:48 +0300 Subject: Stub out `batch_computed_tissue_correlation` function Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Stub out `batch_computed_tissue_correlation` function to be used in implementing the function down the line. --- gn3/db/correlations.py | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'gn3') diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index f43b8a5..54d3079 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -281,6 +281,14 @@ 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 84aaf880f32f5293e5e4f1c74a3f284e3c95df2f Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Wed, 27 Oct 2021 10:24:28 +0300 Subject: Remove if clauses: replace with dict Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Remove the if clauses to simplify the code flow: use a dictionary of queries and select the appropriate query from the dictionary instead. --- gn3/db/species.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'gn3') diff --git a/gn3/db/species.py b/gn3/db/species.py index 1e5015f..abcbf64 100644 --- a/gn3/db/species.py +++ b/gn3/db/species.py @@ -47,17 +47,13 @@ def translate_to_mouse_gene_id(species: str, geneid: int, conn: Any) -> int: return geneid with conn.cursor as cursor: - if species == "rat": - cursor.execute( - "SELECT mouse FROM GeneIDXRef WHERE rat = %s", geneid) - rat_geneid = cursor.fetchone() - if rat_geneid: - return rat_geneid[0] - - cursor.execute( - "SELECT mouse FROM GeneIDXRef WHERE human = %s", geneid) - human_geneid = cursor.fetchone() - if human_geneid: - return human_geneid[0] + query = { + "rat": "SELECT mouse FROM GeneIDXRef WHERE rat = %s" + "human": "SELECT mouse FROM GeneIDXRef WHERE human = %s" + } + cursor.execute(query[species], geneid) + translated_gene_id = cursor.fetchone() + if translated_gene_id: + return translated_gene_id[0] return 0 # default if all else fails -- 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') 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') 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') 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 a85db849660a63b09e5c40f7753d861f47eaaaeb Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 06:37:24 +0300 Subject: Add missing comma Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi --- gn3/db/species.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gn3') diff --git a/gn3/db/species.py b/gn3/db/species.py index abcbf64..702a9a8 100644 --- a/gn3/db/species.py +++ b/gn3/db/species.py @@ -48,7 +48,7 @@ def translate_to_mouse_gene_id(species: str, geneid: int, conn: Any) -> int: with conn.cursor as cursor: query = { - "rat": "SELECT mouse FROM GeneIDXRef WHERE rat = %s" + "rat": "SELECT mouse FROM GeneIDXRef WHERE rat = %s", "human": "SELECT mouse FROM GeneIDXRef WHERE human = %s" } cursor.execute(query[species], geneid) -- 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') 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') 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') 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 307a83b897b9ece7c9dd1af49bdedc9e1320eb61 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Fri, 29 Oct 2021 08:25:13 +0300 Subject: Rework sorting: remove `compare_tissue_correlation_absolute_values` Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/db/correlations.py: Remove the `compare_tissue_correlation_absolute_values` function which is no longer needed. --- gn3/db/correlations.py | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) (limited to 'gn3') diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index 28f050a..d7954e5 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -140,22 +140,6 @@ def fetch_literature_correlations( cursor.execute("DROP TEMPORARY TABLE %s", temp_table) return dict(results) -def compare_tissue_correlation_absolute_values(val1, val2): - """ - Comparison function for use when sorting tissue correlation values. - - This is a partial migration of the - `web.webqtl.correlation.CorrelationPage.getTempTissueCorrTable` function in - GeneNetwork1.""" - try: - if abs(val1) < abs(val2): - return 1 - if abs(val1) == abs(val2): - return 0 - return -1 - except TypeError: - return 0 - def fetch_symbol_value_pair_dict( symbol_list: Tuple[str, ...], data_id_dict: dict, conn: Any) -> Dict[str, Tuple[float, ...]]: @@ -302,8 +286,7 @@ def build_temporary_tissue_correlations_table( method) symbol_corr_list = sorted( - symbol_corr_dict.items(), - key=compare_tissue_correlation_absolute_values) + symbol_corr_dict.items(), key=lambda key_val: key_val[1]) temp_table_name = f"TOPTISSUE{random_string(8)}" create_query = ( -- 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') 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') 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') 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 4a6be7e1b6514f3c7db8c672970b27e27ecde305 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 06:01:58 +0300 Subject: Add some condition checking functions Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * Add the `check_for_literature_info` and `check_symbol_for_tissue_correlation` functions to check for the presence of specific data. --- gn3/db/correlations.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'gn3') diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py index d94759a..06b3310 100644 --- a/gn3/db/correlations.py +++ b/gn3/db/correlations.py @@ -339,3 +339,43 @@ def fetch_tissue_correlations(# pylint: disable=R0913 return { trait_name: (tiss_corr, tiss_p_val) for trait_name, tiss_corr, tiss_p_val in results} + +def check_for_literature_info(conn: Any, geneid: int) -> bool: + """ + Checks the database to find out whether the trait with `geneid` has any + associated literature. + + This is a migration of the + `web.webqtl.correlation.CorrelationPage.checkForLitInfo` function in + GeneNetwork1. + """ + query = "SELECT 1 FROM LCorrRamin3 WHERE GeneId1=%s LIMIT 1" + with conn.cursor() as cursor: + cursor.execute(query, geneid) + result = cursor.fetchone() + if result: + return True + + return False + +def check_symbol_for_tissue_correlation( + conn: Any, tissue_probeset_freeze_id: int, symbol: str = "") -> bool: + """ + Checks whether a symbol has any associated tissue correlations. + + This is a migration of the + `web.webqtl.correlation.CorrelationPage.checkSymbolForTissueCorr` function + in GeneNetwork1. + """ + query = ( + "SELECT 1 FROM TissueProbeSetXRef " + "WHERE TissueProbeSetFreezeId=%(probeset_freeze_id)s " + "AND Symbol=%(symbol)s LIMIT 1") + with conn.cursor() as cursor: + cursor.execute( + query, probeset_freeze_id=tissue_probeset_freeze_id, symbol=symbol) + result = cursor.fetchone() + if result: + return True + + return False -- cgit v1.2.3 From ff23701bbfd90799f04fdf21c482f113bb408e34 Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 07:09:26 +0300 Subject: Parse single line from CSV file Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi * gn3/data_helpers.py: New function (parse_csv_line) * tests/unit/test_data_helpers.py: Add tests for new function (parse_csv_line) Add a function to parse a single line from a CSV file. --- gn3/data_helpers.py | 13 ++++++++++++- tests/unit/test_data_helpers.py | 26 +++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) (limited to 'gn3') diff --git a/gn3/data_helpers.py b/gn3/data_helpers.py index f0d971e..741a885 100644 --- a/gn3/data_helpers.py +++ b/gn3/data_helpers.py @@ -5,7 +5,7 @@ data structures. from math import ceil from functools import reduce -from typing import Any, Tuple, Sequence +from typing import Any, Tuple, Sequence, Optional def partition_all(num: int, items: Sequence[Any]) -> Tuple[Tuple[Any, ...], ...]: """ @@ -23,3 +23,14 @@ def partition_all(num: int, items: Sequence[Any]) -> Tuple[Tuple[Any, ...], ...] tuple(items[start:stop]) for start, stop # type: ignore[has-type] in reduce( __compute_start_stop__, iterations, tuple())]) + +def parse_csv_line( + line:str, delimiter: str = ",", quoting:Optional[str] = '"') -> Tuple[str, ...]: + """ + Parses a line from a CSV file into a tuple of strings. + + This is a migration of the `web.webqtl.utility.webqtlUtil.readLineCSV` + function in GeneNetwork1. + """ + return tuple( + col.strip("{} \t\n".format(quoting)) for col in line.split(delimiter)) diff --git a/tests/unit/test_data_helpers.py b/tests/unit/test_data_helpers.py index 1eec3cc..39aea45 100644 --- a/tests/unit/test_data_helpers.py +++ b/tests/unit/test_data_helpers.py @@ -4,7 +4,7 @@ Test functions in gn3.data_helpers from unittest import TestCase -from gn3.data_helpers import partition_all +from gn3.data_helpers import partition_all, parse_csv_line class TestDataHelpers(TestCase): """ @@ -35,3 +35,27 @@ class TestDataHelpers(TestCase): ((0, 1, 2, 3, 4, 5, 6, 7, 8, 9), ))): with self.subTest(n=count, items=items): self.assertEqual(partition_all(count, items), expected) + + def test_parse_csv_line(self): + """ + Test parsing a single line from a CSV file + + Given: + - `line`: a line read from a csv file + - `delimiter`: the expected delimiter in the csv file + - `quoting`: the quoting enclosing each column in the csv file + When: + - `line` is parsed with the `parse_csv_file` with the given + parameters + Then: + - return a tuple of the columns in the CSV file, without the + delimiter and quoting + """ + for line, delimiter, quoting, expected in ( + ('"this","is","a","test"', ",", '"', ("this", "is", "a", "test")), + ('"this","is","a","test"', ",", None, ('"this"', '"is"', '"a"', '"test"'))): + with self.subTest(line=line, delimiter=delimiter, quoting=quoting): + self.assertEqual( + parse_csv_line( + line=line, delimiter=delimiter, quoting=quoting), + expected) -- cgit v1.2.3 From 4ecaae288c78f8c3b4b6b40b56de3ba392ecc1bd Mon Sep 17 00:00:00 2001 From: Frederick Muriuki Muriithi Date: Mon, 1 Nov 2021 08:17:41 +0300 Subject: Fix some linting errors Issue: https://github.com/genenetwork/gn-gemtext-threads/blob/main/topics/gn1-migration-to-gn2/partial-correlations.gmi --- gn3/data_helpers.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'gn3') diff --git a/gn3/data_helpers.py b/gn3/data_helpers.py index 741a885..d3f942b 100644 --- a/gn3/data_helpers.py +++ b/gn3/data_helpers.py @@ -25,7 +25,8 @@ def partition_all(num: int, items: Sequence[Any]) -> Tuple[Tuple[Any, ...], ...] __compute_start_stop__, iterations, tuple())]) def parse_csv_line( - line:str, delimiter: str = ",", quoting:Optional[str] = '"') -> Tuple[str, ...]: + line: str, delimiter: str = ",", + quoting: Optional[str] = '"') -> Tuple[str, ...]: """ Parses a line from a CSV file into a tuple of strings. -- 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') 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') 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') 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') 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