Как изменить точки и добавить регрессию к облачному плану (используя R)?

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

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)

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

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

Ответы

Ответ 1

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

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

grouped cloud plot

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

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

splom

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

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

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

plotmatrix

И, наконец, если вы действительно хотите сделать cloudplot с плоскостью регрессии, вот способ сделать это, используя пакет 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