TL;博士它看起来像包的作者进行了初步思考连续版主;如果指定mod1="cultureEuropean"
(即以匹配输出相应的参数的名称)该函数返回一个答案(我不知道,如果它是明智的或不...)
这将是对服务社区让pequod
包(maintainer("pequod")
)知道这个问题的维护者......
读取数据和复制错误:
sibdat2 <- read.csv("sibdat2.csv")
library(pequod)
newmod <- lmres(SLS ~ csibdiff*culture, data=sibdat2)
newmodss <- simpleSlope(newmod, pred="csibdiff", mod1="culture")
检查数据:
summary(sibdat2)
我们确实有一些csibdiff
值NA
,所以尽量除去这些...
sibdat2B <- na.omit(sibdat2)
但实际上并不利于(同样的错误之前)。
图中的数据,以检查其他陌生感
library(ggplot2); theme_set(theme_bw())
ggplot(sibdat2B,aes(csibdiff,SLS,colour=culture))+
stat_sum(aes(size=factor(..n..))) +
geom_smooth(method="lm")
有没有什么会在这里,但没有明显的错误要么...
使用traceback()
看到大约是哪里的问题:
traceback()
3: simple.slope(object, pred, mod1, mod2, coded)
2: simpleSlope.default(newmod, pred = "csibdiff", mod1 = "culture")
1: simpleSlope(newmod, pred = "csibdiff", mod1 = "culture")
我们可以使用options(error=recover)
直接跳到到犯罪现场,但让我们尝试一步一步的调试,而不是...
debug(pequod:::simple.slope)
,因为我们通过我们可以看到这一点:
nomZ <- names(regr$coef)[pos_mod]
nomZ ## character(0)
而且看起来有点远了,我们可以看到pos_mod
也是一个零长度整数。接下来,我们看到代码正在通过参数名称(方差 - 协方差矩阵的行名)查找修饰符的名称......但它不在那里。
debug: pos_pred_mod1 <- fI + grep(paste0("\\b", mod1, "\\b"), jj[(fI +
1):(fI + fII)])
Browse[2]> pos_mod
## integer(0)
Browse[2]> jj[1:fI]
## [[1]]
## [1] "(Intercept)"
##
## [[2]]
## [1] "csibdiff"
##
## [[3]]
## [1] "cultureEuropean"
Browse[2]> mod1
## [1] "culture"
的解决方法是告诉simpleSlope
找一个变量是有...
(newmodss <- simpleSlope(newmod, pred="csibdiff", mod1="cultureEuropean"))
## Simple Slope:
## simple slope standard error t-value p.value
## Low cultureEuropean (-1 SD) -0.2720128 0.2264635 -1.201133 0.2336911
## High cultureEuropean (+1 SD) 0.2149291 0.1668690 1.288011 0.2019241
我们得到约NaNs produced
一些警告 - 你必须挖掘自己更远看看你是否需要担心他们。
这意味着'nomZ'长度为0,这意味着它没有任何内容。例如,尝试'if(c()%in%1:5)1 else 2',这显然是'c()'是一个空向量。如果'nomZ'不是你的变量(即,在'simpleSlope'内部),那么你可能会遇到奇点或数学失败的其他数学场景。 – r2evans
你能提供一个可重复的例子吗? –
@BenBolker我添加了一个数据集的链接! – user6591823