В 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 предположительно берет нативные значения без округления. Отбрасывать значения или нет – вопрос не важный, т.к. в любом случае результирующая точность достаточна.
А с большими датасетами – вопрос открытый. На данный момен код возвращает: Невозможно образовать подлежащую оценке функцию при помощи заданного контраста. Невозможно вычислить гипотезу. И это огорчает.