문제

데이터 분석 워크 플로의 일환으로 이상치를 테스트 한 다음 해당 특이 치가 있거나없는 추가 계산을 수행하고 싶습니다.

다양한 테스트가있는 Outier 패키지를 찾았지만 워크 플로우에 어떻게 사용하는지 잘 모르겠습니다.

도움이 되었습니까?

해결책 2

나는 Dirk에 동의합니다. 어렵습니다. 나는 당신이 왜 이상치가 있는지 살펴 보는 것을 먼저 추천합니다. 특이 치는 누군가가 의심 스럽다고 생각하는 숫자 일 뿐이며, 구체적인 '나쁜'가치가 아니며, 이상한 사람이 될 이유를 찾을 수 없다면 불확실성으로 살아야 할 수도 있습니다.

당신이 언급하지 않은 한 가지는 어떤 종류의 특이점을보고 있는지였습니다. 데이터가 평균 주위에 클러스터되어 있습니까, 특정 분포가 있거나 데이터간에 어떤 관계가 있습니까?

여기 몇 가지 예가 있습니다

먼저, 일부 데이터를 작성한 다음 특이 치로 오염시킬 것입니다.

> testout<-data.frame(X1=rnorm(50,mean=50,sd=10),X2=rnorm(50,mean=5,sd=1.5),Y=rnorm(50,mean=200,sd=25))
> #Taint the Data
> testout$X1[10]<-5
> testout$X2[10]<-5
> testout$Y[10]<-530

> testout
         X1         X2        Y
1  44.20043  1.5259458 169.3296
2  40.46721  5.8437076 200.9038
3  48.20571  3.8243373 189.4652
4  60.09808  4.6609190 177.5159
5  50.23627  2.6193455 210.4360
6  43.50972  5.8212863 203.8361
7  44.95626  7.8368405 236.5821
8  66.14391  3.6828843 171.9624
9  45.53040  4.8311616 187.0553
10  5.00000  5.0000000 530.0000
11 64.71719  6.4007245 164.8052
12 54.43665  7.8695891 192.8824
13 45.78278  4.9921489 182.2957
14 49.59998  4.7716099 146.3090
<snip>
48 26.55487  5.8082497 189.7901
49 45.28317  5.0219647 208.1318
50 44.84145  3.6252663 251.5620

데이터를 그래픽으로 검사하는 것이 가장 유용합니다 (수학보다 이상치를 발견하는 데 훨씬 낫습니다).

> #Use Boxplot to Review the Data
> boxplot(testout$X1, ylab="X1")
> boxplot(testout$X2, ylab="X2")
> boxplot(testout$Y, ylab="Y")

그런 다음 테스트를 사용할 수 있습니다. 테스트가 컷오프 값을 반환하는 경우, 또는 이상치 일 수있는 값을 사용하면 ifelse를 사용하여 제거 할 수 있습니다.

> #Use Outlier test to remove individual values
> testout$newX1<-ifelse(testout$X1==outlier(testout$X1),NA,testout$X1)
> testout
         X1         X2        Y    newX1
1  44.20043  1.5259458 169.3296 44.20043
2  40.46721  5.8437076 200.9038 40.46721
3  48.20571  3.8243373 189.4652 48.20571
4  60.09808  4.6609190 177.5159 60.09808
5  50.23627  2.6193455 210.4360 50.23627
6  43.50972  5.8212863 203.8361 43.50972
7  44.95626  7.8368405 236.5821 44.95626 
8  66.14391  3.6828843 171.9624 66.14391 
9  45.53040  4.8311616 187.0553 45.53040
10  5.00000  5.0000000 530.0000       NA 
11 64.71719  6.4007245 164.8052 64.71719 
12 54.43665  7.8695891 192.8824 54.43665 
13 45.78278  4.9921489 182.2957 45.78278 
14 49.59998  4.7716099 146.3090 49.59998 
15 45.07720  4.2355525 192.9041 45.07720 
16 62.27717  7.1518606 186.6482 62.27717 
17 48.50446  3.0712422 228.3253 48.50446 
18 65.49983  5.4609713 184.8983 65.49983 
19 44.38387  4.9305222 213.9378 44.38387 
20 43.52883  8.3777627 203.5657 43.52883 
<snip>
49 45.28317  5.0219647 208.1318 45.28317 
50 44.84145  3.6252663 251.5620 44.84145

또는보다 복잡한 예를 보려면 STAT를 사용하여 Lund 테스트를 사용하여 중요한 컷오프 값을 계산할 수 있습니다 (Lund, Re 1975, "선형 모델의 특이 치에 대한 대략적인 테스트를위한 테이블", Technometrics, vol. 17, no. 4, pp. 473-476. 및 Prescott, P. 1975, "선형 모델의 이상치에 대한 대략적인 테스트", Technometrics, vol. 17, no. 1, pp. 129-132.)

> #Alternative approach using Lund Test
> lundcrit<-function(a, n, q) {
+ # Calculates a Critical value for Outlier Test according to Lund
+ # See Lund, R. E. 1975, "Tables for An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 4, pp. 473-476.
+ # and Prescott, P. 1975, "An Approximate Test for Outliers in Linear Models", Technometrics, vol. 17, no. 1, pp. 129-132.
+ # a = alpha
+ # n = Number of data elements
+ # q = Number of independent Variables (including intercept)
+ F<-qf(c(1-(a/n)),df1=1,df2=n-q-1,lower.tail=TRUE)
+ crit<-((n-q)*F/(n-q-1+F))^0.5
+ crit
+ }

