gpt4 book ai didi

r - 绘制 glm 交互 : "newdata=" structure in predict() function

转载 作者:行者123 更新时间:2023-12-01 23:55:52 26 4
gpt4 key购买 nike

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

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

我的模型:

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

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

最佳答案

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 作为好吧,我将其固定为原始数据的平均值。 (我可以只输入 0,因为数据是居中和缩放的。)现在我指定了我感兴趣的 behv 值范围。这里我只是获取原始数据的范围并拆分它分为 100 个区域。这将给我足够的分数来绘制。所以我再次使用 predict 来获取

popbbehvpred<-predict(model, newdata=popbbehv, type="response")

然后我可以用

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

results plot

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

关于r - 绘制 glm 交互 : "newdata=" structure in predict() function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23826621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com