6

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

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

我用于 R 的包是 glmulti。可以在这里找到

我正在使用的脚本是这个

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,我还假设confsetsize表示可能的模型数,由于 6 个变量,我认为是 63?

如果有人可以提供帮助,将不胜感激

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

理查德

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

4

1 回答 1

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 个 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-level 模型,这比 1-level 模型集中的 518 的 min-AIC好得多.. .

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

例如:

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

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

于 2012-04-17T14:30:30.367 回答