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
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
* Тема: Сплайновая регрессия в SPSS (кусочные полиномы).
* Ключевые слова: сплайн, кусочно-линейная регрессия, CNLR, NLR, узел, knot, spline, piecewise, разрыв, кубический, квадратичный, полином, нелинейный.
* Опубликован: в SPSSX-L 03.10.2001, перевод: 05.11.2008.
* Автор: корп. SPSS / David Matheson.
* Перевод: А. Балабанов.
* Размещение: http://www.spsstools.ru/Syntax/RegressionRepeatedMeasure/PiecewiseRegression.txt (.sps).
* Проверено: SPSS 15.0.0.


* (Вопрос) Меня интересует, работал ли кто-нибудь в SPSS с моделями кусочной регрессии. 
  У меня есть данные, где наряду с линейными взаимосвязями, присутствуют также и разрывы
  (скачки) функции, которые я хотел бы учесть в модели.


* (Ответ) Размещён в SPSSX-L 03.10.2001. Автор: David Matheson (техническая поддержка SPSS)

Я помещаю пару решений из SPSS AnswerNet. Первое решение связано с моделями кусочной
регрессии, когда положение узлов (известно). Второе решение - с ситуацией, когда положение
узловых точек оценивается по имеющимся данным. Хотя я так понимаю, что в вашей ситуации
есть трудность и с оценкой нахождения узла, и с оценкой скачка функции в узле. См. дополнительную
информацию о подобных моделях в Seber (ссылка дана во втором решении).


Решение 100000148: Сплайновая регрессия (a.k.a. кусочный полином).

Вопрос.
Как можно в SPSS устроить подгонку регрессионной модели, для
которой я ожидаю изменения коэффициента наклона в большую или
меньшую сторону (либо даже изменения знака коэффициента) при
некотором конкретном значении предиктора. Либо если я ожидаю, что
все значения отклика изменятся на некоторую константу после прохождения
предиктором некоторого значения?


Ответ.
Регрессионные модели, в которых функция меняется в одной или нескольких
точках на шкале значений предикторов, называются сплайнами, либо кусочными
полиномами, а сами точки переменения характера функции называются узловыми точками (узлами).
Если аналитику известны эти узлы, подгонка сплайнов без проблем осуществляется
в процедуре REGRESSION. Свойства этих сплайнов описаны ниже, а также
дано описание их подгонки в SPSS.
Существование сплайновой модели предполагается в случае, если аналитик
ожидает, что связь между предиктором и откликом меняется в некоторых точках
из ряда значений предиктора. Такое изменение в узловой точке может выражаться
в изменении формы связи (например, от линейной к квадратичной), в добавлении или
вычитании некоторой константы для прогноза отклика справа от узловой точки предиктора, 
либо просто в изменении наклона, ускорения и т.д. регрессионной функции. 
Допустим, имеется предиктор XA и отклик Y, и мы полагаем, что функция регрессии
меняется при достижении XA некоторого известного значения K1. Допустим также,
что мы вычислили переменные XA2 и XA3 (соответственно, квадраты и кубы значений XA)
для того, чтобы иметь возможность проверить кубическую модель.
Подгонка сплайна в этом случае осуществляется посредством создания дополнительного
набора предикторных переменных, от XB0 до XB3, которые все равны нулю если 
XA <= K1. Эти переменные предназначены для оценки изменения, соответственно, константы, 
линейного, квадратичного и кубического параметров модели для значений XA > K1.
model.
Если XA > K1, то:   XB0=1 ;
                    XB1=(XA-K1) ;
                    XB2=(XA-K1)**2 ;
                    XB3=(XA-K1)**3 .
Включение в модель XB0 позволяет учесть разрыв (скачок) функции регрессии
в узловой точке. Отсутствие XB0 будет означать, что регрессия может поменять
своё направление в узловой точке, но два куска линии (до и после K1) все
же будут соединены в узле. Заметим, что некоторые авторы определяют фиктивную
переменную XB0 как 1 для значений XA, больших, ИЛИ РАВНЫХ K1, другие же - 
для значений XA > K1, как это сделано выше. Правильный вариант нужно выбирать, исходя
из смысловой наполненности модели: сути того процесса, который моделируется. Именно
от этого зависит, будет ли ваша функция в узле непрерывной справа (XB0=1, если XA=K1), 
или непрерывной слева (XB=0,если XA=K1). Для всех элементов XB высших порядков значение
соответствующей XB-переменной в любом случае будет равно нулю в точке K1.

