Bagaimana cara melakukan imputasi nilai dalam jumlah poin data yang sangat besar?


12

Saya memiliki dataset yang sangat besar dan sekitar 5% nilai acak hilang. Variabel-variabel ini berkorelasi satu sama lain. Contoh berikut dataset R hanyalah contoh mainan dengan data berkorelasi dummy.

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

Apakah ada cara (terbaik) untuk menyalahkan nilai yang hilang dalam situasi ini? Apakah algoritma Random Forest bermanfaat? Solusi kerja apa pun di R akan sangat dihargai.

Suntingan:

(1) Hilang nilai didistribusikan secara acak antara variabel dan samples.As jumlah variabel adalah sangat besar (di sini dalam contoh - 10000), sedangkan jumlah sampel kecil di sini di contoh boneka di atas itu adalah sekitar 200. Jadi, ketika kita melihat sampel apa pun dari semua variabel (10000), ada kemungkinan besar bahwa akan ada nilai yang hilang pada beberapa variabel - karena sejumlah besar variabel. Jadi hanya menghapus sampel bukan pilihan.

(2) Variabel dapat diperlakukan baik secara kuantitatif atau kualitatif (biner) dalam proses imputasi. Satu-satunya penilaian adalah seberapa baik kita dapat memperkirakannya (akurasi). Jadi prediksi seperti 0,98 bukannya 1 mungkin bisa diterima daripada 0 vs 1 atau -1 vs 1. Saya mungkin perlu tradeoff antara waktu komputasi dan akurasi.

(3) Masalah yang saya pikirkan bagaimana overfitting dapat mempengaruhi hasil karena jumlah variabel besar dibandingkan dengan jumlah sampel.

(4) Karena jumlah total nilai yang hilang adalah sekitar 5% dan acak (tidak terkonsentrasi dalam variabel atau sampel apa pun karena tindakan pencegahan diambil untuk menghapus variabel atau sampel yang memiliki nilai hilang yang sangat tinggi)

(5) Membuat data lengkap untuk analisis adalah tujuan pertama dan akurasi kedua. Jadi tidak terlalu peka terhadap keakuratan.

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
Alasan mengapa data hilang sangat bergantung pada pilihan teknik yang tepat. Misalnya, jika data hilang sepenuhnya secara acak, Anda akan kehilangan sedikit dengan menjatuhkan semua kasus dengan nilai yang hilang (karena dataset besar dan nilai yang relatif sedikit hilang); tetapi jika ketiadaan terkait dengan variabel penting dalam analisis, menjatuhkan kasus-kasus tersebut dapat menimbulkan bias.
whuber

1
@whuber Saya setuju, tidak mungkin untuk menghapus dataset sebesar ini karena setiap kasus akan memiliki nilai yang hilang setidaknya pada satu variabel. Ini akan menyebabkan total kehilangan data.
John

4
Itu mengubah pertanyaan secara substansial, John, karena dalam bentuk saat ini secara eksplisit menyatakan sebaliknya: ia menegaskan bahwa hanya 5% dari nilai yang hilang. Bahkan jika kita memahami 5% untuk diterapkan pada semua entri dalam matriks data, daripada 5% dari kasus, siapa pun yang mengambil contoh sebagai indikasi sifat data Anda akan secara sah menyimpulkan bahwa tidak lebih dari 10 * 5% = 50 % dari kasus memiliki nilai yang hilang. Tiga hal yang paling penting untuk diuraikan dalam pertanyaan-pertanyaan tersebut adalah (1) tujuan analisis, (2) sifat dari ketiadaan, dan (3) jumlah ketiadaan.
whuber

Jawaban:


8

Ada dua cara untuk menangani masalah variabel besar dan sampel kecil (pengamatan), tergantung pada situasi dan dataset Anda.

(1) cukup gunakan sampel (pengamatan) sebagai variabel asalkan skor seluruh variabel sama atau dinormalisasi.

(2) Gunakan variabel sebagai variabel tetapi lakukan beberapa pengambilan sampel secara acak sambil menghitung sehingga jumlah variabel kurang dari jumlah sampel dan akhirnya menggabungkan data.

Berikut ini adalah latihan, Anda dapat menyesuaikan dengan kebutuhan Anda. Saya memiliki asumsi variabel kontinu tetapi Anda berolahraga serupa untuk variabel diskrit. Di sini saya memberikan contoh kecil untuk pemeriksaan cepat.

Pertama, untuk latihan menghasilkan data berkorelasi, di sini pengamatan (sampel) berkorelasi, mungkin realistis dalam situasi dimana variabel diasumsikan independen sedangkan pengamatan berkorelasi. Tetapi dalam situasi lain di mana kedua observasi dan variabel berkorelasi.

