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