Если мы желаем проверить модель, в которой регрессия непрерывна в K1 и линейна
на обоих участках справа и слева от K1, а изменяется только коэффициент
наклона, мы включим  в качестве предикторов переменные XA и XB1. Значимая t-статистика
для коэффициента XB1 при наличии XA будет означать, что линия регрессии
значимо меняет наклон в узловой точке. Знак и величина коэффициента перед XB1, в таком
случае, укажет на направление и величину данного изменения.

При выборе сплайна существует компромисс между гладкостью функции в узловых
точках и достижением наилучшей подгонки к данным. Для регрессионной функции
порядка R максимальная гладкость достигается при уравнивании всех производных
порядков ниже R с обеих сторон узловой точки. Это ограничение достигается добавлением
лишь одного параметра из набора XB: параметра R-ой степени. Например, отклик Y
может прогнозироваться с помощью переменных XA, XA2, XA3 и XB3. То есть, при прохождении
узловой точки корректируется только кубическая составляющая сплайна. Если подобная модель
плохо подходит под данные, либо не соответствует теории, аналитик может снять одно или
несколько ограничений на непрерывность, введя в модель параметры (XA-K1), т.е. XB-переменные
низших порядков. 
Прекрасное введение в параметризацию и проверку сплайновых моделей можно найти в 
статье Патриции Смит: Patricia Smith, "Splines as Useful and Convenient
Statistical Tools" в журнале American Statistician, 1979 г. Смит приводит также обсуждение
ограничений, необходимых, когда функция после узла является полиномом более низкого порядка, 
чем до него.

Следует иметь в виду, что с увеличением количества узлов и параметров регрессионной модели
исследователь быстро сталкивается с проблемой мультиколлинеарности.


Ниже приведены 4 примера определения и проверки сплайновых моделей.
В каждом примере полагается, что переменные Y и XA известны и присутствуют в 
активном файле данных. Синтаксис команды REGRESSION в примерах достаточно
скудный, т.е. без построения графиков остатков или другой диагностической информации,
что сделано ради фокуса на аспектах, специфичных для подгонки сплайнов.
(Но, разумеется, использование  графиков, диагностики коллинеарности и выбросов, 
должно быть постоянно в арсенале практических методов аналитика при построении
регрессий с помощью процедуры REGRESSION для оценки корректности модели, 
выполнения предположений и контроля эффекта нехарактерных значений.)

ПРИМЕР 1
В первом примере линейная модель имеет 2 узла, в XA=15 и XA=25, и 
является непрерывной в обеих узловых точках.

COMPUTE xb1 = xa - 15.
COMPUTE xc1 = xa - 25.
RECODE xb1 xc1 (lo thru 0 = 0).
REGRESSION VARIABLES = y xa xb1 xc1
      /STATISTICS = DEFAULT
      /DEP = y
      /METHOD ENTER xa
      /METHOD ENTER xb1
      /METHOD ENTER xc1.

XB1 и XC1 вводятся разновременно, чтобы проверить изменение наклона
в первом узле вне зависимости от второго узла, рассмотрев гипотезу
о том, что XB1 = 0 при наличии XA. Затем подобная же гипотеза проверяется
для коэффициента перед XC1, уже при наличии XA и XB1.

ПРИМЕР 2
Во втором примере есть только один узел в XA=15. Сплайн непрерывен в
узле, но порядок полинома меняется. До узла взаимосвязь линейная, после
узла - квадратичная. Для моделирования этого эффекта созданы переменные
XB1 и XB2. Заметим, что квадратичный эффект для куска сплайна после K1
проверяется при наличии линейной составляющей для этого куска. Проверка
полиномов более высокого порядка при наличии всех полиномов более низкого 
порядка является стандартной практикой в подгонке полиномов.
От такой практики, однако, отходят, например, в ситуации, описанной в Примере 4,
где все составляющие высоких порядков для куска XB введены в модель в первую очередь.
В последнем случае мы проверяли выполнение ограничений на непрерывность, и добавление
каждого нового XB-параметра в модель улучшало качество подгонки регрессии, но ухудшало
её непрерывность.

COMPUTE xb1 = xa - 15.
RECODE xb1 (LO THRU 0 = 0).
COMPUTE xb2 = xb1*xb1.
REGRESSION VARIABLES = y xa xb1 xb2
     /STATISTICS = DEFAULT CHA
     /DEP = y
     /METHOD ENTER xa
     /METHOD ENTER xb1
     /METHOD ENTER xb2.

ПРИМЕР 3
В третьем примере сплайн имеет разрыв в узле XA=15.
Модель предполагает при этом, что функция квадратична до и после узла.
Сплайн непрерывен справа в узле, т.е., если XA=15, то XB0=1
(функция делает "скачок" в точке 15, а не после 15).

