R 在挖泥船内使用粘贴创建逻辑语句
我试图使用包含二次项的模型的疏通。我知道你必须使用子集选项。我已经定义了二次项R 在挖泥船内使用粘贴创建逻辑语句,r,R,我试图使用包含二次项的模型的疏通。我知道你必须使用子集选项。我已经定义了二次项 quadraticTerms = c("lux.mean", "temp.mean") cand.set <- dredge(model, subset=as.logical(paste("(!",quadraticTerms, "^2|", quadraticTerms,collapse=' & ', ')', sep="")), extra="R^2", REML= FALSE, m.max=10)
quadraticTerms = c("lux.mean", "temp.mean")
cand.set <- dredge(model, subset=as.logical(paste("(!",quadraticTerms, "^2|", quadraticTerms,collapse=' & ', ')', sep="")), extra="R^2", REML= FALSE, m.max=10)
我在粘贴中创建了一个术语,但它不起作用。当你在没有粘贴的情况下把它全部打印出来时,挖泥船就可以工作了,就像这样
cand.set <- dredge(model, subset=(!lux.mean^2|lux.mean) & (!temp.mean^2|temp.mean), extra="R^2", REML= FALSE, m.max=10)
如果有人能帮我接第二条电话,我将不胜感激。谢谢您可能需要
subs <- paste0("(!",quadraticTerms, "^2|", quadraticTerms,collapse=' & ', ')')
model.string <-
sprintf("dredge(model, subset=as.logical(%s), extra='R^2', REML=FALSE, m.max=10)",
subs)
cands <- eval(parse(model.string))
通常是推卸责任。。。这是最后的手段——它会很脆弱——但我现在想不出更好的办法。查看?Druge的子集部分,似乎最好通过矩阵来实现这一点。如果他们允许subset=参数的矩阵语法与表达式语法一样灵活,那就好了,但事实似乎并非如此。通常情况下,有友好的标准评估替代方案来替代像这样的偷偷摸摸的非标准评估参数,但出于某种原因,包作者决定不包括这样的解决方法 尽管如此,还是有一个公式语法替代方案。您可以使用
subsetform <- as.formula(paste0("~(!",quadraticTerms, "^2|", quadraticTerms,
collapse=' & ', ')'));
dredge(model, subset=subsetform, extra='R^2', REML=FALSE, m.max=10)
它应该做与表达式相同的事情。我试过了
library(MuMIn)
data(Cement)
fm1 <- lm(y ~ ., data = Cement)
dredge(fm1, subset=(!X1|X2) & (!X3|X4))
# same as...
subsetform <- as.formula("~(!X1|X2) & (!X3|X4)")
dredge(fm1, subset=subsetform)
首先,我相信你的二次项类似于Ix^2,而不是x^2。其次,使用dc来实现这一点可能更简单 例如。假设模型为:
fm <- lm(y ~ X1 + I(X1^2) + X2 + I(X2^2), Cement)
v <- c("X1", "X2")
或者,更长,但没有解析:
ssexpr是用于挖泥船的子集表达式。挖泥船函数从何而来?ie,什么软件包?@MrFlick-我认为它来自MuMln。至少FindFnReturnEdit是MuMIn@MrFlick的一个函数
ssexpr <- parse(text = paste(sprintf("dc(%1$s, `I(%1$s^2)`)", v), collapse = " && "))
vquadr <- sprintf("I(%s^2)", v)
for(i in seq_along(v)) {
x <- call("dc", as.name(v[i]), as.name(vquadr[i]))
ssexpr <- if(i == 1) x else call("&&", ssexpr, x)
}