ClinicalTrialUtilities – пакет для программной среды вычислений Julia. Цель разработки пакета – создание и объединение в одном пакете инструментов для планирования клинического исследования, а также для выполнения анализа результатов клинических исследований. В цели разработки пакета не входит создание полного статистического пакета для выполнения всех возможных статистических процедур, тем не менее в пакет включены функции, который на момент разработки либо не представлены в популярных пакетах (StatsBase, Statistics, HypothesisTests, GLM, MixedModelsи др.), либо направлены на повышение удобства использования статистического инструментария.
Ссылка: ClinicalTrialUtilities
Валидация пакета (проверка соответствия результатов вычислений референтным значениям) выполняется при каждом релизе. Пользовательская валидация может быть выполнена в любое время на ПК пользователя. Процедуры валидации включают выполнение более 200 тестов. Для каждой функции представленной в пакете выполняется проверка соответствия полученных значений результатам вычислений выполненных с помощью пакетов для среды вычислений R, валидированного ПО или результатам, представленным в литературе (источники для используемых методов). См. Валидация.
Установка пакета:
1 | using Pkg; Pkg.add("ClinicalTrialUtilities"); |
Проведение тестов (валидации):
1 | Pkg.test("ClinicalTrialUtilities"); |
Использование:
1 | using ClinicalTrialUtilities; |
Функции
-
ClinicalTrialUtilities (module)
- descriptives – описательная статистика;
- ctSampleN – объем выборки для клинических исследований;
- ctPower – мощность клинического исследования;
- beSampleN – объем выборки для исследования биоэквивалентности;
- bePower – мощность исследования биоэквивалентности;
- ci2cv – коэффициент вариации по доверительному интервалу;
- pooledCV – объединенное CV;
-
CI (submodule)
- oneProp – доверительный интервал для одной пропорции;
- twoProp – доверительный интервал для двух пропорций (разность долей, отношение долей(рисков), отношение шансов);
- oneMeans – доверительный интервал для средних;
- twoMeans – доверительный интервал для разности средних;
- cmh – доверительный интервал для стратифицированных данных по методу Cochran–Mantel–Haenszel.
-
PK (submodule)
- nca – расчет фармакокинетических параметров;
-
SIM (submodule)
- bePower – оценка мощности исследования биоэквивалентности с помощью симуляции;
- ctPropPower – оценка мощности клинического исследования с помощью симуляцмм – пропорции;
- ctPropSampleN – оценка объема выборки для клинического исследования с помощью симуляции – пропорции;
- ctMeansPower – оценка мощности клинического исследования с помощью симуляции – средние;
- ctMeansPowerFS – оценка мощности с помощью симуляции – генерация на уровне субъектов – средние;
Основные функции[1-6]
Функции модуля ClinicalTrialUtilities.
descriptives
Описательная статистика для группированных и не группированных данных в виде ::DataFrame.
1 | descriptives(data::DataFrame; sort = NaN, vars = NaN, stats = [:n, :mean, :sd, :sem, :uq, :median, :lq])::DataFrame |
data::DataFrame – таблица данных;
sort::Symbol[] – массив типа Symbol столбцов по которым проводится группировка, NaN – если сортировка не требуется;
vars::Symbol[] – массив Symbol столбцов данных для описательной статистики, если NaN – выполняется описательная статистика всех столбцов типа Real кроме указанных в массиве sort;
stats::Symbol[] – массив описательных статистик, по умолчанию [:n, :mean, :sd, :sem, :uq, :median, :lq], последовательность статистик в массиве соответствует выводу.
ctSampleN
Расчет объема выборки для клинических исследований биоэквивалентности.
1 | ctSampleN(;param=:notdef, type=:notdef, group=:notdef, alpha=0.05, beta=0.2, diff=0, sd=0, a=0, b=0, k=1, logdiff=false, out=:num) |
param::Symbol – тип параметра:
- :mean – средние;
- :prop – пропорции;
- :or – отношение шансов;
type::Symbol – гипотеза:
- :ea – равенство (equality);
- :ei – эквивалентность (equivalencens);
- :ns – не меньшая эффективность/превосходство (Non-Inferiority / Superiority) (односторонняя гипотеза);
- :mcnm – тест МакНемара (McNemar’s equality test);
group::Symbol – число групп:
- :one – одна группа (one sample);
- :two – две группы (two sample), результаты для одной группы, размер второй группы = n * k;
alpha – вероятность ошибки I рода (alpha) (0 < alpha < 1) (по умолчанию=0.05);
beta – Beta (o < beta < 1) (по умолчанию=0.2); power = 1 – beta;
diff – разность/граница эквивалентности/граница не меньшей эффективности/граница эффективности (difference/equivalence margin/non-inferiority/superiority margin);
sd – стандартное отклонение (σ, для средних);
a – Среднее – нулевая гипотеза / группа А (Null Hypothesis mean (μ0), Group A);
b – Среднее сравнения / группа B (True mean (μ) for one sample / Group B for two sample design);
k – Отношение субъектов в группе Na/Nb (по умолчанию=1);
logdiff – log-трансформирование показателя diff для отношения шансов:
- false (по умолчанию, diff будет трансформирован)
- true
out – тип вывода:
- :num – число (по умолчанию);
- :str – строка;
- :vstr – число и строка Tuple{Float64,String};
- :print – вывод в консоль;
Пример:
1 2 3 4 5 6 | #Пропорции, одна группа, равенство (alpha, beta - по умолчанию) ctSampleN(param=:prop, type=:ea, group=:one, a=0.3, b=0.5) #Средние, эквивалентность, две группы ctSampleN(param=:mean, type=:ei, group=:two, diff=0.3, sd=1, a=0.3, b=0.5) #Отношение шансов, не меньшая эффективность, отношение в группе 1:2 ctSampleN(param=:or, type=:ns, diff=-0.1, a=0.3, b=0.5, k=2) |
ctPower
Расчет мощности для клинических исследований.
1 | ctPower(;param=:notdef, type=:notdef, group=:notdef, alpha=0.05, logdiff=false, diff=0, sd=0, a=0, b=0, n=0, k=1, out=:num) |
n – количество субъектов в одной группе;
Описание остальных параметров идентично ctSampleN.
Пример:
1 | ctPower(param=:mean, type=:ea, group=:one, a=1.5, b=2, sd=1,n=32, alpha=0.05) |
beSampleN
Расчет объема выборки для исследования биоэквивалентности.
1 | beSampleN(;alpha=0.05, beta=0.2, theta0=0.95, theta1=0.8, theta2=1.25, cv=0.0, logscale=true, design=:d2x2, method=:owenq, out=:num) |
alpha – вероятность ошибки I рода (alpha) (o < alpha < 1) (по умолчанию=0.05);
beta – Beta (o < beta < 1) (по умолчанию=0.2); power = 1 – beta;
theta0 – T/R отношение (по умолчанию=0.95);
theta1 – нижняя граница биоэквивалентности (по умолчанию=0.8);
theta2 – верхняя граница биоэквивалентности (по умолчанию=1.25);
cv – коэффициент вариации;
logscale – theta1, theta2, theta0: если true – выполнить log-трансформацию (по умолчанию true);
design – дизайн;
- :parallel
- :d2x2 (по умолчанию)
- :d2x2x4
- :d2x4x4
- :d2x3x3
- :d2x4x2
- :d3x3
- :d3x6x3
method – метод: Owen’s Q Function | NonCentral T | Shifted T;
- :owenq (по умолчанию)
- :nct
- :shifted
out – вывод:
- :num – число (по умолчанию);
- :str – строка;
- :vstr – число и строка Tuple{Float64,String};
- :print – вывод в консоль;
Пример:
1 2 3 4 5 | beSampleN(alpha=0.05, theta1=0.8, theta2=1.25, theta0=0.95, cv=0.15, method=:owenq) beSampleN(cv=0.20, method=:nct) beSampleN(cv=0.347, design=:parallel, out=:print) beSampleN(cv=0.40) n, p, s = beSampleN(cv=0.347, design=:d2x2x4, method=:nct, out=:vstr) |
bePower
Расчет мощности исследования биоэквивалентности.
1 | bePower(;alpha=0.05, theta1=0.8, theta2=1.25, theta0=0.95, cv=0.0, n=0, logscale=true, design=:d2x2, method=:owenq, out=:num) |
alpha – вероятность ошибки I рода (alpha), (o < alpha < 1) (по умолчанию=0.05);
theta0 – T/R отношение (по умолчанию=0.95);
theta1 – нижняя граница биоэквивалентности (по умолчанию=0.8);
theta2 – верхняя граница биоэквивалентности (по умолчанию=1.25);
cv – коэффициент вариации;
n – количество субъектов;
logscale – theta1, theta2, theta0: если true – выполнить log-трансформацию (по умолчанию true);
design – дизайн;
- :parallel
- :d2x2 (по умолчанию)
- :d2x2x4
- :d2x4x4
- :d2x3x3
- :d2x4x2
- :d3x3
- :d3x6x3
method – метод: Owen’s Q Function | NonCentral T | Shifted T;
- :owenq (по умолчанию)
- :nct
- :shifted
out – вывод:
- :num – число (по умолчанию);
- :str – строка;
- :vstr – число и строка Tuple{Float64,String};
- :print – вывод в консоль;
Пример:
1 2 3 4 5 6 | bePower(alpha=0.05, logscale=true, theta1=0.8, theta2=1.25, theta0=0.95, cv=0.2, n=20, design=:d2x2, method=:owenq) bePower(alpha=0.05, cv=0.2, n=20, design=:d2x2) bePower(alpha=0.1, logscale=false, theta1=-0.1, theta2=0.1, theta0=0, cv=0.14, n=21) bePower(alpha=0.1, logscale=false, theta1=-0.1, theta2=0.1, theta0=0, cv=0.14, n=21, method=:shifted) bePower(cv=0.4, n=35, design=:d2x4x4) bePower(cv=0.14, n=21) |
ci2cv
Приблизительная оценка коэффициента вариации по доверительному интервалу и количеству субъектов для исследования биоэквивалентности.
1 | ci2cv(;alpha = 0.05, theta1 = 0.8, theta2 = 1.25, n, design=:d2x2, mso=false, cvms=false) |
alpha – Alpha (o < alpha < 1) (по умолчанию=0.05);
beta – Beta (o < beta < 1) (по умолчанию=0.2); power = 1 – beta;
theta1 – Lower Level (по умолчанию=0.8);
theta2 – Upper level (по умолчанию=1.25);
n – число субъектов;
design – дизайн;
- :parallel
- :d2x2 (по умолчанию)
- :d2x2x4
- :d2x4x4
- :d2x3x3
- :d2x4x2
- :d3x3
- :d3x6x3
mso – расчитать только MS
- false(по умолчанию)
- true
cvms – расчитать CV и MS
- false(по умолчанию)
- true
Пример:
1 | ci2cv(;alpha = 0.05, theta1 = 0.9, theta2 = 1.25, n=30, design=:d2x2x4) |
pooledCV
Объединение CV.
1 | pooledCV(data::DataFrame; cv=:cv, df=:df, alpha=0.05, returncv=true)::ConfInt |
data::DataFrame – DataFrame с данными о CV;
cv::Symbol – столбец, содержащий CV (по умолчанию – :cv);
df::Symbol – столбец, содержащий DF (по умолчанию – :df);
alpha – Alpha для вычисления доверительного интервала CV (по умолчанию=0.05);
returncv – вернуть (результат) CV или вариацию:
- true (по умолчанию) – вернуть CV
- false – вернуть вариацию
Пример:
1 2 3 4 5 6 | using DataFrames data = DataFrame(cv = Float64[], df = Int[]) push!(data, (0.12, 12)) push!(data, (0.2, 20)) push!(data, (0.25, 30)) pooledCV(data; cv=:cv, df=:df, alpha=0.05, returncv=true) |
CI – сабмодуль
oneProp[7-14]
Двухсторонний( two-sided) доверительный интервал (CI) для пропорции.
1 | CI.oneProp(x::Int, n::Int; alpha=0.05, method=:wilson) |
x::Int – число позитивный исходов;
n::Int – общее число наблюдений;
alpha – alpha ;
method::Symbol – метод;
- :wilson – Wilson’s confidence interval (CI) for a single proportion (wilson score);
- :wilsoncc – Wilson’s CI с поправкой на непрерывность (CC);
- :cp – Clopper-Pearson exact CI;
- :soc – SOC: Second-Order corrected CI;
- :blaker – Blaker exact CI for discrete distributions;
- :arcsine – Arcsine CI;
- :wald – Wald CI без поправки на непрерывность;
twoProp
Расчет двухстороннего доверительного интервала (CI) для двух пропорций: разность, отношение шансов, отношение рисков.
1 | CI.twoProp(x1::Int, n1::Int, x2::Int, n2::Int; alpha=0.05, type=::Symbol, method::Symbol) |
x1::Int – число позитивный исходов в группе 1;
n1::Int – nuобщее число наблюдений в группе 1;
x2::Int – число позитивный исходов в группе 1;
n2::Int – nuобщее число наблюдений в группе 1;
alpha – alpha;
type – тип: разность, отношение рисков (risk ratio), отношение шансов (odd ratio);
- :diff – разность;
- :rr – отношение рисков;
- :or – отношение шансов;
method::Symbol – метод (различен для каждого типа);
Разность (:diff):
- :nhs – Newcombes Hybrid (wilson) Score;
- :nhscc – Newcombes Hybrid (wilson) Score с поправкой на непрерывность;
- :ac – Agresti-Caffo CI;
- :mn – Method of Mee 1984 c модификацией Miettinen и Nurminen;
- :mee – Mee Maximum Likelihood (ML) метод;
- :mee2 – ML метод (Farrington, C. P. and Manning, G. (1990));
- :wald – Wald;
- :waldcc – Wald с поправкой на непрерывность;
Отношение рисков (:rr):
- :cli – Crude log interval (Gart 1988);
- :mover – Method of variance estimates recovery (MOVER);
Отношение шансов (:or):
- :mn – Miettinen-Nurminen CI
- :woolf – Woolf logit CI
- :awoolf – Adjusted Woolf interval (Gart adjusted logit)
oneMeans
Параметрический двухстороннй доверительный интервал.
1 | CI.oneMean(m::Real, s::Real, n::Int, alpha::Real; method=:norm)::ConfInt |
m::Real – среднее;
s::Real- дисперсия;
n::Int – число наблюдений;
alpha::Real – alpha;
method – распределение:
- :norm – нормальное распределение (по умолчанию);
- :tdist – T-распределение.
twoMeans
Двухсторонний доверительный интервал для разности средних.
1 | CI.twoMeans(m1::Real, s1::Real, n1::Real, m2::Real, s2::Real, n2::Real; alpha::Real=0.05, method=:ev)::ConfInt |
m1 ::Real- среднее группы 1;
s1 ::Real- дисперсия группы 1;
n1 ::Int- число наблюдений в группе 1;
m2 ::Real– среднее групп 2;
s2 ::Real– дисперсия группы 2;
n2 ::Int- число наблюдений в группе 2;
alpha ::Real– alpha;
method – предполагается ли равенство дисперсий;
- :ev – равенство дисперсий (по умолчанию);
- :uv – дисперсии не равны, используется Welch-Satterthwaite поправка df.
cmh
Двухсторонний доверительный интервал по методу Cochran–Mantel–Haenszel.
1 | CI.cmh(data::DataFrame; a = :a, b = :b, c = :c, d = :d, alpha = 0.05, type =:diff, method = :default, logscale = false)::ConfInt |
data::DataFrame – стратифицированные данные 2х2 таблиц;
a, b, c, d – столбцы содержащие количество наблюдений в каждой из ячеек 2х2 таблицы:
outcome 1 | outcome 2 | |
---|---|---|
group 1 | a | b |
group 2 | c | d |
alpha – alpha ;
type – тип
- :diff – разница (по умолчанию);
- :or – отношение шансов;
- :rr – отношение рисков;
logscale – результат вычисления доверительного интервала в лог-преобразованном виде.
- false – нет (по умолчанию);
- true – да;
Пример, допустим есть данные двух источников (2 таблицы 2х2):
1:
outcome 1 | outcome 2 | |
---|---|---|
group 1 | 8 | 98 |
group 2 | 5 | 115 |
2:
outcome 1 | outcome 2 | |
---|---|---|
group 1 | 22 | 76 |
group 2 | 16 | 69 |
DataFrame:
1 2 3 | data = DataFrame(a = Int[], b = Int[], c = Int[], d = Int[]) push!(data, (8, 98, 5, 115)) push!(data, (22, 76, 16, 69)) |
Для разности рисков:
1 | ci = CI.cmh(data, alpha = 0.1) |
PK – сабмодуль
Расчет фармакокинетических параметров.
1 | PK.nca(data; conc=:Concentration, time=:Time, sort = NaN, calcm = :lint) |
conc::Symbol – столбец концентраций DataFrame;
time::Symbol – столбец времени DataFrame;
sort::Symbol[] – столбцы сортировки (по умолчанию – NaN, если не требуется сортировка);
calcm::Symbol – метод трапеций:
- :lint – линейные трапеции (linear trapezoidal);
- :logt – линейные трапеции до Tmax, лог-линейные трапеции на нисходящей части (linear trapezoidal before tmax and linear up log down after);
- :lulg – динейная трапеция если с2 >= c1, лог-линейная если иначе (linear up log down: if c2 >= c1 – linear, else log);
SIM – сабмодуль
bePower
1 | SIM.bePower(;alpha=0.05, logscale=true, theta1=0.8, theta2=1.25, theta0=0.95, cv=0.0, n=0, simnum=5, seed=0) |
ctPropPower
1 | SIM.ctPropSampleN(p1, p2, ref; alpha=0.05, beta=0.2, type=:notdef, citype =:notdef, method=:notdef, simnum=5, seed=0) |
ctPropSampleN
1 | SIM.ctPropSampleN(p1, p2, ref; alpha=0.05, beta=0.2, type=:notdef, citype =:notdef, method=:notdef, simnum=5, seed=0) |
ctMeansPower
1 | SIM.ctMeansPower(m1, s1, n1, m2, s2, n2, ref; alpha=0.05, method=:notdef, simnum=5, seed=0) |
ctMeansPowerFS
1 | SIM.ctMeansPowerFS(m1, s1, n1, m2, s2, n2, ref;alpha=0.05, method=:notdef, simnum::Real=5, seed=0) |
Валидация
Программа валидации:
- ctSampleN
- ctPower
- tfn
- owensTint2
- owensQo
- owensQ
- powerTOSTOwenQ
- approxPowerTOST
- approx2PowerTOST
- owensT
- designProp
- ci2cv
- pooledCV
- bePower
- beSampleN
- CI.oneProp
- CI.twoProp
- CI.mnzstat
- CI.twoMeans
- CI.oneMean
- CI.cmh
- SIM.bePower
- SIM.ctPropPower
- SIM.ctMeansPowerFS
- SIM.ctPropSampleN
- PK.nca
Ссылки
- Chow S, Shao J, Wang H. 2008. Sample Size Calculations in Clinical Research. 2nd Ed. Chapman & Hall/CRC Biostatistics Series.
- Connor R J. 1987. Sample size for testing differences in proportions for the paired-sample design. Biometrics 43(1):207-211.
- Phillips K F. 1990. Power of the Two One-Sided Tests Procedure in Bioequivalence. J Pharmacokin Biopharm. 1990;18(2):137–44. doi: 10.1007/BF01063556.
- Diletti D, Hauschke D, Steinijans V W. 1991. Sample Size Determination for Bioequivalence Assessment by Means of Confidence Intervals. Int J Clin Pharmacol Ther Toxicol. 1991;29(1):1–8.
- Owen D B. 1965. A Special Case of a Bivariate Non-central t-Distribution. Biometrika Vol. 52, pp.437-446.
- Owen D B. 1956. Tables for computing bivariate normal Probabilities. The Annals of Mathematical Statistics, Vol. 27 (4) Dec. 1956, pp. 1075-1090.
- Wilson, E.B. (1927) Probable inference, the law of succession, and statistical inference J. Amer.Stat. Assoc22, 209–212
- Newcombe, R. G. (1998). “Two-sided confidence intervals for the single proportion: comparison of seven methods”. Statistics in Medicine. 17 (8): 857–872.
- Clopper, C. and Pearson, E.S. (1934) The use of confidence or fiducial limits illustrated in the caseof the binomial.Biometrika26, 404–413.
- T. Tony Cai One-sided con&dence intervals in discrete distributions doi:10.1016/j.jspi.2004.01.00
- Blaker, H. (2000). Confidence curves and improved exact confidence intervals for discrete distributions,Canadian Journal of Statistics28 (4), 783–798
- Cohen, Jacob (1988). Statistical Power Analysis for the Behavioral Sciences (2nd ed.).
- Shao J (1998) Mathematical statistics. Springer. New York, New York, USA
- Laplace, Pierre Simon (1812). Théorie analytique des probabilités (in French). p. 283.
- Newcombe RG (1998). Interval Estimation for the Difference Between Independent Proportions: Comparison of Eleven Methods. Statistics in Medicine 17, 873-890.
- Agresti A, Caffo B., “Simple and effective confidence intervals for proportions and differences of proportions result from adding two successes and two failures”, American Statistician 54: 280–288 (2000)
- Mee RW (1984) Confidence bounds for the difference between two probabilities,Biometrics40:1175-1176
- Farrington, C. P. and Manning, G. (1990), “Test Statistics and Sample Size Formulae for Comparative Binomial Trials with Null Hypothesis of Non-zero Risk Difference or Non-unity Relative Risk,” Statistics in Medicine, 9, 1447–1454
- Gart, JJand Nam, J (1988): Approximate interval estimation of the ratio of binomial parameters: Areview and corrections for skewness. Biometrics 44, 323-338.
- Donner A, Zou GY. Closed-form confidence intervals for functions of the normal mean and standard deviation. Stat Methods Med Res. 2012 Aug;21(4):347-59.
- Newcombe G, 2013. MOVER-R confidence intervals for ratios and products of two independently
estimated quantities. Statistical Methods in Medical Research. - Miettinen O. S., Nurminen M. (1985) Comparative analysis of two rates.Statistics in Medicine4,213–226
- Woolf, B. (1955). On estimating the relation between blood group and disease. Annals of human genetics, 19(4):251-253.
- Lawson, R (2005):Smallsample confidence intervals for the odds ratio. Communication in Statistics Simulation andComputation, 33, 1095-1113.
- Snedecor, George W. and Cochran, William G. (1989), Statistical Methods, Eighth Edition, Iowa State University Press.
- Makoid C, Vuchetich J, Banakar V. 1996-1999. Basic Pharmacokinetics.
См. также:
- Brown, L.D., Cai, T.T., and DasGupta, A. Interval estimation for a binomial proportion. Statistical Science, 16(2):101–117, 2001.
- Agresti, A. 2002. Categorical Data Analysis. Wiley, 2nd Edition.