COMPUTE XA2 = XA*XA.
COMPUTE XB0 = (XA GE 15).
COMPUTE XB1 = XB0 * (XA - 15).
COMPUTE XB2 = XB1 * XB1.
REGRESSION VARIABLES = y xa xa2 xb0 xb1 xb2
      /STATISTICS = DEFAULT CHA
      /DEP = y
      /METHOD ENTER xa xa2
      /METHOD ENTER xb0 xb1 xb2.

Здесь в начале проверяется единая квадратичная функция. Затем, со введением
XB-переменных во второй блок модели, проверяется потребность в построении сплайна.
Если изменение R-квадрат не является значимым, это означает, что единая квадратичная
функция одинаково описывает взаимосвязь X и Y на всем ряде значений переменной X.


ПРИМЕР 4
В четвертом примере существует один узел в точке XA=15. Подгоняется кубический
сплайн с ограничением, что все производные второго и низших порядков равны с обеих 
сторон узла, что эквивалентно утверждению, что в узле меняется только кубическая
составляющая регрессионной функции. Ограничения на непрерывность постепенно ослабляются
серией подкоманд METHOD, которые вводят в модель XB-параметры низших порядков. Заметьте, 
что параметры низших порядков для переменной X (XA) присутствуют во всех моделях, даже если
XB-параметры низших порядков в модели отсутствуют.

COMPUTE XA2 = XA*XA.
COMPUTE XA3 = XA2*XA.
COMPUTE XB0 = (XA GE 15).
COMPUTE XB1 = XB0 * (XA - 15).
COMPUTE XB2 = XB1 * XB1.
COMPUTE XB3 = XB2 * XB1.
REGRESSION VARIABLES = y xa xa2 xa3 xb0 xb1 xb2 xb3
      /STATISTICS = DEFAULT CHA
      /DEP = y
      /METHOD ENTER XA XA2 XA3
      /METHOD ENTER XB3
      /METHOD ENTER XB1
      /METHOD ENTER XB0.

******************************************.

Решение 100009298 : Сплайновая регрессия с оценкой узлов в SPSS

Вопрос.
Как можно в SPSS устроить подгонку регрессионной модели, для
которой я ожидаю изменения коэффициента наклона в большую или
меньшую сторону (либо даже изменения знака коэффициента) при
некотором значении предиктора. При этом я хотел бы, чтобы точка, 
с которой начинается это изменение, также оценивалась бы в качестве параметра модели.
Можно ли в SPSS построить подобную модель?


Ответ.
Регрессионные модели, в которых функция меняется в одной или нескольких
точках на шкале значений предикторов, называются сплайнами, либо кусочными
полиномами, а сами точки переменения характера функции называются узловыми точками (узлами).
Если аналитику известны эти узлы, подгонка сплайнов без проблем осуществляется
в процедуре REGRESSION. Решение 100000148 описывает свойства таких сплайнов и 
процедуру их оценивания в SPSS. Если же эти узлы должны быть оценены по данным, т.е.
если узел сам представлен переменной, то множество подобных моделей можно построить в
процедурах SPSS NLR и CNLR, как это описано ниже. Эти процедуры, соответственно, 
оценивают нелинейные регрессионные модели, а также нелинейные регрессионные модели с
ограничениями.

Одно из свойств NLR, которое позволяет нам осуществлять подгонку моделей с 
переменными-узлами, это возможность вводить мультипликативные взаимосвязи между
параметрами. Команда MODEL PROGRAM для первого примера, иллюстрирует эту возможность
с 3-фазной линейной сплайновой моделью.

MODEL PROGRAM ba0=3 ba1=3 bb1=-4 bc1=2 knot1=15 knot2=25.
COMPUTE predex1 = ba0 + ba1*xa + bb1*(xa-knot1)*(xa GE knot1)
                + bc1*(xa-knot2)*(xa GE knot2).
NLR y1 with xa / pred = predex1 /save pred resid (residex1).

Параметры ba0 и ba1, соответственно, задают константу и линейный коэффициент для
предиктора XA. Параметр bb1 - это вторая фаза коррекции наклона (линейного коэффициента).
Он применяется к разности (xa - knot1) когда knot1 является первым узлом. Умножая этот 
параметр на результат логического выражения (xa GE knot1), мы ограничиваем
действие bb1 только областью значений XA, равных, или превосходящих первую узловую точку.

