Source code for pharmpy.modeling.math
from typing import TYPE_CHECKING
from pharmpy.internals.math import cov2corr
if TYPE_CHECKING:
import numpy as np
import pandas as pd
else:
from pharmpy.deps import numpy as np
from pharmpy.deps import pandas as pd
[docs]
def calculate_se_from_cov(cov: pd.DataFrame):
"""Calculate standard errors from a covariance matrix
Parameters
----------
cov : pd.DataFrame
Input covariance matrix
Return
------
pd.Series
Standard errors
Examples
--------
>>> from pharmpy.modeling import calculate_se_from_cov
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> cov = results.covariance_matrix
>>> cov
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 4.411510e-08 4.010000e-08 -0.000002 -0.000001 1.538630e-07 8.178090e-08
PTVV 4.010000e-08 7.233530e-04 -0.000804 0.000050 7.171840e-05 1.461760e-05
THETA_3 -1.665010e-06 -8.040250e-04 0.007016 -0.000108 -3.944800e-05 2.932950e-05
IVCL -1.093430e-06 4.981380e-05 -0.000108 0.000180 -1.856650e-05 4.867230e-06
IVV 1.538630e-07 7.171840e-05 -0.000039 -0.000019 5.589820e-05 -4.685650e-07
SIGMA_1_1 8.178090e-08 1.461760e-05 0.000029 0.000005 -4.685650e-07 5.195640e-06
>>> calculate_se_from_cov(cov)
PTVCL 0.000210
PTVV 0.026895
THETA_3 0.083762
IVCL 0.013415
IVV 0.007477
SIGMA_1_1 0.002279
dtype: float64
See also
--------
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
se = pd.Series(np.sqrt(np.diag(cov.values)), index=cov.index)
return se
[docs]
def calculate_se_from_prec(precision_matrix: pd.DataFrame):
"""Calculate standard errors from a precision matrix
Parameters
----------
precision_matrix : pd.DataFrame
Input precision matrix
Return
------
pd.Series
Standard errors
Examples
--------
>>> from pharmpy.modeling import calculate_se_from_prec
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> prec = results.precision_matrix
>>> prec
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 2.995567e+07 22660.028196 16057.855248 203511.614428 -39474.250514 -820118.299536
PTVV 2.266003e+04 2129.904642 260.176234 -375.266233 -2800.816246 -7718.769557
THETA_3 1.605786e+04 260.176234 187.038903 177.207683 -205.808480 -2225.150449
IVCL 2.035116e+05 -375.266233 177.207683 7527.530027 2462.974821 -9977.488860
IVV -3.947425e+04 -2800.816246 -205.808480 2462.974821 22343.198618 9370.758371
SIGMA_1_1 -8.201183e+05 -7718.769557 -2225.150449 -9977.488860 9370.758371 249847.177845
>>> calculate_se_from_prec(prec)
PTVCL 0.000210
PTVV 0.026895
THETA_3 0.083762
IVCL 0.013415
IVV 0.007477
SIGMA_1_1 0.002279
dtype: float64
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
se = pd.Series(
np.sqrt(np.diag(np.linalg.inv(precision_matrix.values))), index=precision_matrix.index
)
return se
[docs]
def calculate_corr_from_cov(cov: pd.DataFrame):
"""Calculate correlation matrix from a covariance matrix
Parameters
----------
cov : pd.DataFrame
Covariance matrix
Return
------
pd.DataFrame
Correlation matrix
Examples
--------
>>> from pharmpy.modeling import calculate_corr_from_cov
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> cov = results.covariance_matrix
>>> cov
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 4.411510e-08 4.010000e-08 -0.000002 -0.000001 1.538630e-07 8.178090e-08
PTVV 4.010000e-08 7.233530e-04 -0.000804 0.000050 7.171840e-05 1.461760e-05
THETA_3 -1.665010e-06 -8.040250e-04 0.007016 -0.000108 -3.944800e-05 2.932950e-05
IVCL -1.093430e-06 4.981380e-05 -0.000108 0.000180 -1.856650e-05 4.867230e-06
IVV 1.538630e-07 7.171840e-05 -0.000039 -0.000019 5.589820e-05 -4.685650e-07
SIGMA_1_1 8.178090e-08 1.461760e-05 0.000029 0.000005 -4.685650e-07 5.195640e-06
>>> calculate_corr_from_cov(cov)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 1.000000 0.007099 -0.094640 -0.388059 0.097981 0.170820
PTVV 0.007099 1.000000 -0.356899 0.138062 0.356662 0.238441
THETA_3 -0.094640 -0.356899 1.000000 -0.096515 -0.062991 0.153616
IVCL -0.388059 0.138062 -0.096515 1.000000 -0.185111 0.159170
IVV 0.097981 0.356662 -0.062991 -0.185111 1.000000 -0.027495
SIGMA_1_1 0.170820 0.238441 0.153616 0.159170 -0.027495 1.000000
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
corr = pd.DataFrame(cov2corr(cov.values), index=cov.index, columns=cov.columns)
return corr
[docs]
def calculate_cov_from_prec(precision_matrix: pd.DataFrame):
"""Calculate covariance matrix from a precision matrix
Parameters
----------
precision_matrix : pd.DataFrame
Precision matrix
Return
------
pd.DataFrame
Covariance matrix
Examples
--------
>>> from pharmpy.modeling import calculate_cov_from_prec
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> prec = results.precision_matrix
>>> prec
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 2.995567e+07 22660.028196 16057.855248 203511.614428 -39474.250514 -820118.299536
PTVV 2.266003e+04 2129.904642 260.176234 -375.266233 -2800.816246 -7718.769557
THETA_3 1.605786e+04 260.176234 187.038903 177.207683 -205.808480 -2225.150449
IVCL 2.035116e+05 -375.266233 177.207683 7527.530027 2462.974821 -9977.488860
IVV -3.947425e+04 -2800.816246 -205.808480 2462.974821 22343.198618 9370.758371
SIGMA_1_1 -8.201183e+05 -7718.769557 -2225.150449 -9977.488860 9370.758371 249847.177845
>>> calculate_cov_from_prec(prec)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 4.411510e-08 4.010000e-08 -0.000002 -0.000001 1.538630e-07 8.178090e-08
PTVV 4.010000e-08 7.233530e-04 -0.000804 0.000050 7.171840e-05 1.461760e-05
THETA_3 -1.665010e-06 -8.040250e-04 0.007016 -0.000108 -3.944800e-05 2.932950e-05
IVCL -1.093430e-06 4.981380e-05 -0.000108 0.000180 -1.856650e-05 4.867230e-06
IVV 1.538630e-07 7.171840e-05 -0.000039 -0.000019 5.589820e-05 -4.685650e-07
SIGMA_1_1 8.178090e-08 1.461760e-05 0.000029 0.000005 -4.685650e-07 5.195640e-06
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
cov = pd.DataFrame(
np.linalg.inv(precision_matrix.values),
index=precision_matrix.index,
columns=precision_matrix.columns,
)
return cov
[docs]
def calculate_cov_from_corrse(corr: pd.DataFrame, se: pd.Series):
"""Calculate covariance matrix from a correlation matrix and standard errors
Parameters
----------
corr : pd.DataFrame
Correlation matrix
se : pd.Series
Standard errors
Return
------
pd.DataFrame
Covariance matrix
Examples
--------
>>> from pharmpy.modeling import calculate_cov_from_corrse
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> corr = results.correlation_matrix
>>> se = results.standard_errors
>>> corr
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 1.000000 0.007099 -0.094640 -0.388059 0.097981 0.170820
PTVV 0.007099 1.000000 -0.356899 0.138062 0.356662 0.238441
THETA_3 -0.094640 -0.356899 1.000000 -0.096515 -0.062991 0.153616
IVCL -0.388059 0.138062 -0.096515 1.000000 -0.185111 0.159170
IVV 0.097981 0.356662 -0.062991 -0.185111 1.000000 -0.027495
SIGMA_1_1 0.170820 0.238441 0.153616 0.159170 -0.027495 1.000000
>>> calculate_cov_from_corrse(corr, se)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 4.411512e-08 4.009998e-08 -0.000002 -0.000001 1.538630e-07 8.178111e-08
PTVV 4.009998e-08 7.233518e-04 -0.000804 0.000050 7.171834e-05 1.461762e-05
THETA_3 -1.665011e-06 -8.040245e-04 0.007016 -0.000108 -3.944801e-05 2.932957e-05
IVCL -1.093431e-06 4.981380e-05 -0.000108 0.000180 -1.856651e-05 4.867245e-06
IVV 1.538630e-07 7.171834e-05 -0.000039 -0.000019 5.589820e-05 -4.685661e-07
SIGMA_1_1 8.178111e-08 1.461762e-05 0.000029 0.000005 -4.685661e-07 5.195664e-06
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
sd_matrix = np.diag(se.values)
cov = sd_matrix @ corr.values @ sd_matrix
cov_df = pd.DataFrame(cov, index=corr.index, columns=corr.columns)
return cov_df
[docs]
def calculate_prec_from_cov(cov: pd.DataFrame):
"""Calculate precision matrix from a covariance matrix
Parameters
----------
cov : pd.DataFrame
Covariance matrix
Return
------
pd.DataFrame
Precision matrix
Examples
--------
>>> from pharmpy.modeling import calculate_prec_from_cov
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> cov = results.covariance_matrix
>>> cov
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 4.411510e-08 4.010000e-08 -0.000002 -0.000001 1.538630e-07 8.178090e-08
PTVV 4.010000e-08 7.233530e-04 -0.000804 0.000050 7.171840e-05 1.461760e-05
THETA_3 -1.665010e-06 -8.040250e-04 0.007016 -0.000108 -3.944800e-05 2.932950e-05
IVCL -1.093430e-06 4.981380e-05 -0.000108 0.000180 -1.856650e-05 4.867230e-06
IVV 1.538630e-07 7.171840e-05 -0.000039 -0.000019 5.589820e-05 -4.685650e-07
SIGMA_1_1 8.178090e-08 1.461760e-05 0.000029 0.000005 -4.685650e-07 5.195640e-06
>>> calculate_prec_from_cov(cov)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 2.995567e+07 22660.028196 16057.855248 203511.614428 -39474.250514 -820118.299536
PTVV 2.266003e+04 2129.904642 260.176234 -375.266233 -2800.816246 -7718.769557
THETA_3 1.605786e+04 260.176234 187.038903 177.207683 -205.808480 -2225.150449
IVCL 2.035116e+05 -375.266233 177.207683 7527.530027 2462.974821 -9977.488860
IVV -3.947425e+04 -2800.816246 -205.808480 2462.974821 22343.198618 9370.758371
SIGMA_1_1 -8.201183e+05 -7718.769557 -2225.150449 -9977.488860 9370.758371 249847.177845
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
Pm = pd.DataFrame(np.linalg.inv(cov.values), index=cov.index, columns=cov.columns)
return Pm
[docs]
def calculate_prec_from_corrse(corr: pd.DataFrame, se: pd.Series):
"""Calculate precision matrix from a correlation matrix and standard errors
Parameters
----------
corr : pd.DataFrame
Correlation matrix
se : pd.Series
Standard errors
Return
------
pd.DataFrame
Precision matrix
Examples
--------
>>> from pharmpy.modeling import calculate_prec_from_corrse
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> corr = results.correlation_matrix
>>> se = results.standard_errors
>>> corr
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 1.000000 0.007099 -0.094640 -0.388059 0.097981 0.170820
PTVV 0.007099 1.000000 -0.356899 0.138062 0.356662 0.238441
THETA_3 -0.094640 -0.356899 1.000000 -0.096515 -0.062991 0.153616
IVCL -0.388059 0.138062 -0.096515 1.000000 -0.185111 0.159170
IVV 0.097981 0.356662 -0.062991 -0.185111 1.000000 -0.027495
SIGMA_1_1 0.170820 0.238441 0.153616 0.159170 -0.027495 1.000000
>>> calculate_prec_from_corrse(corr, se)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 2.995565e+07 22660.041788 16057.848052 203511.410335 -39474.240358 -820116.179011
PTVV 2.266004e+04 2129.908225 260.176399 -375.266263 -2800.818557 -7718.757955
THETA_3 1.605785e+04 260.176399 187.038825 177.207512 -205.808434 -2225.144772
IVCL 2.035114e+05 -375.266263 177.207512 7527.518562 2462.972906 -9977.457873
IVV -3.947424e+04 -2800.818557 -205.808434 2462.972906 22343.197906 9370.736254
SIGMA_1_1 -8.201162e+05 -7718.757955 -2225.144772 -9977.457873 9370.736254 249846.006431
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_corr_from_prec : Correlation matrix from precision matrix
"""
sd_matrix = np.diag(se.values)
cov = sd_matrix @ corr.values @ sd_matrix
Pm = pd.DataFrame(np.linalg.inv(cov), index=corr.index, columns=corr.columns)
return Pm
[docs]
def calculate_corr_from_prec(precision_matrix: pd.DataFrame):
"""Calculate correlation matrix from a precision matrix
Parameters
----------
precision_matrix : pd.DataFrame
Precision matrix
Return
------
pd.DataFrame
Correlation matrix
Examples
--------
>>> from pharmpy.modeling import calculate_corr_from_prec
>>> from pharmpy.tools import load_example_modelfit_results
>>> results = load_example_modelfit_results("pheno")
>>> prec = results.precision_matrix
>>> prec
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 2.995567e+07 22660.028196 16057.855248 203511.614428 -39474.250514 -820118.299536
PTVV 2.266003e+04 2129.904642 260.176234 -375.266233 -2800.816246 -7718.769557
THETA_3 1.605786e+04 260.176234 187.038903 177.207683 -205.808480 -2225.150449
IVCL 2.035116e+05 -375.266233 177.207683 7527.530027 2462.974821 -9977.488860
IVV -3.947425e+04 -2800.816246 -205.808480 2462.974821 22343.198618 9370.758371
SIGMA_1_1 -8.201183e+05 -7718.769557 -2225.150449 -9977.488860 9370.758371 249847.177845
>>> calculate_corr_from_prec(prec)
PTVCL PTVV THETA_3 IVCL IVV SIGMA_1_1
PTVCL 1.000000 0.007099 -0.094640 -0.388059 0.097981 0.170820
PTVV 0.007099 1.000000 -0.356899 0.138062 0.356662 0.238441
THETA_3 -0.094640 -0.356899 1.000000 -0.096515 -0.062991 0.153616
IVCL -0.388059 0.138062 -0.096515 1.000000 -0.185111 0.159170
IVV 0.097981 0.356662 -0.062991 -0.185111 1.000000 -0.027495
SIGMA_1_1 0.170820 0.238441 0.153616 0.159170 -0.027495 1.000000
See also
--------
calculate_se_from_cov : Standard errors from covariance matrix
calculate_se_from_prec : Standard errors from precision matrix
calculate_corr_from_cov : Correlation matrix from covariance matrix
calculate_cov_from_prec : Covariance matrix from precision matrix
calculate_cov_from_corrse : Covariance matrix from correlation matrix and standard errors
calculate_prec_from_cov : Precision matrix from covariance matrix
calculate_prec_from_corrse : Precision matrix from correlation matrix and standard errors
"""
corr = pd.DataFrame(
cov2corr(np.linalg.inv(precision_matrix.values)),
index=precision_matrix.index,
columns=precision_matrix.columns,
)
return corr