Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Статистика в SPSS: за пределами кнопочного интерфейса. Выпуск 21


В рассылке используются материалы веб-сайта www.spsstools.ru

Содержание выпуска

Графики функций в SPSS (часть 2)

Новое на сайте www.spsstools.ru


Здравствуйте, уважаемые подписчики!

 

Графики функций в SPSS (часть 2)

Продолжим исследование вопроса построения пользовательских функций в SPSS. За нами - обзор ещё двух пунктов, анонсированных в прошлом выпуске. П. 3 - построение графика функции двух переменных (псевдотрёхмерные диаграммы) и п. 4 - построение графиков функций, заданных в полярных координатах.

 

3. Графики функций двух переменных

При построении графиков функции на плоскости в SPSS мы пользовались таким инструментом, как диаграмма разброса (Scatterplot). Существует возможность расширения этих диаграмм третьей координатой, в результате чего можно строить как бы трёхмерные графики. Выскажу личное мнение, что практическая полезность таких графиков для анализа взаимосвязей переменных весьма ограничена, поскольку в "трёхмерном" облаке точек на экране какие-либо закономерности увидеть гораздо сложнее, чем на двумерной диаграмме. Тем не менее, такие графики иногда оказываются полезными, например, для идентификации нехарактерных наблюдений, выбросов, которые не обнаруживаются при анализе одномерных и двумерных распределений. Иногда на 3D-графиках можно увидеть перспективность проведения кластерного анализа, если облако точек обнаруживает видимую неоднородность, либо проделать обратное - отобразить точками разных цветов разные кластеры или результаты иной группировки. А кроме того, такие графики, как правило, выходят весьма "нарядными", что очень нравится студентам. Поэтому я иногда включаю 3D-диаграммы в занятия даже если в этом нет острой необходимости.

Но в нашем-то случае на этих диаграммах мы увидим как раз то, что нам нужно, причём в лучшем виде. Ведь наши данные будут подчиняться строгим функциональным законам, а значит, никаких случайных вариаций, маскирующих закономерности, картинки содержать не будут.

С помощью знакомого по прошлому выпуску рассылки кода, создадим на плоскости (x, y) сетку значений 41 на 41 с шагом 0.1 на квадрате с вершинами (-2, -2), (-2, 2), (2, 2), (2, -2). Командой GRAPH на вывод двумерной (BIVARIATE) диаграммы разброса покажем то, что мы сделали. Помним, что, как и все статистические и графические процедуры, данная команда вызывает проход по данным, а значит команду EXECUTE после END INPUT PROGRAM можно не вставлять.

INPUT PROGRAM.

LOOP #i=1 to 41.

- COMPUTE x = -2.1 + #i/10.

- LOOP #j=0 to 40.

- LEAVE x.

- COMPUTE y = -2 + #j/10.

- END CASE.

- END LOOP.

END LOOP.

END FILE.

END INPUT PROGRAM.

 

GRAPH /SCATTERPLOT(BIVARIATE)= x WITH y.

Теперь над плоскостью этих двух переменных будем вычислять значение третьей, являющейся функцией первых двух. Как и в прошлом выпуске я предлагаю вам подборку "красивых" функций, заимствованных из учебника Пискунов Н.С. Дифференциальное и интегральное исчисления для втузов. М.: Наука, 1978. Каждая переменная со значением функции снабжается меткой (VARIABLE LABEL), чтобы формула выводилась затем на графике.

COMPUTE z1=x**2*sin(y)**2.

VARIABLE LABEL z1 'z = x**2*sin(y)**2'.

 

COMPUTE z2=x**(y**2).

VARIABLE LABEL z2 'z = x**(y**2)'.

 

COMPUTE z3=artan(x*y).

VARIABLE LABEL z3 'z = artan(x*y)'.

 

COMPUTE z4=artan(y/x).

VARIABLE LABEL z4 'z = artan(y/x)'.

 

COMPUTE z5=ln((sqrt(x**2+y**2)-x)/(sqrt(x**2+y**2)+x)).

VARIABLE LABEL z5 'z = ln((sqrt(x**2+y**2)-x)/(sqrt(x**2+y**2)+x))'.

 

COMPUTE z6=arsin(x+y).

VARIABLE LABEL z6 'z = arsin(x+y)'.

 

COMPUTE z7=artan(sqrt((x**2-y**2)/(x**2+y**2))).