Параметр bc1 представляет дальнейшую коррекцию угла наклона (третью фазу). Его
взаимосвязь с точкой второго узла (knot2) аналогично взаимосвязи bb1/knot1.
Поименовав knot1 и knot2 в команде MODEL PROGRAM, мы объявили их параметрами, 
подлежащими оценке. Значения, которые мы приписали каждому параметру - только лишь
стартовые значения для итеративной процедуры их оценки методом максимального правдоподобия, 
который заложен в процедуры NLR и CNLR.

Однако, на переменные-узлы следует наложить одно ограничение, не обязательное
для моделей с фиксированными узлами. Функция должна быть непрерывна в узле. Это значит,
что в ней не может быть "скачков", или ступеней в узле. Этот ограничение, фактически,
запрещает введение константы на фазе 2 (параметра шага) при оценке процедурами NLR или CNLR.
Кроме того, примеры ниже ограничены ситуациями, когда само число узлов фиксируется
аналитиком, хотя их положение и оценивается по данным автоматически. Наконец, если в 
вашей модели предполагается существование более чем одного узла, вы можете захотеть 
наложить условие, чтобы "позднейшие" узлы имели большие значения, чем "ранние". Обычно
для этого требуется просто приписать "позднейшим" узлам более высокие стартовые значения, 
чем у "ранних", но в слабо идентифицирующихся моделях может потребоваться введение 
дополнительного ограничения. Для этого нужно использовать CNLR-процедуру с ограничениями,
указываемыми в подкоманде /BOUNDS. Такое ограничение иллюстрируется в первом примере, 
где имеется 2 узла.

Дополнительную информацию о регрессионных моделях с фиксированными и переменными узлами см.
в 9-й главе Seber, G.A.F., & Wild, C.J. (1989). Nonlinear regression. New York: Wiley.

Далее показано три примера анализа со сплайновой регрессией и переменными-узлами.
Вначале приводится INPUT-программа для создания случайного массива данных для примера.
Выполните эти команды в SPSS перед началом экспериментов с подгонкой модели.
В каждом примере предиктором является переменная XA. Каждое её значение в данных 
повторяется 3 раза. Зависимые переменные для примеров 1, 2 и 3, соответственно - Y1, Y2 и Y3.
Они генерируются командами SPSS прямо перед соответствующим анализом в примере. 
Данные для примеров достаточно рафинированные и, кроме того, мы немного
"жульничаем", устанавливая начальные значения для подбора параметров равными
тем значениям, с которыми данные были сгенерированы. Тем не менее, примеры достаточно
хорошо иллюстрируют процесс использования процедур NLR и CNLR для подгонки сплайновых моделей.

******************************************.

SET SEED = 2000000.
title 'Сплайн с оценкой узлов, хорошие стартовые значения'.
INPUT PROGRAM.
LOOP xa = 1 TO 35.
LOOP rep = 1 TO 3.
LEAVE xa.
END case.
END LOOP.
END LOOP.
END file.
END INPUT PROGRAM.
EXECUTE.

*   ПРИМЕР 1
    В первом примере линейная модель имеет 2 узла,
    стартовые значения для которых XA=15 и XA=25,
    и является непрерывной в обеих узловых точках.
* y1 - независимая переменная.
COMPUTE y1=3 + 3*xa + normal(2).
IF (xa gt 15) y1=y1 - 4*(xa-15).
IF (xa gt 25) y1=y1 + 2*(xa-25).

GRAPH /SCATTER=xa with y1.

* Ограничения на значения узлов не установлены.
MODEL PROGRAM ba0=3 ba1=3 bb1=-4 bc1=2 knot1=15 knot2=25.
COMPUTE predex1 = ba0 + ba1*xa + bb1*(xa-knot1)*(xa GE knot1)
                + bc1*(xa-knot2)*(xa GE knot2).
NLR y1 / PRED = predex1 /SAVE pred resid (residex1).
* Диаграммы для диагностики остатков и предсказанных значений.
GRAPH /SCATTER=predex1 WITH residex1.
GRAPH /SCATTER= predex1 WITH y1.
GRAPH /SCATTER=xa WITH predex1.

*  Для пользователей SPSS версий ранее 5.0, предиктор(ы) в командах NLR и CNLR
*  вам следует указывать так:.
* NLR y1 WITH xa / PRED = predex1 /SAVE pred resid (residex1).
* В позднейших версиях SPSS такая форма команды будет вызывать предупреждение, но 
* команда всё же будет выполняться.