> testoutlm<-lm(Y~X1+X2,data=testout)

> testout$fitted<-fitted(testoutlm)

> testout$residual<-residuals(testoutlm)

> testout$standardresid<-rstandard(testoutlm)

> n<-nrow(testout)

> q<-length(testoutlm$coefficients)

> crit<-lundcrit(0.1,n,q)

> testout$Ynew<-ifelse(abs(testout$standardresid)>crit,NA,testout$Y)

> testout
         X1         X2        Y    newX1   fitted    residual standardresid
1  44.20043  1.5259458 169.3296 44.20043 209.8467 -40.5171222  -1.009507695
2  40.46721  5.8437076 200.9038 40.46721 231.9221 -31.0183107  -0.747624895
3  48.20571  3.8243373 189.4652 48.20571 203.4786 -14.0134646  -0.335955648
4  60.09808  4.6609190 177.5159 60.09808 169.6108   7.9050960   0.190908291
5  50.23627  2.6193455 210.4360 50.23627 194.3285  16.1075799   0.391537883
6  43.50972  5.8212863 203.8361 43.50972 222.6667 -18.8306252  -0.452070155
7  44.95626  7.8368405 236.5821 44.95626 223.3287  13.2534226   0.326339981
8  66.14391  3.6828843 171.9624 66.14391 148.8870  23.0754677   0.568829360
9  45.53040  4.8311616 187.0553 45.53040 214.0832 -27.0279262  -0.646090667
10  5.00000  5.0000000 530.0000       NA 337.0535 192.9465135   5.714275585
11 64.71719  6.4007245 164.8052 64.71719 159.9911   4.8141018   0.118618011
12 54.43665  7.8695891 192.8824 54.43665 194.7454  -1.8630426  -0.046004311
13 45.78278  4.9921489 182.2957 45.78278 213.7223 -31.4266180  -0.751115595
14 49.59998  4.7716099 146.3090 49.59998 201.6296 -55.3205552  -1.321042392
15 45.07720  4.2355525 192.9041 45.07720 213.9655 -21.0613819  -0.504406009
16 62.27717  7.1518606 186.6482 62.27717 169.2455  17.4027250   0.430262983
17 48.50446  3.0712422 228.3253 48.50446 200.6938  27.6314695   0.667366651
18 65.49983  5.4609713 184.8983 65.49983 155.2768  29.6214506   0.726319931
19 44.38387  4.9305222 213.9378 44.38387 217.7981  -3.8603382  -0.092354925
20 43.52883  8.3777627 203.5657 43.52883 228.9961 -25.4303732  -0.634725264
<snip>
49 45.28317  5.0219647 208.1318 45.28317 215.3075  -7.1756966  -0.171560291
50 44.84145  3.6252663 251.5620 44.84145 213.1535  38.4084869   0.923804784
       Ynew
1  169.3296
2  200.9038
3  189.4652
4  177.5159
5  210.4360
6  203.8361
7  236.5821
8  171.9624
9  187.0553
10       NA
11 164.8052
12 192.8824
13 182.2957
14 146.3090
15 192.9041
16 186.6482
17 228.3253
18 184.8983
19 213.9378
20 203.5657
<snip>
49 208.1318
50 251.5620

편집 : 방금 코드에 문제가 있음을 알았습니다. Lund 테스트는 스터드 된 잔차의 절대 값과 비교 해야하는 임계 값을 생성합니다 (즉, 부호없는)

다른 팁

특이 치가 걱정하는 대신 걱정하는 대신 강력한 방법을 사용하십시오. 예를 들어 LM 대신 rlm을 사용하십시오.

"어렵다". 이것의 대부분은 컨텍스트에 따라 다르며 이것을 응용 프로그램에 포함시켜야 할 수도 있습니다.

  • 데이터가 드리프트, 트렌드 또는 사이클입니까?
  • 변동성이 고정 되었습니까? 아니면 자체가 변수입니까?
  • '벤치마킹'에 사용할 수있는 다른 시리즈가 있습니까?

이상치 패키지 외에도 있습니다 QCC 품질 관리 문헌 이이 분야를 다루는 패키지.

예를 들어 볼 수있는 다른 많은 영역이 있습니다. 강력한 통계 작업보기.

시도해보십시오 outliers::score 기능. 나는 소위 Outlier 's를 제거하는 것을 조언하지 않지만 극단적 인 관찰을 아는 것이 좋습니다.

library(outliers)
set.seed(1234)
x = rnorm(10)
[1] -1.2070657  0.2774292  1.0844412 -2.3456977  0.4291247  0.5060559 -0.5747400 -0.5466319
[9] -0.5644520 -0.8900378
outs <- scores(x, type="chisq", prob=0.9)  # beyond 90th %ile based on chi-sq
#> [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
x[outs]  # most extreme
#> [1] -2.345698

더 많은 도움을 찾을 수 있습니다 여기서 이상적인 탐지

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top