VARIABLE LABEL z7 'z = artan(sqrt((x**2-y**2)/(x**2+y**2)))'.

 

COMPUTE z8=x**2+x*y**2+sin(y).

VARIABLE LABEL z8 'z = x**2+x*y**2+sin(y)'.

 

COMPUTE z9=ln(x*y).

VARIABLE LABEL z9 'z = ln(x*y)'.

 

COMPUTE z10=exp(x**2+y**2).

VARIABLE LABEL z10 'z = exp(x**2+y**2)'.

 

COMPUTE z11=arsin(x/y).

VARIABLE LABEL z12 'z = arsin(x/y)'.

 

COMPUTE z13=sqrt(x**2+y**2).

VARIABLE LABEL z13 'z = sqrt(x**2+y**2)'.

 

COMPUTE z14=sin(x)*cos(y).

VARIABLE LABEL z14 'z = sin(x)*cos(y)'.

 

COMPUTE z15=x*sin(y).

VARIABLE LABEL z15 'z = x*sin(y)'.

 

COMPUTE z16=ln(1-x**4).

VARIABLE LABEL z16 'z = ln(1-x**4)'.

 

COMPUTE z17=exp(x)*ln(y)+sin(y)*ln(x).

VARIABLE LABEL z17 'z = exp(x)*ln(y)+sin(y)*ln(x)'.

 

COMPUTE z18=((x**2)*(y**2))/(x+y).

VARIABLE LABEL z18 'z = ((x**2)*(y**2))/(x+y)'.

 

COMPUTE z19=sqrt(x**2-y**2).

VARIABLE LABEL z19 'z = x**2-y**2'.

 

COMPUTE z20=x**2+y**2.

VARIABLE LABEL z20 'z = x**2+y**2'.

EXECUTE.

К последней команде EXECUTE в SPSS будут инициализированы 20 новых переменных, z1-z20 с описательными метками. Однако рассчитанные значения переменных появятся лишь после выполнения EXECUTE. Окно результатов (Output) будет содержать значительное число предупреждений, связанных с тем, что ряд функций не определены на всём квадрате значений аргументов, который мы задали.

Для построения трёхмерных графиков мы можем использовать команду GRAPH (Graphs - Scatter - 3D). Обратите внимание, что задание параметров через диалоговое меню приводит к расположению оси с именем y по вертикали:

GRAPH /SCATTERPLOT(XYZ)=x WITH y WITH z1.

Если более привычным является расположение по вертикали оси z, достаточно просто изменить порядок ввода переменных в команде:

GRAPH /SCATTERPLOT(XYZ)=x WITH z1 WITH y.

Ключевое слово, обозначающее трёхмерную диаграмму в подкоманде SCATTERPLOT - XYZ. Вывод графиков с разными именами переменных вы можете повторить несколько раз, чтобы увидеть графики всех предложенных выше функций.

Понимание изображённого на 3D-графике зачастую требует его вращения. Для графиков, построенных командой GRAPH в версии SPSS 13.0 вращение возможно в режиме редактирования графика. Нужно дважды щёлкнуть мышью на график, чтобы войти в режим редактирования. Далее в открывшемся окне выбираем меню Edit - Properties и там - вкладку 3D-rotaion. Бегунками можно изменять расположение графика, приближать и удалять диаграмму, т.е. рассмотреть получившийся график со всех сторон.

Однако, более удобный инструмент вращения предлагает трёхмерная диаграмма разброса в разделе интерактивных графиков (Graphs - Interactive - Scatterplot). Далее будем пользоваться командой IGRAPH:

IGRAPH /X1 = VAR(x) /Y = VAR(z1) /X2 = VAR(y) /COORDINATE = THREE
/X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0 /SCATTER.

Вращение также производится в режиме редактирования графика. Через меню View - 3D-Palette требуется вызвать панель инструментов "3D". На панели выбрать в качестве курсора иконку руки со стрелкой. Теперь можно, "подцепив" график кнопкой мыши, вращать его каким угодно образом просто перемещая манипулятор. Если отпустить кнопку мыши в момент вращения графика, тот продолжит самостоятельное вращение вокруг заданных осей. Как всегда, для выхода из режима редактирования достаточно ткнуть мышью в "молоко" - пустое пространство в окне результатов вне окна графика.