# 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

Saya menggunakan missForestpaket untuk imputasi, yang tergantung pada randomForestpaket untuk melakukannya. Anda dapat melakukan komputasi paralel jika Anda memiliki jumlah besar poin data untuk menyalahkan.

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

Karena ini adalah set data yang disimulasikan, kita memiliki kemewahan memperkirakan keakuratan imputasi dengan membandingkan yang asli sebelum nilai-nilai yang hilang diperkenalkan dengan imputasi.

# 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

Anda dapat bekerja untuk meningkatkan akurasi. Semoga berhasil !


5

Ada buku lengkap tentang imputasi data sehingga sulit untuk memberikan jawaban dalam kerangka ini.

Hal termudah untuk dilakukan dalam hal ini adalah memilih salah satu kolom ( ) dan mengumpulkan yang lain dalam matriks .xyx

Model dilatih dan nilai yang hilang diganti dengan nilai yang diprediksi oleh model kami. Data Anda tampaknya kategorikal sehingga hutan acak bisa menjadi pilihan yang baik.y=f(x)

Jika dataset Anda sangat besar, pastikan untuk menggunakan algoritma cepat atau yang terukur.


terima kasih, Apakah Anda punya saran buku?
John

tidak ada yang khusus. tetapi jika Anda memasukkan data Google, Anda dapat menemukan banyak hal
Donbeo

Pokoknya jika hanya beberapa nilai yang hilang Anda bisa menghapus semua baris. Dari kumpulan data Anda
Donbeo

3
Meskipun Anda selalu dapat menghapus kasus dengan nilai yang hilang, itu kadang-kadang merupakan pilihan yang buruk, tergantung pada mengapa data tersebut hilang.
whuber

@whuber Saya sangat setuju dengan Anda tetapi seringkali ini adalah pilihan yang lebih aman.
Donbeo

5

Ini pertanyaan yang sangat menarik. Saya juga mencari hal yang sama. Sebenarnya, ada banyak cara berbeda untuk menghadapinya.

Hal pertama, menurut saya, adalah menentukan jenis data apa yang Anda miliki - hilang secara acak (MCAR), hilang secara acak (MAR), atau hilang tidak secara acak (NMAR). Ini sulit dan kontroversial untuk dibuktikan tetapi makalah ini menunjukkan cara yang menarik untuk melihat data MAR.

Untuk menangani beberapa imputasi, R memiliki beberapa paket:

  • MICE (yang tampaknya sangat digunakan),
  • randomForest,
  • Hmisc
  • Amelia
  • mi

Ini hanya beberapa paket yang saya temukan sejauh ini.

MICE juga telah menerapkan hutan acak dan beberapa metode lain, seperti pencocokan rata-rata prediktif.

Ini tidak banyak tetapi dapat membantu Anda mengetahui beberapa hal. Segera setelah saya mendapatkan hasil atau memutuskan metode mana yang akan saya gunakan, saya akan mengedit posting.

Semoga berhasil!


Data saya adalah MCAR.
John

1
Jika data Anda MCAR, Anda hanya dapat menggunakan analisis kasus lengkap. Banyak makalah melaporkan bahwa menggunakan analisis kasus lengkap dengan data MCAR adalah solusi terbaik. Setidaknya, beberapa makalah yang saya temukan melaporkan ini, bahkan ketika membandingkan dengan metode imputasi lainnya
psoares

3

Pertanyaan menarik. Trik untuk ini adalah bahwa, untuk melakukan beberapa imputasi, Anda memerlukan lebih dari sekedar model prediksi (yang bisa / akan mudah diperoleh dalam, katakanlah, pendekatan pembelajaran mesin). Kami akan menyebut model ini model simulasi, karena mereka tidak cukup model probabilitas.

Aspek gabungan dari pemilihan fitur (big ) dan pelatihan model simulasi membuat saya berpikir bahwa pendekatan Bayesian adalah yang terbaik. Itu juga berarti bahwa tidak ada pendekatan yang jelas untuk ini. Bagi saya pendekatan terbaik akan memiliki pendekatan berikut:p

  1. Identifikasi semua pola ketiadaan
  2. Untuk setiap pola, gunakan pendekatan pemilihan fitur Bayesian untuk menetapkan bobot posterior untuk menyelesaikan kasus dalam data.
  3. Sampel acak kasus lengkap secara iteratif untuk menghasilkan bingkai data lengkap.

3

Masalah Anda tampaknya dibuat khusus untuk semacam penyelesaian matriks peringkat rendah. Coba gunakan impute.svd()fungsi dari bcvpaket . Saya menyarankan menggunakan peringkat kecil (argumen k) - sekitar 5.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.