매우 많은 수의 데이터 포인트에서 값을 대치하는 방법은 무엇입니까?


12

데이터 세트가 매우 커서 약 5 %의 임의 값이 없습니다. 이 변수들은 서로 상관되어 있습니다. 다음 예제 R 데이터 세트는 더미 상관 데이터가있는 장난감 예제 일뿐입니다.

set.seed(123)

# matrix of X variable 
xmat <- matrix(sample(-1:1, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
#M variables are correlated 

N <- 2000000*0.05 # 5% random missing values 
inds <- round ( runif(N, 1, length(xmat)) )
xmat[inds] <- NA 
> xmat[1:10,1:10]
         M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
sample1  -1 -1  1 NA  0 -1  1 -1  0  -1
sample2   1  1 -1  1  0  0  1 -1 -1   1
sample3   0  0  1 -1 -1 -1  0 -1 -1  -1
sample4   1  0  0 -1 -1  1  1  0  1   1
sample5  NA  0  0 -1 -1  1  0 NA  1  NA
sample6  -1  1  0  1  1  0  1  1 -1  -1
sample7  NA  0  1 -1  0  1 -1  0  1  NA
sample8   1 -1 -1  1  0 -1 -1  1 -1   0
sample9   0 -1  0 -1  1 -1  1 NA  0   1
sample10  0 -1  1  0  1  0  0  1 NA   0

이 상황에서 결 측값을 대치하는 가장 좋은 방법이 있습니까? 랜덤 포레스트 알고리즘이 도움이 되나요? R의 모든 작업 솔루션은 대단히 감사하겠습니다.

편집 :

(1) 측값 무작위 변수 samples.As에 분산되는 변수의 개수매우 큰 그동안, - (10,000 예에서 여기) 샘플들의 개수 는 200 그래서 때 관한 상기 더미 예 여기 작은 모든 변수 (10000)에 대한 모든 샘플을 살펴보면 많은 수의 변수로 인해 일부 변수에서 누락 된 값이있을 가능성이 높습니다. 따라서 샘플을 삭제하는 것은 옵션이 아닙니다.

(2) 변수는 대치 과정에서 정량적 또는 정 성적 (이진)으로 처리 될 수 있습니다. 유일한 판단은 우리가 그것을 얼마나 잘 예측할 수 있는지 (정확성)입니다. 따라서 1 대신 0.98과 같은 예측은 0 대 1 또는 -1 대 1보다 수용 가능할 수 있습니다. 컴퓨팅 시간과 정확성간에 균형을 맞춰야 할 수도 있습니다.

(3) 문제는 샘플 수에 비해 변수 수가 많기 때문에 과적 합이 결과에 어떤 영향을 미칠 수 있는지 생각했습니다.

(4) 결 측값의 총량이 약 5 %이고 임의이기 때문에 (결 측값이 매우 높은 변수 또는 표본을 제거하기 위해 예방 조치를 취함에 따라 변수 또는 표본에 집중되지 않음)

(5) 분석을 위해 데이터를 완성시키는 것은 첫 번째 목표이며 정확성은 부차적입니다. 정확도에 너무 민감하지 않습니다.

r  random-forest  missing-data  data-imputation  multiple-imputation  large-data  definition  moving-window  self-study  categorical-data  econometrics  standard-error  regression-coefficients  normal-distribution  pdf  lognormal  regression  python  scikit-learn  interpolation  r  self-study  poisson-distribution  chi-squared  matlab  matrix  r  modeling  multinomial  mlogit  choice  monte-carlo  indicator-function  r  aic  garch  likelihood  r  regression  repeated-measures  simulation  multilevel-analysis  chi-squared  expected-value  multinomial  yates-correction  classification  regression  self-study  repeated-measures  references  residuals  confidence-interval  bootstrap  normality-assumption  resampling  entropy  cauchy  clustering  k-means  r  clustering  categorical-data  continuous-data  r  hypothesis-testing  nonparametric  probability  bayesian  pdf  distributions  exponential  repeated-measures  random-effects-model  non-independent  regression  error  regression-to-the-mean  correlation  group-differences  post-hoc  neural-networks  r  time-series  t-test  p-value  normalization  probability  moments  mgf  time-series  model  seasonality  r  anova  generalized-linear-model  proportion  percentage  nonparametric  ranks  weighted-regression  variogram  classification  neural-networks  fuzzy  variance  dimensionality-reduction  confidence-interval  proportion  z-test  r  self-study  pdf 

1
그 이유 데이터가 누락 적절한 기술의 선택에 크게 부담. 예를 들어, 데이터가 무작위로 완전히 누락 된 경우 결 측값이있는 모든 사례를 삭제하여 데이터 손실이 거의 없습니다 (데이터 세트가 크고 상대적으로 적은 값이 없기 때문에). 그러나 누락이 분석에서 중요한 변수와 관련된 경우 이러한 사례를 삭제하면 편향이 발생할 수 있습니다.
whuber

1
@ whuber 동의합니다. 모든 경우에 적어도 하나의 변수에 누락 된 값이 있기 때문에이 크기의 데이터 세트에 대해서는 제거 할 수 없습니다. 이로 인해 데이터가 완전히 손실 될 수 있습니다.
John

4
John은 현재의 형태로 명시 적으로 달리 명시하기 때문에 질문을 크게 바꿉니다. 값의 5 % 만 누락되었다고 주장합니다. 사례 의 5 %가 아닌 데이터 매트릭스의 모든 항목 에 적용 할 5 %를 이해하더라도 데이터 의 특성을 나타내는 예제를 사용하는 사람은 10 * 5 % = 50을 넘지 않는다고 결론을 내릴 수 있습니다. 사례의 %에 결 측값이 있습니다. 그러한 질문에서 가장 중요한 세 가지 사항은 (1) 분석의 목적, (2) 실종의 본질, (3) 실종의 양입니다.
whuber

답변:


8

상황과 데이터 세트에 따라 큰 변수 및 작은 샘플 (관찰) 문제를 처리하는 두 가지 방법이 있습니다.

(1) 변수 전체의 점수가 동일하거나 정규화 된 경우 샘플 (관측)을 변수로 사용하십시오.

(2) 변수를 변수로 사용하지만 숫자 변수가 샘플 수보다 적고 데이터를 병합하도록 대치하는 동안 임의의 샘플링을 수행하십시오.

다음은 운동이며, 필요에 따라 조정할 수 있습니다. 나는 변수가 연속적이라고 가정하지만 이산 변수에 대해서도 비슷한 운동을합니다. 여기에 빠른 검사를위한 작은 예가 나와 있습니다.

먼저, 상관 데이터를 생성하는 운동의 경우, 여기에서 관측치 (샘플)는 상관되며, 관측치가 상관되는 동안 변수가 독립적으로 가정되는 상황에서 현실적 일 수 있습니다. 그러나 관측치와 변수가 서로 관련된 다른 상황에서는.

# example correlated data, correlated by observations 
# number of observations 
nobs = 200
nvars = 100
# number of variables 
# covariance matrix matrixCR to create correlated data 
matrixCR <- matrix(NA, nrow = nobs, ncol = nobs)
diag(matrixCR) <- 1
matrixCR[upper.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[lower.tri (matrixCR, diag = FALSE)] <- 0.5
matrixCR[1:10,1:10]
L = chol(matrixCR)# Cholesky decomposition
nvars = dim(L)[1]
set.seed(123)
rM = t(L) %*% matrix(rnorm(nvars*nobs), nrow=nvars, ncol=nobs)
rownames(rM) <- paste("V", 1:nvars, sep = "") 
colnames(rM) <- paste("O", 1:nobs, sep = "")
rM[1:10,1:10]



# introduce missing values in random places 
N <- round(nobs*nvars*0.05,0) # 5% random missing values 
set.seed(123)
inds <- round ( runif(N, 1, length(rM)) )
rM1 <- rM
rM1[inds] <- NA

나는 missForest대치에 패키지를 사용 하고 있는데, randomForest패키지에 따라 다릅니다 . 대치 할 데이터 포인트가 매우 많은 경우 병렬 컴퓨팅을 수행 할 수 있습니다.

# now use the rM1 matrix in imputation. 
require(missForest)
out.m <- missForest(rM1, maxiter = 10, ntree = 300)
# imputed 
imp.rM1 <- out.m$ximp

이것은 시뮬레이션 된 데이터 세트이므로, 대치 된 값과 도입 된 결 측값 이전의 원본을 비교하여 대치의 정확도를 추정 할 수 있습니다.

# actual values that were made missing 
aval <- rM[inds]
impv <- imp.rM1[inds]

# accuracy - defined as correlation between actual (before na introduction) and imputed values 
cor(aval,impv)
[1] 0.6759404

정확도를 높이기 위해 문제를 해결할 수 있습니다. 행운을 빕니다 !


5

데이터 대치에 대한 전체 책이 있으므로이 프레임 워크에서 답하기가 어렵습니다.

yx

y=f(x)

데이터 집합이 매우 큰 경우 빠른 알고리즘 또는 확장 가능한 알고리즘을 사용해야합니다.


고마워요, 당신은 어떤 책 제안이 있습니까?
John

특별한 것 없어. 하지만 구글 데이터
대치가 있다면

어쨌든 몇 가지 값만 누락되면 모든 줄을 제거하면됩니다. 데이터 세트에서
Donbeo

3
결 측값이있는 사례를 항상 삭제할 수 있지만 데이터가 누락 된 이유에 따라 선택이 좋지 않은 경우가 있습니다.
whuber

@ whuber 나는 당신에게 전적으로 동의하지만 많은 경우 이것이 더 안전한 선택입니다.
Donbeo

5

이것은 정말 흥미로운 질문입니다. 나는 또한 같은 것을 찾고 있습니다. 실제로, 그것을 처리하는 많은 다른 방법이 있습니다.

내 생각에 가장 먼저, 당신은 어떤 유형의 결측 데이터 (MCAR)가 완전히 누락되었거나, 무작위로 누락되거나 (MAR), 또는 무작위로 결측되지 않은 (NMAR)을 결정하는 것이다. 이것은 증명하기 어렵고 논쟁의 여지가 있지만이 논문 은 MAR 데이터를 보는 흥미로운 방법을 보여줍니다.

다중 대치를 처리하기 위해 R에는 몇 가지 패키지가 있습니다.

  • MICE (매우 사용 된 것 같습니다),
  • randomForest,
  • Hmisc
  • Amelia
  • mi

이것들은 내가 지금까지 찾은 패키지 중 몇 가지에 지나지 않습니다.

MICE 또한 예측 평균 일치와 같은 임의의 포리스트와 몇 가지 다른 방법을 구현했습니다.

이것은 많지는 않지만 몇 가지를 알아내는 데 도움이 될 수 있습니다. 결과가 나오거나 진행할 방법을 결정하자마자 게시물을 수정하겠습니다.

행운을 빕니다!


내 데이터는 MCAR입니다.
John

1
데이터가 MCAR 인 경우 완전한 사례 분석 만 사용할 수 있습니다. 많은 논문에 따르면 MCAR 데이터와 함께 완벽한 사례 분석을 사용하는 것이 최선의 해결책이라고합니다. 적어도 내가 찾은 논문 중 일부는 다른
대치

3

흥미로운 질문입니다. 이를위한 비결은 다중 대치를 수행하기 위해 예측 모델 (머신 러닝 접근 방식에서 쉽게 얻을 수있는 것) 이상의 것이 필요하다는 것입니다. 우리는이 모델들을 모델을 시뮬레이션 모델이라고 부를 것입니다. 왜냐하면 그것들은 확률 모델이 아니기 때문입니다.

p

  1. 모든 누락 패턴 식별
  2. 각 패턴에 대해 베이지안 피처 선택 방법을 사용하여 데이터의 케이스를 완성하기 위해 사후 가중치를 할당합니다.
  3. 전체 데이터 프레임을 생성하기 위해 전체 사례를 무작위로 반복 샘플링합니다.

3

당신의 문제는 일종의 낮은 순위의 매트릭스 완성을 위해 맞춤형으로 보입니다. 패키지impute.svd()기능을 사용해보십시오 . 나는 5와 같은 작은 순위 (인수 )를 사용하는 것이 좋습니다 .bcvk

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.