Выше была приведена минимальная спецификация IGRAPH для нашей задачи. Если вы вставите синтаксис этой команды через диалоговое окно посредством кнопки Paste, вы увидите расширенный вариант написания (а в "Command Syntax Reference" можно получить наиболее полное описание IGRAPH). Здесь подкоманды X1, X2 и Y задают переменные, значения которых откладываются по соответствующим осям, X1LENGTH, X2LENGTH и YLENGTH - длины соответствующих осей в дюймах, а подкоманда SCATTER указывает на конкретный тип запрошенного графика. Подкоманда COORDINATE содержит ключевое слово THREE, что означает запрос трёхмерного графика. Без этой подкоманды график всё равно будет трёхмерным, но отобразится его проекция на плоскость одной пары переменных. Путём ручного редактирования графика вы сможете выбрать трёхмерный вариант отображения. Остальные параметры в команде заданы по умолчанию. Обратите внимание, что здесь переменную z нам нужно отображать на оси y. Традиционной оси с именем z в команде вообще не существует. Зато существуют оси X1 и X2.

Дабы сделать сегодняшний выпуск чуть более познавательным, в качестве ещё одного примера построим график совместной плотности распределения для двумерной нормально распределённой случайной величины. Классический пример такой случайной величины - попадание дротика для дартса в мишень, фиксируемое двумя координатами на плоскости (x, y). Плотность распределения над этой плоскостью может быть использована для вычисления вероятности попадания дротика в некоторый регион R на плоскости. Нормальный закон распределения на плоскости задаётся пятью параметрами: матожиданиями x и y (mx, my), стандартами x и y (sx, sy) и параметром r, интерпретируемым как коэффициент корреляции между случайными величинами. Пользуясь сеткой, сформированной в предыдущем примере, вычислим значения плотности. Для удобства создадим константы mx, my, sx, sy, r как отдельные переменные.

COMPUTE mx=0.5.

COMPUTE my=1.

COMPUTE sx = 1.4.

COMPUTE sy = 0.3.

COMPUTE r = 0.3.

COMPUTE fxy = (1/(2*3.14*sx*sy*sqrt(1-r**2))) * EXP((-1/2*(1-r**2))*(((x-mx)/sx)**2-2*r*((x-mx)/sx)*((y-my)/sy)+((y-my)/sy)**2)).

EXECUTE.

IGRAPH /X1 = VAR(x) /Y = VAR(fxy) /X2 = VAR(y) /COORDINATE = THREE
/X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0 /SCATTER.

Положив r=0, из приведённой выше формулы можно получить доказательство того, что для нормально распределённых случайных величин из некоррелированности следует независимость. См., например, Гмурман В.Е. Введение в теорию вероятностей и математическую статистику. М.: Высшая школа, 1963, с. 161-162, Mood, A.M. et al. Introduction to the Theory of Statistics, 3rd ed., McGraw-Hill, 1963, c. 166. Это даёт возможность построения плотности распределения вероятности для некоррелированных случайных величин с использованием встроенных одномерных функций плотности нормального распределения PDF.NORMAL (как произведение этих плотностей):

COMPUTE fxyr0 = PDF.NORMAL(x,mx,sx)*PDF.NORMAL(y,my,sy).

IGRAPH /X1 = VAR(x) /Y = VAR(fxyr0) /X2 = VAR(y) /COORDINATE = THREE
/X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0 /SCATTER.

 

Дополнение: функция трёх аргументов. Интерактивные графики дают возможность изобразить график функции трёх переменных, если значения третьей переменной отображать цветовыми градациями. Для этого в команду IGRAPH вводится дополнительная подкоманда /COLOR = VAR(z), где z - имя той переменной, которая будет отображаться градациями цвета. По умолчанию, малые значения переменной z отображаются красным цветом, который, с возрастанием значений z, постепенно переходит в синий.

Для построения такого графика нам потребуется иная сетка, которая будет иметь более крупный шаг (иначе построение графика будет слишком ресурсоёмкой задачей). В нашем случае мы генерируем сетку с шагом 0.2 для куба со стороной 4, что для трёх переменных будет означать 21 * 21 * 21 = 9261 точек. При значительных задержках в построении такого графика, сетку можно проредить ещё больше.

Далее мы вычисляем для примера три разных функции u(x, y, z) и строим график.

INPUT PROGRAM.

LOOP #i=1 to 21.

