gpt4 book ai didi

r - 遍历属性向量以生成组合图

转载 作者:行者123 更新时间:2023-12-04 10:08:50 25 4
gpt4 key购买 nike

以下代码尝试计算模型中每个预测变量的边际效应(使用 effects 包),然后绘制结果。为此,我遍历了 glm terms 对象的 "term.labels" 属性)。

library(DAAG)
library(effects)

formula = pres.abs ~ altitude + distance + NoOfPools + NoOfSites + avrain + meanmin + meanmax
summary(logitFrogs <- glm(formula = formula, data = frogs, family = binomial(link = "logit")))


par(mfrow = c(4, 2))
for (predictorName in attr(logitFrogs$terms, "term.labels")) {
print(predictorName)
effLogitFrogs <- effect(predictorName, logitFrogs)
plot(effLogitFrogs)
}

这根本不会产生任何图片。另一方面,明确说明预测变量名称确实有效:

effLogitFrogs <- effect("distance", logitFrogs)
plot(effLogitFrogs)

我做错了什么?

最佳答案

虽然你调用了函数plot(),但实际上它调用的是函数plot.eff(),它是点阵图,所以par() 参数被忽略。一种解决方案是使用函数 allEffects(),然后使用 plot()。这将调用函数 plot.efflist()。使用此功能,您不需要 for 循环,因为所有绘图都是自动生成的。

effLogitFrogs <- allEffects(predictorName, logitFrogs)
plot(effLogitFrogs)

编辑 - 使用 for 循环的解决方案

for() 循环有一个“丑陋”的解决方案。为此,我们还需要打包 grid。首先,将行数和列数设为变量(现在它仅适用于 1 或 2 列)。然后grid.newpage()pushViewport()设置图形窗口。

预测变量名称存储在循环外的向量中。使用函数 pushViewport()popViewport() 将所有绘图放在同一个图形窗口中。

  library(lattice)
library(grid)

n.col=2
n.row= 4
grid.newpage()
pushViewport(viewport(layout = grid.layout(n.row,n.col)))

predictorName <- attr(logitFrogs$terms, "term.labels")

for (i in 1:length(predictorName)) {
print(predictorName[i])
effLogitFrogs <- effect(predictorName[i], logitFrogs)
pushViewport(viewport(layout.pos.col=ceiling(i/n.row), layout.pos.row=ifelse(i-n.row<=0,i,i-n.row)))
p<-plot(effLogitFrogs)
print(p,newpage=FALSE)
popViewport(1)
}

关于r - 遍历属性向量以生成组合图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13816033/

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