我想知道是否有人可以帮助我理解为什么当我将脚本输入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,)
Run Code Online (Sandbox Code Playgroud)
以下是示例中提到的莱茵兰地区.csv数据的链接,http://www.filedropper.com/gppanddriversrhinelandcommadelimited
我对R非常陌生,所以我认为popsize意味着重复次数为40,因此我使用了40,我还假设confsetsize意味着可能的模型数量,我认为这是由于6个变量的63?
如果有人可以提供帮助,将不胜感激
感谢您对基本问题的耐心和道歉
理查德
编辑我今天早上尝试运行脚本,它现在崩溃R.
这对我有用.我认为最重要的是不要盲目地包含模型调用中的所有参数.其中大多数都有默认值,因此(如果包装编写者完成了他们的工作)你应该能够保留它们并且不要太担心(当然你应该RTFM并且(尝试)理解它们的含义. ..)
dat <- read.csv("GPPdriversRhineland.csv")
library(glmulti)
Run Code Online (Sandbox Code Playgroud)
我决定用更短的标签重命名预测变量:
prednames <- c("NDVI","solar.rad","avg.temp","precip",
"nutr.avail","water.cap")
names(dat)[1:6] <- prednames
Run Code Online (Sandbox Code Playgroud)
这就是您需要适应主效果的所有组合所需的全部内容:由于您有六个预测变量,因此有64个一级模型(包括空模型).
g1 <- glmulti("GPP",xr=prednames,data=dat,level=1)
Run Code Online (Sandbox Code Playgroud)
对于更大的计算挑战:
g2 <- glmulti("GPP",xr=prednames,data=dat,level=2)
Run Code Online (Sandbox Code Playgroud)
我相信这里有2^(choose(6,2)+6)210万种可能的型号.我没有仔细?glmulti观察它如何停止拟合模型.我刚刚启动它(到目前为止已经评估了66,000个型号),但是它已经找到了一个AIC约为500.5的2级模型,这比1级模型中的最小-AIC为518 要好得多. .
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)
Run Code Online (Sandbox Code Playgroud)
PPS:我在详尽案例中获得更好结果的原因是我有marginality=FALSE,即模型被允许省略模型中包含的交互所涉及的主效应参数.这不一定是明智的.如果我关闭边缘约束,那么遗传算法可以降低到AIC = 499而不会有太多麻烦......
glmulti("GPP",xr=prednames,data=dat,level=2,marginality=TRUE,
method="d")
Run Code Online (Sandbox Code Playgroud)
也很有用:它打印出为给定规范定义的候选模型的数量.