- COMPUTE x = -2.1+#i/5.

- LOOP #j=0 to 20.

- LEAVE x.

- COMPUTE y = -2+#j/5.

- LOOP #k=0 to 20.

- LEAVE x y.

- COMPUTE z=-2+#k/5.

- END CASE.

- END LOOP.

- END LOOP.

END LOOP.

END FILE.

END INPUT PROGRAM.

COMPUTE u1=sqrt(x**2+y**2+z**2).

COMPUTE u2 = sin(3*x-y)/cos(3*x-y)+6**(y+z).

COMPUTE u3 = 1/sqrt(x**2+y**2+z**2).

IGRAPH /X1 = VAR(x) /Y = VAR(u1) /X2 = VAR(y) /COLOR = VAR(z)
/COORDINATE = THREE /X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0 /SCATTER.

 

4. Графики функций, задаваемых в полярных координатах

Если рассматривать функции одного аргумента, при полярном способе задания положение точки на плоскости определяется следующими координатами: длиной отрезка на оси, выходящей из начала координат (полюса), это координата rho, и углом, на который данная ось повёрнута относительно нулевого угла (phi), при этом положительным направлением вращения считается вращение против часовой стрелки. Примером такой функции является так называемая "спираль Архимеда":
rho = a*phi, где a - некоторая константа.
С увеличением угла график начинает раскручиваться относительно начала координат тем стремительнее, чем больше константа a. Такой способ задания функций позволяет строить весьма оригинальные графики, однако ситуация осложняется тем, что SPSS не предлагает графиков, работающих в полярных координатах. К счастью, связь между полярными и прямоугольными координатами достаточно проста. Если известен угол phi и вычислено значение функции rho, можно установить соответствие всем точкам (rho, phi) на плоскости (x, y):
x = rho * cos(phi),
y = rho * sin(phi).

Результат, как вы понимаете, можно отобразить на уже знакомых нам диаграммах разброса.

Создадим 126 значений аргумента phi (угол поворота): "два пи" отрицательного вращения и "два пи" положительного с шагом 0.1 рад.

INPUT PROGRAM.

LOOP #i=0 to 125.

- COMPUTE phi = -2*3.14 + #i/10.

- END CASE.

END LOOP.

END FILE.

END INPUT PROGRAM.

Теперь считаем значения функций и строим графики.

* Спираль Архимеда.

COMPUTE rho = 1*phi.

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

Спираль больше будет похожа на спираль, если выбрать, скажем, только положительное направление поворота. Обратите внимание на техническую реализацию. Чтобы не создавать фильтрующую переменную, можно воспользоваться командой SELECT IF. Однако, вариант простого отбора наблюдений по команде SELECT IF нас не вполне устраивает, так как совсем терять половину наблюдений не хочется. В таких случаях выручает TEMPORARY, после которой все команды преобразований имеют силу лишь для первого прохода по данным (в данном случае, командой GRAPH), а затем всё возвращается в прежнее состояние - у нас снова есть прежний файл данных, как будто мы ничего и не отбирали.

TEMPORARY.

SELECT IF (phi>0).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

 

* Единичная окружность.

COMPUTE rho = 1.

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

Очевидно, что этот и многие графики, которые мы строили ранее, слегка искажён вследствие неравного масштаба у горизонтальной и вертикальной осей графиков по умолчанию. Окружность, которую мы ожидали увидеть, на поверку оказалась овалом. Придётся вручную растягивать график до совпадения масштабов. Команда IGRAPH справляется с заданием рисования круга лучше:

IGRAPH /X1 = VAR(x) /Y = VAR(y) /X1LENGTH=3.0 /YLENGTH=3.0 /SCATTER.

Рассмотрим ещё несколько функций (из упомянутого выше учебника Пискунова Н.С.), сами названия которых окончательно убедили меня подготовить данный выпуск рассылки :)

 

* Гиперболическая спираль.

COMPUTE rho = 1/phi.

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

Чтобы увидеть форму спирали на графике, полезно убрать слишком малые углы phi, так как для малых углов rho слишком велик, и график приобретает неудобный масштаб.

TEMPORARY.

SELECT IF (phi>0.2).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

 

* Логарифмическая спираль.

COMPUTE rho = 2**phi.

 

COMPUTE x= rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

 

*Лемниската.

