使用R中的glmulti软件包进行akaike权重的穷举搜索多元回归

时间:2012-04-16 22:50:32

标签: 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个变量而产生的?

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

感谢您对基本问题的耐心和道歉

理查德

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

1 个答案:

答案 0 :(得分:8)

这对我有用。我认为最重要的是不要盲目地包含模型调用中的所有参数。其中大多数都有默认值,因此(如果包编写者已经完成了他们的工作)你应该能够保留它们并且不要太担心(当然你应该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

这就是你需要适应主效果的所有组合:由于你有六个预测因子,有64个一级模型(包括空模型)。

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个型号),但是它已经找到了一个2级模型,AIC大约为500.5,这比其中的min-AIC 518更好很多 1级模型...

PS 我更多地尝试了设置,尝试了遗传算法而不是详尽的方法(我没有看到一种明显的方式告诉glmulti“使用详尽的接近,但在N尝试后停止“)。即使使用稍微更宽松的默认遗传算法设置,它似乎也会被困在AIC约504,高于我首先尝试的(部分)详尽筛选中发现的值。

e.g:

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")

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