2017-11-22 1 views
1

현재 일부 데이터를 변환하기 위해 Johnson 패키지를 사용하고 있습니다 (예 : 잘못 리콜 된 항목의 비율).R : NE.Johnson 패키지 (RE.ADT (xsl [, i])의 오류 : 개체 'p'를 찾을 수 없음)

(https://cran.r-project.org/web/packages/Johnson/Johnson.pdf)

NE.Johnson 함수는 두 개의 변수에서 떨어져 내 데이터의 대부분 잘 작동합니다. 나는 다음과 같은 오류가 나타납니다 기능을 실행하려고 할 때 : RE.ADT에서

>recall_Johnson <- RE.Johnson(RECALL) 

오류 (XSL을 [I]) : 난 정말 당신을 바라고

개체를 찾을 수 없습니다 'P' 왜 내가 오류를 얻는 지 알 수 없기 때문에 친구들이 나를 도와 줄 수 있습니다!

나는 데이터를 시각적으로 검색했으며 실제로 두 가지 문제 변수가 나타나는 것을 찾을 수 없다. 다음은 잘 작동하는 하나의 변수 (억제 오류 백분율)와 작동하지 않는 (리콜 오류 백분율) 정렬 된 데이터입니다.

잘 작동 : 억제 오류

> sort.x=sort(Inhibpercent) 
> print(sort.x) 

    [1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 
    [7] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 
[13] 0.8403361 0.8474576 1.2605042 1.6666667 1.6666667 1.6666667 
[19] 1.6666667 1.6666667 1.6666667 1.6666667 1.6806723 1.6949153 
[25] 1.6949153 1.6949153 1.7021277 1.7241379 1.7241379 1.7543860 
[31] 2.0833333 2.1008403 2.1276596 2.5000000 2.5000000 2.5104603 
[37] 2.5423729 2.5531915 2.9166667 2.9166667 2.9166667 2.9166667 
[43] 2.9411765 2.9535865 3.0042918 3.3333333 3.3333333 3.3333333 
[49] 3.3333333 3.3613445 3.3755274 3.3755274 3.3898305 3.3898305 
[55] 3.4188034 3.4482759 3.7500000 3.7656904 3.7815126 3.7815126 
[61] 3.8297872 4.1666667 4.1841004 4.2016807 4.2194093 4.5833333 
[67] 4.6025105 4.6511628 4.6808511 5.0000000 5.0000000 5.0000000 
[73] 5.0209205 5.0847458 5.0847458 5.0847458 5.0847458 5.1282051 
[79] 5.4393305 5.5319149 5.8333333 6.6666667 6.6666667 6.7796610 
[85] 6.7796610 6.7796610 6.7796610 6.8965517 6.8965517 7.3033708 
[91] 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333 
[97] 8.4388186 8.4745763 8.4745763 8.4745763 8.6206897 9.5833333 
[103] 9.6638655 10.0000000 10.1694915 10.1694915 10.3448276 10.5042017 
[109] 10.7142857 11.3924051 11.6666667 11.6666667 12.0833333 13.3333333 
[115] 15.2542373 18.3333333 20.7547170 25.8536585 

가 작동하지 않습니다 기억 오류 외에도 제로 약간 더 인스턴스를 가진 리콜에서

> sort.x=sort(incorrectrecallpercent) 
> print(sort.x) 

    [1] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 
    [7] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 
[13] 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 
[19] 0.0000000 0.0000000 0.0000000 0.0000000 0.4166667 0.4166667 
[25] 0.4201681 0.4201681 0.4201681 0.4219409 0.4255319 0.4255319 
[31] 0.4878049 0.8333333 0.8368201 0.8403361 0.8403361 0.8438819 
[37] 1.2500000 1.2500000 1.2500000 1.2605042 1.2875536 1.6666667 
[43] 1.6666667 1.6666667 1.6666667 1.6666667 1.6666667 1.6736402 
[49] 1.6949153 1.6949153 1.6949153 2.1186441 2.1186441 2.1186441 
[55] 2.5000000 2.5000000 2.5104603 2.5210084 2.5210084 2.9166667 
[61] 2.9787234 3.3333333 3.3333333 3.3898305 3.3898305 3.7500000 
[67] 3.7735849 3.7974684 4.1666667 4.1841004 4.6025105 5.0000000 
[73] 5.0000000 5.0847458 5.0847458 5.1724138 5.3571429 5.4621849 
[79] 5.5084746 5.5555556 6.6666667 6.6666667 6.7226891 6.7796610 
[85] 6.7796610 6.8965517 7.0175439 8.3333333 8.3333333 8.3333333 
[91] 8.3333333 8.3333333 8.3333333 8.3333333 8.3333333 10.0000000 
[97] 10.0000000 10.0000000 10.1694915 10.3448276 11.2359551 11.6666667 
[103] 12.2807018 12.2881356 13.5593220 13.7931035 13.7931035 16.1016949 
[109] 16.2790698 16.4556962 16.9491525 17.9487179 26.1603376 29.3103448 
[115] 32.2033898 32.2033898 32.2033898 39.9159664 

, 난 정말 볼 수 없습니다 실질적인 차이점은? 하지만 아마도 내가 뭔가를 바라 보는거야?

나는이 스레드에서 안내에 따라 시도는 :

if(xsb.valida[1,i]==0) xsb.adtest[1,i]<-(RE.ADT(xsb[,i])$p) 
if(xsl.valida[1,i]==0) xsl.adtest[1,i]<-(RE.ADT(xsl[,i])$p) 
if(xsu.valida[1,i]==0) xsu.adtest[1,i]<-(RE.ADT(xsu[,i])$p) 

에 : Apply a loop to a data frame

이이 코드 (RE.Johnson.R의 줄 101-103)를 수정하는 것이 좋습니다

if (xsb.valida[1, i] == 0 & any(xsb[, i]!=xsb[1, i])){ 
    xsb.adtest[1, i] <- (RE.ADT(xsb[, i])$p) 
    } 
else{ xsb.adtest[1, i] <- 0 
} 
if (xsl.valida[1, i] == 0 & any(xsl[, i]!=xsl[1, i])) { 
xsl.adtest[1, i] <- (RE.ADT(xsl[, i])$p) 
} 
else{ xsl.adtest[1, i] <- 0 
} 
if (xsu.valida[1, i] == 0 & any(xsu[, i]!=xsu[1, i])) { 
xsu.adtest[1, i] <- (RE.ADT(xsu[, i])$p) 
} 
else{xsu.adtest[1, i] <- 0 
} 

변경 사항의 이유는 함수가 동일한 값의 벡터로 변환을 수행하려고 할 때 동일한 오류가 발생할 수 있다는 것입니다. 벡터의 값이 같지 않아 내 데이터에 적용되지 않는다고 생각하지만 아마도 오해를했을까요? 함수가 벡터를 여러 섹션으로 나누면 ... 정렬 된 목록의 시작 부분에 0이 생길 수 있으므로이 문제가 발생할 수 있습니다. 코드를 변경하려고했지만 불행히도 문제가 해결되었습니다.

아래 코드가 NA/NaN 발생을 처리하기 위해 삽입 된 것을 볼 수 있습니다. 그것은 스크립트 하단 (NE.Johnson.R의 106-108 행) 근처에 표시되고 오류가 발생한 부분 바로 아래에 표시됩니다 (NE.Johnson.R의 101 행). 아마도 내가 얻고있는 오류와 관련이있을 수 있습니까?

# insertion by Boda Martin to handle with NA/NaN occurrences 
xsb.adtest[which(is.na(xsb.adtest))] <- 0 
xsl.adtest[which(is.na(xsl.adtest))] <- 0 
xsu.adtest[which(is.na(xsu.adtest))] <- 0 

올바른 방향으로 도움말, 안내 또는 부드러운 안내를 보내 주시면 감사하겠습니다.https://cran.r-project.org/web/packages/Johnson/index.html

많은 감사, 레이첼

답변

0

와우 : 코드를보고 싶다면 여기

패키지를 다운로드 할 수있는 링크입니다. 그 패키지의 소스 코드는 위험 부담이 있습니다! 이론적으로, 그리고 - -

나는 그래서 당신이 제공하는 링크하고 실제로 수행하는에 제안 된 변경을 문제 해결 :

# install.packages("devtools") 
devtools::install_github("hrbrmstr/Johnson") 

library(Johnson) 

c(0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 
0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 
0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 
0.0000000, 0.4166667, 0.4166667, 0.4201681, 0.4201681, 0.4201681, 0.4219409, 
0.4255319, 0.4255319, 0.4878049, 0.8333333, 0.8368201, 0.8403361, 0.8403361, 
0.8438819, 1.2500000, 1.2500000, 1.2500000, 1.2605042, 1.2875536, 1.6666667, 
1.6666667, 1.6666667, 1.6666667, 1.6666667, 1.6666667, 1.6736402, 1.6949153, 
1.6949153, 1.6949153, 2.1186441, 2.1186441, 2.1186441, 2.5000000, 2.5000000, 
2.5104603, 2.5210084, 2.5210084, 2.9166667, 2.9787234, 3.3333333, 3.3333333, 
3.3898305, 3.3898305, 3.7500000, 3.7735849, 3.7974684, 4.1666667, 4.1841004, 
4.6025105, 5.0000000, 5.0000000, 5.0847458, 5.0847458, 5.1724138, 5.3571429, 
5.4621849, 5.5084746, 5.5555556, 6.6666667, 6.6666667, 6.7226891, 6.7796610, 
6.7796610, 6.8965517, 7.0175439, 8.3333333, 8.3333333, 8.3333333, 8.3333333, 
8.3333333, 8.3333333, 8.3333333, 8.3333333, 10.0000000, 0.0000000, 10.0000000, 
10.1694915, 10.3448276, 11.2359551, 11.6666667, 2.2807018, 12.2881356, 
13.5593220, 13.7931035, 13.7931035, 16.1016949, 6.2790698, 16.4556962, 
16.9491525, 17.9487179, 26.1603376, 29.3103448, 2.2033898, 32.2033898, 
32.2033898, 39.9159664) -> incorrectrecallpercent 

str(RE.Johnson(incorrectrecallpercent)) 
#> List of 8 
#> $   : chr "Johnson Transformation" 
#> $ function : chr "SB" 
#> $ p   : num 0.00058 
#> $ transformed: num [1:118] -1.08 -1.08 -1.08 -1.08 -1.08 ... 
#> $ f.gamma : num 2.65 
#> $ f.lambda : num 112 
#> $ f.epsilon : num -0.921 
#> $ f.eta  : num 0.778 

내가 당신에게 전산 출력 정확성을 떠날 것입니다.

참고로

:

library(jtrans) 
library(nortest) 

str(jtrans(incorrectrecallpercent, test="ad.test")) 
## List of 10 
## $ original : num [1:118] 0 0 0 0 0 0 0 0 0 0 ... 
## $ transformed: num [1:118] -1.09 -1.09 -1.09 -1.09 -1.09 ... 
## $ type  : chr "sl" 
## $ test  : chr "ad.test" 
## $ eta  : num 0.824 
## $ gamma  : num -1.06 
## $ lambda  : num NA 
## $ epsilon : num -0.967 
## $ z   : num 0.26 
## $ p.value : num 0.000397 
## - attr(*, "class")= chr [1:2] "sl" "jtrans" 

다시 말하지만, 단지 당신이 결과의 측면에서 올바른 무엇을 알려고 : 존슨 변환을 수행하기위한 크랑에 패키지가있다.

+0

Brilliant, 고맙습니다. :) – Rachel

관련 문제