COMPUTE rho = 2*sqrt(cos(2*phi)).

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

 

*Кардиоида.

COMPUTE rho = 3*(1-cos(phi)).

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

А вот ещё одна функция. Она "безымянная", но многие читатели, использующие Adobe Acrobat непременно увидят в ней что-то знакомое ;-)

COMPUTE rho = 3*sin(3*phi).

 

COMPUTE x = rho*cos(phi).

COMPUTE y = rho*sin(phi).

GRAPH /SCATTERPLOT(BIVAR) = x WITH y.

 

В заключение рассмотрим наиболее простой пример совмещения рассмотренных выше п. 3 и 4: нарисуем сферу. Для этого нам потребуется не один угол phi, а два, т.к. вращение полярной оси будет производиться в двух плоскостях. Создадим решётку из значений двух углов phi и phi2, каждый из которых пробегает значения от 0 до "двух пи".

INPUT PROGRAM.

LOOP #i=0 to 63.

- COMPUTE phi = #i/10.

- LOOP #j=0 to 63.

- LEAVE phi.

- COMPUTE phi2 = #j/10.

- END CASE.

- END LOOP.

END LOOP.

END FILE.

END INPUT PROGRAM.

EXECUTE.

Зададим радиусы двух сфер. Сначала все точки будут принадлежать сфере с радиусом 1. Затем мы сгенерируем группирующую переменную из распределения Бернулли таким образом, чтобы соотношение численности 0-й и 1-й группы составляло 1 к 4. Это связано с тем, что для сферы с номером 0 мы задаём больший радиус и для её рисования полезно выделить большее число точек. Меньшая сфера будет иметь радиус 0.5.

COMPUTE rho=1.

COMPUTE grp = rv.bernoulli(0.2).

IF (grp=1) rho=0.5.

Теперь преобразовываем полярные координаты в прямоугольные:

COMPUTE x1 = rho*sin(phi).

COMPUTE x2 = rho*cos(phi)*cos(phi2).

COMPUTE x3=rho*cos(phi)*sin(phi2).

Сферы готовы, однако, чтобы более чётко увидеть сферу меньшего диаметра, "раскроем" сферу большего диаметра, убрав точки, относящиеся к первой половине 0-й сферы. Рассчитаем фильтрующую переменную (функция RANGE будет истинна, если phi будет находиться на отрезке от нуля до "пи". Всё выражение будет истинно, если phi не будет попадать в этот отрезок и при этом точка будет принадлежать внешней сфере (используется значок "~", означающий отрицание). Затем применяем фильтр. Фильтр применяется сразу и все наблюдения исключаются из анализа. Однако, когда со следующей командой IGRAPH произойдёт фактическое вычисление всех переменных, фильтр применится заново и команда отобразит нам внешнюю полусферу и вложенную в неё сферу меньшего диаметра. Сферы отображаются точками разных цветов, т.к. переменная grp была введена в подкоманду COLOR. Поскольку график получается несимметричным, чтобы сферы не превращались в яйца, жёстко укажем масштаб переменных подкомандами "X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0 /SCALERANGE = VAR(x1) MIN= -1 MAX=1 /SCALERANGE = VAR(x2) MIN=-1 MAX=1 /SCALERANGE = VAR(x3) MIN=-1 MAX=1". Последняя команда USE ALL снимает действующий фильтр.

COMPUTE filt = (~(RANGE(phi,0,3.14) & grp=0)).

FILTER BY filt.

IGRAPH /VIEWNAME='Scatterplot' /X1 = VAR(x1) TYPE = SCALE /Y = VAR(x3)
TYPE = SCALE /X2 = VAR(x2) TYPE = SCALE /COLOR = VAR(grp)
/COORDINATE = THREE /X1LENGTH=3.0 /YLENGTH=3.0 /X2LENGTH=3.0
/SCALERANGE = VAR(x1) MIN= -1 MAX=1 /SCALERANGE = VAR(x2) MIN=-1 MAX=1
/SCALERANGE = VAR(x3) MIN=-1 MAX=1 /SCATTER.

USE ALL.

 

На сегодня это всё.

Всего доброго!

 

Ведущий рассылки,

Балабанов Антон

Новое на сайте www.spsstools.ru

Переведены и добавлены примеры синтаксиса:

Возрастные пирамиды.SPS

 

© См. www.spsstools.ru, 2005-2006


В избранное