绘制glm交互:predict()函数中的“newdata =”结构

时间:2014-05-23 10:17:30

标签: r prediction glm interaction predict

我的问题在于predict()函数,其结构和绘制预测。

使用来自我的模型的预测,我想想象我的重要因素(及其相互作用)如何影响我的响应变量的概率。

我的模特:

m1  <-glm ( mating ~  behv * pop + 
                      I(behv^2) * pop + condition, 
                      data=data1, family=binomial(logit)) 

交配:个体是否交配(因子,二项式:0,1)

pop :人口(因素,4级)

behv :行为(数字,缩放和居中)

条件:相对脂肪含量(数字,缩放和居中)

运行glm后的显着效果:

pop1

条件

behv * pop2

behv ^ 2 * pop1

虽然我已阅读过帮助页面,以前对类似问题,教程等的回答,但我无法弄清楚如何构建newdata=函数中的predict()部分。我想要想象的效果(如上所示)可能会给出我想要的线索:例如,对于“ behv * pop2 ”交互,我想得到一个图表,显示行为如何来自人口-2的个体可以影响他们是否交配(概率从0到1)。

1 个答案:

答案 0 :(得分:3)

predict唯一期望的是newdata中列的名称与公式中使用的列名完全匹配。并且您必须拥有每个预测变量的值。这是一些示例数据。

#sample data
set.seed(16)
data <- data.frame(
    mating=sample(0:1, 200, replace=T),
    pop=sample(letters[1:4], 200, replace=T),
    behv = scale(rpois(200,10)),
    condition = scale(rnorm(200,5))
)

data1<-data[1:150,]     #for model fitting
data2<-data[51:200,-1]  #for predicting

然后,这将使用data1拟合模型并预测到data2

model<-glm ( mating ~  behv * pop + 
    I(behv^2) * pop + condition, 
    data=data1, 
    family=binomial(logit)) 

predict(model, newdata=data2, type="response")

使用type="response"将为您提供预测的概率。

现在要进行预测,您不必使用完全相同data.frame的子集。您可以创建一个新的值来调查特定范围的值(只需确保列名称匹配。因此,为了探索behv*pop2(或我的示例数据中的behv*popb),我可能会创建一个像这样的data.frame

popbbehv<-data.frame(
    pop="b",
    behv=seq(from=min(data$behv), to=max(data$behv), length.out=100),
    condition = mean(data$condition)
)

我在这里修复了pop="b"所以我只看pop,因为我必须提供condition,所以我修复了原来的behv数据。 (由于数据居中和缩放,我可能只需输入0。)现在我指定一系列感兴趣的predict值。这里我只取了原始数据的范围并将其拆分进入100个地区。这将给我足够的积分。所以我再次使用popbbehvpred<-predict(model, newdata=popbbehv, type="response") 来获取

plot(popbbehvpred~behv, popbbehv, type="l")

然后我可以用

绘制
{{1}}

results plot

虽然我的假数据没有什么重要意义,但我们可以看到较高的行为值似乎导致人口B的交配减少。