Референсный код IBM SPSS для расчета доверительных интервалов в перекрестном исследовании биоэквивалентности (2X2X2 crossover)

В IBM SPSS для расчтета доверительных интервалов разницы лог-преобразованных параметров используется процедура GLM.
За основу был взять код предложенный пользователем Oiinkie на форуме bebac.at

Небольшая модификация связана с явным указанием фактора для контраста: /CONTRAST(Trt)=Simple(1) – требуется с вниманием указать какой уровень фактора будет референсным.

Дополнительный участок кода использует результаты таблицы контрастов для вычисления искомых доверительных интервалов в привычной форме.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
COMPUTE LnVar=LN(Var).
EXECUTE.

GLM
LnVar BY Per Seq Trt Subj
/CONTRAST(Trt)=Simple(1)
/METHOD=SSTYPE(3)
/INTERCEPT=INCLUDE
/CRITERIA=ALPHA(.1)
/DESIGN= Subj within Seq Per Trt Seq.

BEGIN PROGRAM Python.
import SpssClient, spss
from math import exp
SpssClient.StartClient()
OutputDoc = SpssClient.GetDesignatedOutputDoc()
OutputItemList = OutputDoc.GetOutputItems()
lastTab = OutputItemList.Size() - 3
OutputItem = OutputItemList.GetItemAt(lastTab)
PivotTable = OutputItem.GetSpecificType()
SpssDataCells = PivotTable.DataCellArray()
LL = exp(float(SpssDataCells.GetUnformattedValueAt(5,0)))*100;
UL = exp(float(SpssDataCells.GetUnformattedValueAt(6,0)))*100;
print "90% CI for Trt - Upper: "+str(UL)+" Lower: "+str(LL)
SpssClient.StopClient()
END PROGRAM.

Валидация относительно референсных датасетов далее…

Dataset Результат источника* Результат** Соответствует
A 95.09 (90.76, 99.62) Lower: 90.7620838999 Upper: 99.6162390363 Да
B 71.10 (51.45, 98.26) Lower: 51.4492394244 Upper: 98.2576292938 Да
C 58.56 (39.41, 87.03) Lower: 39.4078760828 Upper: 87.0287250069 Да
D 71.10 (51.45, 98.26) Lower: 51.4492394244 Upper: 98.2576292938 Да
E 91.83 (55.71, 151.37) Lower: 55.7105400915 Upper: 151.366613241 Да
F 99.89 (93.37, 106.86) Lower: 93.3722474735 Upper: 106.861967929 Да
G 92.15 (88.46, 95.99) *** Не известно
H 93.42 (86.81, 100.55) *** Не известно

*Результат округлен до 2х знаков после запятой

**Результат представлен без округления

Результаты SAS и IBM SPSS идентичны для данных до экспонирования. Но SAS дает значения экспоненты отличающиеся от того, что дает, к примеру EXCEL. IBM SPSS дает данные идентичные EXCEL если до экспонирования отбросить значения от 6-го знака после запятой.  Возможно проблема в точности экспонирования. Если не отбрасывать значения после 6-го знака, SPSS предположительно берет нативные значения без округления. Отбрасывать значения или нет – вопрос не важный, т.к. в любом случае результирующая точность достаточна.

А с большими датасетами – вопрос открытый. На данный момен код возвращает: Невозможно образовать подлежащую оценке функцию при помощи заданного контраста. Невозможно вычислить гипотезу. И это огорчает.