Как изменить точки и добавить регрессию к облачному графику (используя R)? - PullRequest
14 голосов
/ 21 июля 2011

Чтобы пояснить, о чем я спрашиваю, я создал простой пример. Первый шаг - создать данные:

gender <- factor(rep(c(1, 2), c(43, 41)), levels = c(1, 2),labels = c("male", "female"))
numberofdrugs <- rpois(84, 50) + 1
geneticvalue <- rpois(84,75)
death <- rpois(42,50) + 15
y <- data.frame(death, numberofdrugs, geneticvalue, gender)

Итак, это некоторые случайные даты, объединенные в одну data.frame. Поэтому из этих дат я хотел бы построить облако, в котором я могу различаться между мужчинами и женщинами и где я добавляю две простые регрессии (одну для женщин и одну для мужчин). Итак, я начал, но я не смог добраться до той точки, где я хочу быть. Пожалуйста, посмотрите ниже, что я сделал до сих пор:

require(lattice)
cloud(y$death~y$numberofdrugs*geneticvalue)

cloud plot in basic form

xmale <- subset(y, gender=="male")
xfemale <- subset(y, gender=="female")

death.lm.male <- lm(death~numberofdrugs+geneticvalue, data=xmale)
death.lm.female <- lm(death~numberofdrugs+geneticvalue, data=xfemale)

Как я могу сделать разные точки для мужчин или женщин при использовании команды облака (например, синие и розовые точки вместо просто синих крестиков) и как я могу добавить две оценочные модели в график облака?

Любая мысль ценится! Спасибо за ваши идеи!

Ответы [ 2 ]

18 голосов
/ 21 июля 2011

Ответьте на первую половину вашего вопроса: «Как я могу сделать разные точки для мужчин или женщин при использовании команды облачных вычислений (например, синие и розовые точки, состоящие только из синих крестиков)?»

 cloud( death ~ numberofdrugs*geneticvalue , groups=gender, data=y )

grouped cloud plot

Мета-ответ на это может включать некоторую не-3d визуализацию. Возможно, вы можете использовать решетку или ggplot2, чтобы разделить данные на несколько кратных? Это, вероятно, будет более понятным и, вероятно, будет проще добавлять результаты регрессии.

splom( ~ data.frame( death, numberofdrugs, geneticvalue ), groups=gender, data=y )

splom

Функция сплом-панели по умолчанию - panel.pairs, и вы, вероятно, можете изменить ее, добавив линию регрессии без особых проблем.

ggplot2 легко выполняет регрессию в матрице графика, но я не могу заставить цвета работать.

pm <- plotmatrix( y[ , 1:3], mapping = aes(color=death) )
pm + geom_smooth(method="lm")

plotmatrix

И, наконец, если вы действительно хотите создать облачный график с плоскостью регрессии, вот способ сделать это с помощью пакета scatterplot3d. Обратите внимание, что я изменил данные, чтобы иметь немного более интересную структуру:

numberofdrugs <- rpois( 84, 50 ) + 1
geneticvalue <- numberofdrugs + rpois( 84, 75 )
death <- geneticvalue + rpois( 42, 50 ) + 15
y <- data.frame( death, numberofdrugs, geneticvalue, gender )

library(scatterplot3d) 
pts <- as.numeric( as.factor(y$gender) ) + 4
s <-scatterplot3d( y$death, y$numberofdrugs, y$geneticvalue, pch=pts, type="p", highlight.3d=TRUE )
fit <- lm( y$death ~ y$numberofdrugs + y$geneticvalue )
s$plane3d(fit)

scatterplot3d with regression plane

17 голосов
/ 25 июля 2011

В пакете для машины имеется хорошая визуализация, использующая пакет rgl (реализация openGL) :

require(car)
require(rgl)
scatter3d(death~numberofdrugs+geneticvalue, groups=y$gender, data=y, parallel=FALSE)

3d fit with car package

...