긍정적 인 데이터가 치우친 경우 종종 로그를 가져옵니다. 그러나 0을 포함하는 비대칭 비대칭 데이터로 무엇을해야합니까? 나는 두 가지 변형이 사용되는 것을 보았다.
- 0은 0에 매핑되는 깔끔한 기능을 가진 입니다.
- 여기서 c는 추정되거나 매우 작은 양의 값으로 설정됩니다.
다른 접근법이 있습니까? 하나의 접근법을 다른 접근법보다 선호해야 할 이유가 있습니까?
긍정적 인 데이터가 치우친 경우 종종 로그를 가져옵니다. 그러나 0을 포함하는 비대칭 비대칭 데이터로 무엇을해야합니까? 나는 두 가지 변형이 사용되는 것을 보았다.
다른 접근법이 있습니까? 하나의 접근법을 다른 접근법보다 선호해야 할 이유가 있습니까?
답변:
가장 적절한 변형의 선택은 모델과 상황에 따라 달라 보입니다.
'0'포인트는 여러 가지 이유로 인해 발생할 수 있으며 각 이유는 각각 다르게 처리해야합니다.
제로가있을 때 보편적이고 '올바른'변형이 없다고 생각하기 때문에 실제로 대답하지 않습니다.
아무도 역 쌍곡 사인 변환을 언급하지 않았습니다. 완전성을 위해 여기에 추가하겠습니다.
이것은 Box-Cox 변환의 대안이며 여기서 . 값에 대해 0은 0에 매핑됩니다. 2 파라미터 BC 변환과 마찬가지로 시프트를 허용하는 2 파라미터 버전도 있습니다. Burbidge, Magee and Robb (1988) 는 추정을 포함한 IHS 변환에 대해 논의했다 .
IHS 변환은 음수 값과 0을 포함하여 전체 실제 라인에 정의 된 데이터로 작동합니다. 값이 크면 값 (0 제외)에 관계없이 로그 변환처럼 동작 합니다. 같은 제한 경우 제공 .
그것은 IHS 변환이 그것보다 훨씬 더 잘 알려져 있어야하는 것처럼 보입니다.
변수가 회귀에서 독립 요인으로 사용될 때 유용한 방법은 변수를 두 변수로 대체하는 것입니다. 하나는 변수가 0인지 여부에 대한 이진 표시기이고 다른 하나는 원래 변수의 값 또는 변수의 재 표현입니다. 로그와 같은. 이 기술은 로지스틱 회귀에 대한 Hosmer & Lemeshow의 저서 (그리고 다른 곳에서는 확실합니다) 에서 논의됩니다 . 원래 변수의 양수 부분의 잘린 확률도는 적절한 재 발현을 식별하는 데 유용합니다. ( 예 는 https://stats.stackexchange.com/a/30749/919 의 분석을 참조하십시오 .)
변수가 선형 모델에서 종속 변수 인 경우 검열 된 회귀 (예 : Tobit )가 유용 할 수 있으며 다시 시작 로그를 생성 할 필요가 없습니다. 이 기술은 계량 경제학자에게 공통적입니다.
시프트가있는 로그 변환은 Box-Cox 변환 의 특수한 경우입니다 .
음수 값의 확장 된 형식이지만 0이 포함 된 데이터에도 적용됩니다. Box and Cox (1964)는 최대 가능성을 사용하여 적절한 값을 찾는 알고리즘을 제시합니다 . 이것은 당신에게 최고의 변화를 제공합니다.
Box-Cox 변환을 선호하는 이유는 선형 모델에 대한 가정을 보장하기 위해 개발 되었기 때문입니다. 데이터를 정규화로 변환 할 수없는 경우에도 추정 된 여전히 대칭 분포로 이어진다 는 것을 보여주기 위해 수행 한 작업이 있습니다 .
그것은이 될 수 있기 때문에 나는,이 데이터를 처리하는 방법을 잘하지 확신 단지 로그는 당신이 언급 한 변화 만이 (가) requried 추정 가치가있을 수 있습니다 어떤 의 다른 여부를 확인하려면 변환이 적절합니다.
R boxcox.fit
에서 package 의 함수 geoR
는 매개 변수를 계산합니다.
lambda2=TRUE
에 인수로 지정 하십시오 boxcox.fit
. (또한 답변을 업데이트했습니다.)
boxcoxfit
합니다.
나는 전혀 다른 질문이므로 zero! = 누락 된 데이터를 가정합니다.
다중 선형 회귀 분석에서 0을 처리하는 방법에 대해 생각할 때 실제로 실제로 0이 몇 개인 지 고려하는 경향이 있습니까?
오직 두 개의 0
상당히 큰 데이터 세트에 단일 0이 있으면 다음과 같은 경향이 있습니다.
모형 적합이 변경됩니까? 매개 변수 값은 어떻습니까? 모델이 점을 제거하는 데 상당히 견고하다면 를 추가하는 빠르고 더러운 접근법을 사용 합니다.
이 절차를 조금 덜 조잡하게 만들 수 있으며 ars의 답변에 설명 된 시프트와 함께 boxcox 방법을 사용할 수 있습니다.
많은 수의 0
내 데이터 세트에 많은 수의 0이 포함되어 있으면 간단한 선형 회귀가 작업에 가장 적합한 도구가 아님을 나타냅니다. 대신 Srikant와 Robin이 제안한 혼합 모델링과 같은 것을 사용합니다.
빠르고 더러운 것을 원한다면 왜 제곱근을 사용하지 않습니까?
나는 당신이 지속적인 데이터를 가지고 있다고 가정합니다.
데이터에 0 이 포함 된 경우 이는 데이터의 특정 측면으로 인해 0에 스파이크가 발생했음을 의미합니다. 예를 들어 풍력 에너지, 2m / s 미만의 바람은 제로 파워 (절단이라고 함)를 생성하고 25m / s 이상의 바람은 제로 파워를 생성합니다 (보안상의 이유로 차단이라고 함). . 생산 된 풍력 에너지의 분포는 연속적인 것으로 보이지만 0은 급등합니다.
내 해결책 : 이 경우, 0의 스파이크와 연속 분포의 부분 (Letgue wwr)에 사용하려는 모델을 혼합하여 사용하여 0을 개별적으로 처리하는 것이 좋습니다.
@RobHyndman이 제공 한 답변과 로그 플러스 1 변환을 음수 값으로 확장하여 다음 형식으로 비교합니다.
r = -1000:1000
l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)
#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
s = asinh(i*r)
s = s / max(s)
lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)
보시다시피, 증가함에 따라 변환은 단계 함수처럼 보입니다. 함께 가 로그 - 플러스 - 하나의 변화처럼 많이 보인다. 그리고 일 때 줄에 접근합니다.θ ≈ 1 θ → 0
편집 : 로그 변환은 비슷한 결과로 임의의 스케일로 유사하게 변경 될 수 있습니다. 방금 이전 답변에 따라 비슷한 결과를 제공 하는 를 보여주고 싶었습니다 . 두 접근 방식의 가장 큰 차이점은 파생 상품에서 볼 수 있듯이 근처의 영역 입니다.x = 0
2- 파라미터 맞춤 Box-Cox가 제안되었으므로 여기에 입력 데이터를 맞추고 임의의 함수를 실행 (예 : 시계열 예측) 한 다음 반전 된 출력을 반환하는 R이 있습니다.
# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
if (lambda1!=0) {
return(((x + lambda2) ^ lambda1 - 1) / lambda1)
} else {
return(log(x + lambda2))
}
}
# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
if (lambda1!=0) {
return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
} else {
return(exp(x) - lambda2)
}
}
# Function to Box-Cox transform x, apply function g,
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
require(geoR)
require(plyr)
# Fit lambdas
t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)
# Estimating both lambdas sometimes fails; if so, estimate lambda1 only
if (inherits(t, "try-error")) {
lambda1 <- boxcoxfit(x)$lambda
lambda2 <- 0
} else {
lambda1 <- lambda.pair[1]
lambda2 <- lambda.pair[2]
}
x.boxcox <- boxcox.f(x, lambda1, lambda2)
# Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
y <- aaply(x.boxcox, 1, g)
return(boxcox.inv(y, lambda1, lambda2))
}
Y가 각 미국인이 주어진 해에 새 차에 소비하는 금액 (총 구매 가격)이라고 가정합니다. Y는 0에서 급등합니다. 0과 약 12,000 사이의 값은 전혀 없으며; 그리고 대부분 십대, 20 대, 3 만 명의 다른 가치를 취할 것입니다. 예측자는 그러한 구매에 대한 필요성 및 / 또는 관심의 수준에 대한 프록시 일 것이다. 구매를하지 않은 개인에게는 필요 또는 관심이 거의 없다고 말할 수 없었습니다. 이 비늘에서 비구매자는 Y보다 구매자에게 훨씬 더 가까워 지거나 심지어 Y의 로그가 제안하는 것입니다. 이와 비슷하지만 건강 관리에서 테스트 세트 / 트레이닝 세트 교차 검증으로 판단되는 가장 정확한 예측은
일부는 연속 종속 변수의이 분류에서 반동합니다. 그러나 일부 정보는 희생되지만 분류는 상황의 중요한 기본 측면을 복원하여 도움이되는 것으로 보입니다. 다시 말하지만 "0"은 Y가 나타내는 것보다 나머지와 훨씬 더 유사합니다.
여기에서 논의 된 Yeo-Johnson 전력 변환 은 Box Cox 전력 변환의 강점을 바탕으로 0과 음을 처리하도록 설계된 우수한 특성을 가지고 있습니다. 이것은 내가 0 또는 부정적인 데이터를 다룰 때 일반적으로하는 것입니다.
여기 Yeo-Johnson이 바람직한 이유를 설명하기위한 장단점이있는 변환이 요약되어 있습니다.
로그
장점 : 긍정적 인 데이터와 잘 어울립니다.
단점 : 0을 처리하지 않습니다.
> log(0)
[1] -Inf
로그 플러스 1
장점 : 플러스 1 오프셋은 양수 데이터 외에 0을 처리하는 기능을 추가합니다.
단점 : 부정적인 데이터로 실패
> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced
제곱근
장점 : 0과 양의 데이터를 처리 할 수있는 전력 변환을 사용합니다.
단점 : 부정적인 데이터로 실패
> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
박스 콕스
R 코드 :
box_cox <- function(x, lambda) {
eps <- 0.00001
if (abs(lambda) < eps)
log(x)
else
(x ^ lambda - 1) / lambda
}
장점 : 확장 된 전력 변환 가능
단점 : 0과 음수 문제로 어려움을 겪습니다 (즉, 긍정적 인 데이터 만 처리 할 수 있음).
> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN
여 존슨
R 코드 :
yeo_johnson <- function(x, lambda) {
eps <- .000001
not_neg <- which(x >= 0)
is_neg <- which(x < 0)
not_neg_trans <- function(x, lambda) {
if (abs(lambda) < eps) log(x + 1)
else ((x + 1) ^ lambda - 1) / lambda
}
neg_trans <- function(x, lambda) {
if (abs(lambda - 2) < eps) - log(-x + 1)
else - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
}
x[not_neg] <- not_neg_trans(x[not_neg], lambda)
x[is_neg] <- neg_trans(x[is_neg], lambda)
return(x)
}
장점 : 양수, 제로 및 음수 데이터를 처리 할 수 있습니다.
단점 : 내가 생각할 수있는 것은 없다. 속성은 Box-Cox와 매우 유사하지만 0 및 음수 데이터를 처리 할 수 있습니다.
> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951
회귀 모델에서 0의 로그를 처리하는 방법을 명확히하기 위해 우리는 사람들이 실제로 범하는 가장 좋은 해결책과 일반적인 실수를 설명하는 교육 논문을 작성했습니다. 또한이 문제를 해결하기위한 새로운 솔루션을 개발했습니다.
여기를 클릭하여 논문을 찾을 수 있습니다 : https://ssrn.com/abstract=3444996
이 기사에서는 실제로 매우 작은 상수를 추가하는 것이 실제로 가장 높은 편향을 제공하는 예를 제공합니다. 우리는 편견의 표현을 제공합니다.
실제로 Poisson Pseudo Maximum Likelihood (PPML)는이 문제에 대한 좋은 해결책으로 간주 될 수 있습니다. 다음 프로세스를 고려해야합니다.
우리는이 추정기가 편견이 없으며 표준 통계 소프트웨어를 사용하여 GMM으로 간단히 추정 할 수 있음을 보여줍니다. 예를 들어 Stata를 사용하면 한 줄의 코드 만 실행하여 추정 할 수 있습니다.
이 기사가 도움이 되길 바랍니다. 여러분의 의견을 기다리고 있습니다.
Christophe Bellégo와 Louis-Daniel Pape CREST-에코 폴리 테크닉-ENSAE