*  Пример 1 с дополнительным ограничением: KNOT2 должен быть больше, чем KNOT1.
MODEL PROGRAM  ba0=3 ba1=3 bb1=-4 bc1=2 knot1=15 knot2=25.
COMPUTE predex1 = ba0 + ba1*xa + bb1*(xa-knot1)*(xa ge knot1)
                + bc1*(xa-knot2)*(xa ge knot2).
CNLR y1 / PRED = predex1 /SAVE pred resid (residex1)
   / BOUNDS knot2 - knot1 > 0 .
GRAPH /SCATTER=predex1 WITH residex1.
GRAPH /SCATTER= predex1 WITH y1.
GRAPH /SCATTER=xa WITH predex1.



*   ПРИМЕР 2.
* Во втором примере есть один узел в значении XA=15. Сплайн непрерывен в 
* узле, но порядок полинома в нём меняется.
* До узла функция линейна, после - квадратична.
* Y2 - независимая переменная.
COMPUTE y2 = 4 + 2*xa + normal(.5).
IF (xa gt 15) y2=y2 + (xa - 15) - .5*(xa-15)*(xa-15).
GRAPH /SCATTER=xa WITH y2.

* В этой модели мы вычислим промежуточную переменную, pc2, 
которая просто содержит результат логического выражения (xa GE knot1).
* Это сделано просто во избежание многократного повторения этого выражения.
* Параметр knot1 подлежит оценке.

MODEL PROGRAM ba0=4 ba1=2 bb1=1 bb2=-0.5 knot1=15  .
COMPUTE pc2 = (xa GE knot1).
COMPUTE predex2 = ba0 + ba1*xa + bb1*(xa-knot1)*pc2
                + bb2*((xa-knot1)**2)*pc2.
NLR y2  / PRED = predex2 /SAVE pred resid (residex2).

GRAPH /SCATTER=predex2 WITH residex2.
GRAPH /SCATTER= predex2 WITH y2.
GRAPH /SCATTER=xa WITH predex2.


*   ПРИМЕР 3.
* В третьем примере есть один узел в значении XA=15.
* Осуществляется подгонка кубического сплайна с ограничением, что
  все производные второго и низших порядков с обеих сторон от узла равны, 
  что эквивалентно утверждению, что после прохождения узловой точки меняется
  только кубическая составляющая. Затем ограничение на непрерывность постепенно
  ослабляется вводом в модель NLR параметров XB низших порядков. Если вы посмотрите
  на корреляции между оценками параметров, вы увидите, что последние 2 модели плохо
  идентифицируются, т.к. многие из этих корреляций очень высоки. В последней модели 
  некоторые из оценок параметров идеально коррелированы. Эти модели приводятся здесь
  для иллюстрации последствий снятия ограничений.
COMPUTE y3 = 6 + 3.5*xa - 1.5*xa*xa + .5*xa*xa*xa + normal(.5).
IF (xa gt 15) y3 = y3 - 2*(xa-15)*(xa-15)*(xa-15).
GRAPH /SCATTER=xa WITH y3.

MODEL PROGRAM ba0=6 ba1=3.5 ba2=-1.5 ba3=0.5 bb3=-2 knot1=15  .
COMPUTE pc2 = (xa ge knot1).
COMPUTE predex3 = ba0 + ba1*xa + ba2*xa*xa + ba3*xa*xa*xa
                + bb3*((xa-knot1)**3)*pc2.
NLR y3 / PRED = predex3 /SAVE pred resid (residex3).

GRAPH /SCATTER=predex3 WITH residex3.
GRAPH /SCATTER= predex3 WITH y3.
GRAPH /SCATTER=xa WITH predex3.

* Пример 3 с дополнительным квадратичным параметром после узла.
MODEL PROGRAM ba0=6 ba1=3.5 ba2=-1.5 ba3=0.5 bb2=0 bb3=-2 knot1=15  .
COMPUTE pc2 = (xa ge knot1).
COMPUTE pred = ba0 + ba1*xa + ba2*xa*xa + ba3*xa*xa*xa
                + bb2*((xa-knot1)**2)*pc2 + bb3*((xa-knot1)**3)*pc2.
NLR y3.

* Пример 3 с дополнительными квадратичным и линейным параметрами после узла.
MODEL PROGRAM ba0=6 ba1=3.5 ba2=-1.5 ba3=0.5
              bb1=0 bb2=0 bb3=-2 knot1=15 .
COMPUTE pc2 = (xa ge knot1).
COMPUTE pred = ba0 + ba1*xa + ba2*xa*xa + ba3*xa*xa*xa
                + bb1*(xa-knot1)*pc2 + bb2*((xa-knot1)**2)*pc2
                + bb3*((xa-knot1)**3)*pc2.
NLR y3.