Нелинейная регрессия (NLR) с дисперсией остатков как функцией потерь
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 | * Тема: Использование дисперсии остатков в качестве функции потерь в нелинейной регрессии. * Ключевые слова: нелинейная регрессия, функция потерь, loss function, NLR, CNLR, LAG, LEAVE, макрос, интерполяция. * Опубликован: 03.02.2002, перевод: 03.11.2008. * Автор: Raynald Levesque, rlevesque@videotron.ca, http://www.spsstools.net. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/RegressionRepeatedMeasure/NLRwithVarianceAsLossFunction.txt(.sps). * Проверено: SPSS 13.0. * (Вопрос) Как можно включить в процедуру нелинейной интерполяции функцию потерь на основе дисперсии остатков?. *(Ответ) Для иллюстрации я использую пример со стр. 98 издания SPSS Regression Models 9.0, но включаю * в качестве функции потерь дисперсию остатков. * Это НЕТРИВИАЛЬНОЕ решение, т.к. для вычисления функции потерь нам требуются команды трансформации (преобразования данных, прохода (считки) файла). * Кроме того, после выполнения команды MODEL до следующей процедуры преобразования данных вы не можете использовать функцию LAG. * Автор: Raynald Levesque, rlevesque@videotron.ca, 03.02.2002. DATA LIST LIST /pop. BEGIN DATA 3.895 5.267 7.182 9.566 12.834 16.985 23.069 31.278 38.416 49.924 62.692 75.734 91.812 109.806 122.775 131.669 150.697 178.464 END DATA. COMPUTE decade=$CASENUM-1. COMPUTE yr=1790+decade*10. FORMATS decade yr(F8.0). LIST. SET MPRINT=no. *//////////////////////. DEFINE !leave (!POS=!TOKENS(1) /!POS=!TOKENS(1)) !DO !cnt=1 !TO 17 DO IF idx=!cnt. LEAVE !CONCAT(v,!cnt). END IF. !DOEND !ENDDEFINE. *//////////////////////. SET MPRINT=yes. COMPUTE idx=$CASENUM. * Нелинейная регрессия. MODEL PROGRAM A=3.9 B=-0.29 C=200 . COMPUTE pred_ = C/(1+EXP(A+ B * decade)). COMPUTE resid_ = pop - PRED_. * Следующие 3 строчки копируют все значения resid_ в ПОСЛЕДНЮЮ строку файла данных. VECTOR v(18F8.0). COMPUTE v(idx)=resid_. !leave. * Вычисления дисперсии остатков (resid_). COMPUTE sigma2=SD(v1 TO v18)**2. * Сохранение только значения, полученного в ПОСЛЕДНЕЙ строке. IF idx<18 sigma2=0. * sigma2 - и есть текущее значение функции потерь. CNLR pop /OUTFILE='C:\\temp\\SPSSFNLR.TMP' /PRED pred_ /LOSS sigma2 /BOUNDS C >= 150 /CRITERIA ITER 20 STEPLIMIT 2 ISTEP 1E+20 . |
Related pages
...