2016-06-22 7 views
1

Я пытаюсь создать поверхностный график с оверлейными точками из биномиального GLM с использованием функции scatter3D().GLM-предсказание для поверхностного графика в рассеянии3D() в R

Для этого я использую функцию предсказания() для предсказания z-поверхности для разных значений x и y.

# Data: 

library(plot3D) 

structure(list(
x = c(0.572082281112671, -0.295024245977402, 0.295024245977402, 0.861117839813232, 0.572082281112671, -1.74020183086395, 0.861117839813232, 0.283046782016754, 0.861117839813232, 0.283046782016754, -0.295024245977402, 1.43918883800507, 1.43918883800507, -0.295024245977402, -0.00598874036222696, -0.873095273971558, -0.295024245977402, -0.00598874036222696, -0.00598874036222696, 0.861117839813232), 
y = c(-1.09869265556335, -1.18406093120575, -0.0542464517056942, -0.192688703536987, -0.0208134315907955, 0.194501429796219, -0.126082852482796, 0.861439049243927, 0.624606966972351, -0.227061957120895, -1.32208430767059, -0.553429543972015, 0.538678884506226, 1.53797924518585, 0.230196505784988, 0.2959825694561, 0.158534705638885, 1.33240795135498, 0.0964559689164162, 0.740677952766418), 
z = c(0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), 
w = structure(c(2L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("0", "1"), class = "factor")), .Names = c("x", "y", "z", "w"), row.names = c(NA, 20L), class = "data.frame") 

модели и т.д.

fit <-glm(formula = z ~ x * y + w, family = binomial) 

# x is continuous 
# y is continuous 
# w is dichotomous (yes, no, i.e. 0,1) [but see solution below] 
# z is dichotomous, but kept as numeric for plotting 

grid.lines = 100 
x.pred <- seq(min(x), max(x), length.out = grid.lines) 
y.pred <- seq(min(y), max(y), length.out = grid.lines) 
xy <- expand.grid(x = x.pred, y = y.pred) 

z.pred <- matrix(exp(predict(fit, newdata = xy)), 
      nrow = grid.lines, ncol = grid.lines) 

# fitted points for droplines to surface 
fitpoints <- exp(predict(fit)) 

Однако, я получаю эту ошибку:

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : variable lengths differ (found for 'w') 

W третья переменная, которая имеет важное значение, чтобы сохранить в модели, но я могу» t выяснить, как сохранить его постоянным, сохраняя при этом другие переменные. Я понимаю, что мне нужно что-то подстроить, но не могу точно понять, что это такое.

Обратите внимание, что я увеличиваю значения так, чтобы они представляли собой шкалу, которая имеет смысл между 0 и 1, вероятность, когда я их нарисую. Если это неверно, сообщите мне. [Это было неправильно - указано в комментарии ниже]

Я заканчиваю с этим:

scatter3D(x, y, z, pch = 21, type = "p",col=rgb(red=0, green=17, blue=255, maxColorValue = 255, alpha = 150), bg = "#FF0000", 
     ylab = "Z-AM-Testosterone", xlab = "Z-AR-CAGn", zlab = "Divorce", 
     theta = -70, phi = 20, ticktype = "detailed", 
     surf = list(x = x.pred, y = y.pred, z = z.pred, 
        fit = fitpoints)) 

Я уверен, что это просто, но если кто-то может объяснить, как удалить ш с предсказанием или держать его постоянный, поэтому я могу идти вперед, я был бы очень обязан. Пожалуйста, не предлагайте другой метод построения 3D-изображений - scatter3D лучше, чем visreg или другой для моих целей.

Заранее за вашу помощь.

+0

Можешь ли вы включать данные, которые обеспечат нам [воспроизводимый примером] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? –

+1

Что делать, если вы просто выполняете 'xy $ w <- ' (где «типичный» означает среднее, медианное или какое-либо другое разумное базовое значение), прежде чем пытаться предсказать? –

+0

Извинения, давно lurker новый плакат. Приведенные примеры данных, надеюсь, по мере необходимости (мой фактический набор данных N = 675). – CPR

ответ

1

Спасибо за простое решение, @Ben Bolker.

Я взял среднее значение числового эквивалента да/нет, 0-1 переменных и просто нанесены предсказания с, что:

xy <- expand.grid(x = x.pred, y = y.pred, w = mean(w)) 

Это позволило мне произвести приличный выглядящий график, который имеет смысл, учитывая данные, показанные ниже.

Scatter3D для отрицательной биномиальной модели со средним третьим дихотомическим ковариатом (ш), после преобразования ж в цифровой:

3D plot of interaction

 Смежные вопросы

  • Нет связанных вопросов^_^