2016-07-15 93 views
2

我對R(和stackoverflow)很新。我一直試圖對我使用lmres的連續x二分迴歸模型和pequod包中的simpleSlope進行簡單的斜率分析。在R中的錯誤消息:if(nomZ%in%coded){:參數的長度爲零

我的變量:

SLS - continuous DV csibdiff - continuous predictor (I already manually centered the variable with another code) culture - dichotomous moderator

newmod<-lmres(SLS ~ csibdiff*culture, data=sibdat2) 
newmodss <-simpleSlope(newmod, pred="csibdiff", mod1="culture") 

然而,在運行simpleSlope功能後,我收到此錯誤信息:

Error in if (nomZ %in% coded) { : argument is of length zero 

我不懂nomZ一部分,但我假設我的變量有問題。這是什麼意思?我的數據中根本沒有nomZ命名的東西。我的變量都不是空類(我用is.null()函數檢查它們),並且我似乎沒有意外刪除變量的內容(我使用table()函數進行了檢查)。

如果其他人可以建議另一個函數/包,我可以做一個簡單的斜率分析,我也很感激。我一直在這個問題上停留了幾天。

編輯:我將相關變量子集到一個csv文件。

https://www.dropbox.com/s/6j82ky457ctepkz/sibdat2.csv?dl=0

+0

這意味着'nomZ'長度爲0,這意味着它沒有任何內容。例如,嘗試'if(c()%in%1:5)1 else 2',這顯然是'c()'是一個空向量。如果'nomZ'不是你的變量(即,在'simpleSlope'內部),那麼你可能會遇到奇點或數學失敗的其他數學場景。 – r2evans

+0

你能提供一個可重複的例子嗎? –

+0

@BenBolker我添加了一個數據集的鏈接! – user6591823

回答

1

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) 

我們確實有一些csibdiffNA,所以儘量除去這些...

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

enter image description here

有沒有什麼會在這裏,但沒有明顯的錯誤要麼...

使用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一些警告 - 你必須挖掘自己更遠看看你是否需要擔心他們。