2016-07-15 3 views
2

저는 R (및 stackoverflow)에 대해 매우 익숙합니다. 저는 lmres를 사용하여 연속 x 이분법 회귀 모델에 대한 간단한 기울기 분석을 수행하고 pequod 패키지의 simpleSlope를 시도했습니다.R의 오류 메시지 : if (nomZ % in % coding) {: 인수의 길이가 0입니다.

내 변수 :

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

나는 nomZ 부분을 이해하지만하지 않습니다

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 기능을 실행 한 후,이 오류 메시지가 변수가 잘못되었다고 가정하십시오. 이것은 무엇을 의미 하는가? 내 데이터에는 nomZ라는 물건이 전혀 없습니다. 내 변수는 null 클래스는 아니며 (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; DR은 주로 약 연속 사회자 생각으로 패키지의 저자처럼 보이는; 당신이 mod1="cultureEuropean"를 지정하면

그것은이에 서비스 될 것이다 (... 그것은 분별 또는 아니라면 내가 아무 생각이 없음) 함수가 대답을 돌려줍니다 (즉,이 출력에 매개 변수 대응의 이름과 일치합니다)

:

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

이 데이터를 확인 : 커뮤니티하여 pequod 패키지 (maintainer("pequod"))이 문제에 대해 알고의 관리자들 ...

읽기 데이터를하자 오류를 복제하는

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

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도 길이가 0 인 정수임을 알 수 있습니다. 먼 뒤로, 우리는 코드가 수식어의 이름에 대한 매개 변수 이름 (분산 - 공분산 행렬의 행 이름)을 조사하고있는 것을 볼 수 있습니다 ... 그러나 그것은 없습니다.

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" 

이 솔루션은

(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에 대한 몇 가지 경고를받을 수 있나요 ... 것을 변수를 찾기 위해 simpleSlope에게 - 당신은 멀리 자신을 발굴해야합니다 당신이 그들에 대해 걱정할 필요가 있는지보기 위해서.

관련 문제