r - 使用 R 中的 glmulti 包对 akaike 权重进行详尽的搜索多元回归

标签 r regression

我想知道是否有人可以帮助我理解为什么当我在 R 中输入脚本时会收到错误消息。为了了解一些背景信息,我正在研究6 个不同变量的效果(我我认为有 63 种组合或模型)(X) 在我的环境科学荣誉项目的不同空间尺度上分别对初级生态系统总产量和净生态系统生产(Y)有影响。我决定使用穷举搜索多元回归分析和 akaikes 信息准则 (AIC) 来尝试找到一组最适合的模型。 (以及分层分区来比较归因于不同 X 变量的方差)我想要获得权重,以便我可以对哪些模型“最符合”标准进行排名,看看是否有一个或一组模型适合其余模型,因此是一个更可能适合数据。

我最近在 Cross Validated 上的 hier.part 包上发布了一个类似的问题,得到了很好的答案,并被告知如果我将来有任何类似的问题,请来这里。

我在 R 中使用的包是 glmulti。 which can be found here

我使用的脚本是这个

require(glmulti)
GPPANDDRIVER<-read.table("C:\\Databases at different scales for R\\River Rhine and Netherlands\\GPP and drivers rhineland (comma delimited).csv",header=T,sep=",")
GPP<-GPPANDDRIVER$GPP
IND_VARS<-subset(GPPANDDRIVER,select=-GPP)
#  glmulti S4 generic 
glmulti(y=GPP, xr=IND_VARS, data, exclude = c(), name = "glmulti.analysis", intercept = TRUE, marginality = FALSE, bunch=30, chunk = 1, chunks = 1,
level = 2, minsize = 0, maxsize = -1, minK = 0, maxK = -1, method = "h", crit = "aic", confsetsize = 63, popsize = 40, mutrate = 10^-3, sexrate = 0.1, imm = 0.3, plotty = TRUE, report = TRUE, deltaM = 0.05, deltaB = 0.05, conseq = 5, fitfunction = "glm", resumefile = "id", includeobjects=TRUE,)

以下是示例中提到的莱茵兰站点的 .csv 数据链接:http://www.filedropper.com/gppanddriversrhinelandcommadelimited

我对 R 非常陌生,所以我假设 popsize 表示重复次数,对于这个比例是 40,所以我使用了 40,我还假设 < em>confsetsize 意味着可能的模型数量,我认为由于有 6 个变量,因此有 63 个?

如果有人能提供帮助,我们将不胜感激

感谢您的耐心等待,并对基本问题表示歉意

理查德

编辑我今天早上刚刚尝试运行脚本,但现在 R 崩溃了。

最佳答案

这对我有用。我认为最主要的是不要盲目地将所有参数都包含在模型调用中。其中大多数都有默认值,因此(如果包编写者已经完成了他们的工作)您应该能够将它们保留原样而不必太担心(尽管当然您应该 RTFM 并且(尝试) 理解他们的意思...)

dat <- read.csv("GPPdriversRhineland.csv")
library(glmulti)

我决定用更短的标签重命名预测变量:

prednames <- c("NDVI","solar.rad","avg.temp","precip",
                "nutr.avail","water.cap")
names(dat)[1:6] <- prednames

这就是拟合所有主效应组合所需的全部内容:由于您有 6 个预测变量,因此有 64 个 1 级模型(包括零模型)。

g1 <- glmulti("GPP",xr=prednames,data=dat,level=1)

对于更大的计算挑战:

g2 <- glmulti("GPP",xr=prednames,data=dat,level=2)

我相信这里有 2^(choose(6,2)+6) = 210 万个可能的模型。我还没有仔细研究 ?glmulti 来告诉它如何停止拟合模型。我刚刚开始使用(到目前为止它已经评估了 66,000 个模型),但它发现了一个 AIC 约为 500.5 的 2 级模型,这比集合中 518 的 min-AIC 好得多。 1 级模型...

PS 我对设置进行了更多尝试,尝试了遗传算法方法而不是详尽的方法(我没有看到明显的方法来告诉 glmulti ”使用详尽的方法,但在 N 次尝试后停止”)。即使遗传算法设置比默认的遗传算法设置稍微宽松一些,它似乎也会卡在 AIC 大约 504 处,高于我首先尝试的(部分)详尽筛选中发现的值。

例如:

g2 <- glmulti("GPP",xr=prednames,data=dat,level=2,marginality=TRUE,
              method="g",conseq=25,popsize=500,mutrate=1e-2)

PPS:我在详尽的案例中获得更好结果的原因是我有 marginality=FALSE,即模型可以忽略主效应参数涉及模型中包含的交互。这不一定是明智的。如果我关闭边际约束,那么遗传算法可以降到 AIC=499 而不会遇到太多麻烦......

glmulti("GPP",xr=prednames,data=dat,level=2,marginality=TRUE,
              method="d")

也很有用:它打印出为给定规范定义的候选模型的数量。

关于r - 使用 R 中的 glmulti 包对 akaike 权重进行详尽的搜索多元回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10182804/

相关文章:

python - Plotly:如何使用plotly和plotlyexpress绘制回归线?

Python Keras cross_val_score 错误

python - 使用星期几、一天中的小时数和媒体类型创建回归模型?

r - 获取特定包中的数据集列表

r - 在 TraMineR 中使用时间日志数据

r - 如何在R中与%<>%(来自magrittr包)相乘?

使用 tidymodels 运行多个回归模型

r - 了解attr(x, "class")和class(x)之间的区别

r - 两个相关系数差异的显着性检验

python - 如何将多项式回归线拟合到数据