Veri dosyasının doğruluğunu inceleme: Yanlışlıkla girilmiş veriler var mı? 3-5 diye kodlayacakken 35 girilmesi.
Veri girişi doğru olmayanları düzenleme
Kayıp veri var mı?
Miktarı az ise silebiliriz. (Eğer %5’den az ise )
Kayıp veri neden olabilir?
Katılımcılar özel bir soruya cevap vermek istememiş olabilir.
Kayıpların Örüntüsü
MCAR Testi istatistiksel açıdan anlamlı değilse tamamen rastgele olmuş olur.
Eksiğin kaynağı veri setindeki bir değişkenle ilgili (t-test, eksik verileri görselleştirerek anlama yoluna gidilebilir)
Değişkenin doğasıyla ilgili. Okuma yeterliliği düşük olduğu için diğer sorular
Eksik veriyi belirleme
Eksik veriyi ne yapacağız?
Veri silinebilir, doldurma, kayıp veri atama yöntemleri, değişkenin ortalaması, medyanını atayanlar var(değişkenliği daha az azaltır), ss azalır, değişkenlik azalır (bu da test sonuçlarını değiştirebilir), çoklu atama, beklenti maksimizasyonu, listwise deletion (eksik verilerin olduğu satırları silebiliriz), değişkenlerin silinmesi, çiftler bazında silme (bu çok önerilmez çünkü örneklem araştırma problemine göre değişir, 1.araştırma probleminde olan değişkenlerdekini silebilirsin), tahmin ve atama yöntemleri, ortalama yerleştirme, regresyon ile tahmin (ortalamaya doğru kaydırır), beklenti maksimizasyonu (iteratif yolla, son yıllarda çok yaygın, bir yanlılık var dendi, sonra çoklu atama önerildi), eksik case için 5 farklı data set atıyor, default 5-10 tahne de atama yapılır-sonra bunların hepsinin sonucunu alıyor, ortalamasını alıyor.
Kayıp veri %5 den az ise sil, çok ise yöntemleri kullan (ortalama yerleştirme, regresyon, çoklu atama yöntemleri vb.)
multiple imputation; 5 analizden de alıp ortalama atıyoruz.
Not: Kategorik değişkenlerde QQ Plot bakılmaz.
Korelasyonu incelemek -> çoklu bağlantı durumu (0.80 ve üzeri ise korelasyon)
TBA(PCA) ve FA Farkı***
Gözlenen değişkenlerin altında hangi alt yapılar var.
Faktör çıkarma; gözlenen değişkenlerden -bir araya getirip bütüncül bir indeks-yeni bir değişken oluşturma. SED, zorbalıkla ilgili indeks vb.
Faktör analizi -> varyans ayrıştırmayı hedefler
Temel bileşenler analizi (principle component analysis)-> varyans birleştirmeyi hedefler
Model Tabanlı Yöntemler
Beklenti Maksimizasyonu
Parametre tahminleri yakınsayana kadar tekrarlanır. impute_EM (doldurma)
Çok değişkenli normal dağılıma sahipse EM algoritması, genelde veriler çok değişkenli normal dağılıma sahip değil. O sebeple çoklu atamaya bakalım. Kayıp veri için birden fazla tahminle analizler tekrarlandığı için güvenirlik artar. Sürekli ve kategorik verilerde kullanabiliyoruz.
Birleştirme (pooling)
mice paketini kullanıyoruz.
md.pattern () -> eksik değişkenleri görselleştirir.
Hangi değişkenlerde ne kadar kayıp veri var?
Farklı metodlar var. pmm, logreg, polyreg, polr vb. her sütun için de başka yöntem olabilir.
pool () -> analiz sonuçlarını birleştirir.
with () -> her bir tamamlanmış veri için analiz yapar.
complete (imputed_data, 1) -> her bir data setini oluşturur.
Farklı türdeki değişkenler için farklı fonksiyonlar
atthouse değişkeninde bir kayıp veri var, direkt silebiliriz, liste bazında.
En basit değer atama yöntemi ortalama atamadır.
💫 Veri aktarımı
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(haven)
screen <- read_sav("SCREEN.sav")
head(screen)
## # A tibble: 6 × 8
## SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME EMPLMNT MSTATUS RACE
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl+lbl> <dbl> <dbl>
## 1 1 1 8 27 5 1 [HOUSEWFE] 2 1
## 2 2 3 7 20 6 0 [PAIDWORK] 2 1
## 3 3 0 8 23 3 0 [PAIDWORK] 2 1
## 4 4 13 9 28 8 1 [HOUSEWFE] 2 1
## 5 5 15 7 24 1 1 [HOUSEWFE] 2 1
## 6 6 3 8 25 4 0 [PAIDWORK] 2 1
Burada NA’lar ve uç veriler:
summary(screen)
## SUBNO TIMEDRS ATTDRUG ATTHOUSE
## Min. : 1.0 Min. : 0.000 Min. : 5.000 Min. : 2.00
## 1st Qu.:137.0 1st Qu.: 2.000 1st Qu.: 7.000 1st Qu.:21.00
## Median :314.0 Median : 4.000 Median : 8.000 Median :24.00
## Mean :317.4 Mean : 7.901 Mean : 7.686 Mean :23.54
## 3rd Qu.:483.0 3rd Qu.:10.000 3rd Qu.: 9.000 3rd Qu.:27.00
## Max. :758.0 Max. :81.000 Max. :10.000 Max. :35.00
## NA's :1
## INCOME EMPLMNT MSTATUS RACE
## Min. : 1.00 Min. :0.000 Min. :1.000 Min. :1.000
## 1st Qu.: 2.50 1st Qu.:0.000 1st Qu.:2.000 1st Qu.:1.000
## Median : 4.00 Median :0.000 Median :2.000 Median :1.000
## Mean : 4.21 Mean :0.471 Mean :1.778 Mean :1.088
## 3rd Qu.: 6.00 3rd Qu.:1.000 3rd Qu.:2.000 3rd Qu.:1.000
## Max. :10.00 Max. :1.000 Max. :2.000 Max. :2.000
## NA's :26
library(psych)
describe(screen[,-1])
## vars n mean sd median trimmed mad min max range skew kurtosis
## TIMEDRS 1 465 7.90 10.95 4 5.61 4.45 0 81 81 3.23 12.88
## ATTDRUG 2 465 7.69 1.16 8 7.71 1.48 5 10 5 -0.12 -0.47
## ATTHOUSE 3 464 23.54 4.48 24 23.62 4.45 2 35 33 -0.45 1.51
## INCOME 4 439 4.21 2.42 4 4.01 2.97 1 10 9 0.58 -0.38
## EMPLMNT 5 465 0.47 0.50 0 0.46 0.00 0 1 1 0.12 -1.99
## MSTATUS 6 465 1.78 0.42 2 1.85 0.00 1 2 1 -1.34 -0.21
## RACE 7 465 1.09 0.28 1 1.00 0.00 1 2 1 2.90 6.40
## se
## TIMEDRS 0.51
## ATTDRUG 0.05
## ATTHOUSE 0.21
## INCOME 0.12
## EMPLMNT 0.02
## MSTATUS 0.02
## RACE 0.01
library(gtsummary)
screen %>%
select(2:6) %>%
tbl_summary(
statistic = all_continuous() ~ c("{min}, {max}"),
missing = "always"
)
## ! Column(s) "EMPLMNT" are class "haven_labelled".
## ℹ This is an intermediate data structure not meant for analysis.
## ℹ Convert columns with `haven::as_factor()`, `labelled::to_factor()`,
## `labelled::unlabelled()`, and `unclass()`. Failure to convert may have
## unintended consequences or result in error.
## <https://haven.tidyverse.org/articles/semantics.html>
## <https://larmarange.github.io/labelled/articles/intro_labelled.html#unlabelled>
| Characteristic | N = 4651 |
|---|---|
| Visits to health professionals | 0, 81 |
| Unknown | 0 |
| Attitudes toward medication | |
| 5 | 13 (2.8%) |
| 6 | 60 (13%) |
| 7 | 126 (27%) |
| 8 | 149 (32%) |
| 9 | 95 (20%) |
| 10 | 22 (4.7%) |
| Unknown | 0 |
| Attitudes toward housework | 2.0, 35.0 |
| Unknown | 1 |
| INCOME | 1.00, 10.00 |
| Unknown | 26 |
| Whether currently employed | |
| 0 | 246 (53%) |
| 1 | 219 (47%) |
| Unknown | 0 |
| 1 Min, Max; n (%) | |
library(vtable)
## Zorunlu paket yükleniyor: kableExtra
##
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
sumtable(screen, summ=c('notNA(x)','min(x)','max(x)'))
| Variable | NotNA | Min | Max |
|---|---|---|---|
| SUBNO | 465 | 1 | 758 |
| TIMEDRS | 465 | 0 | 81 |
| ATTDRUG | 465 | 5 | 10 |
| ATTHOUSE | 464 | 2 | 35 |
| INCOME | 439 | 1 | 10 |
| MSTATUS | 465 | 1 | 2 |
| RACE | 465 | 1 | 2 |
kable(describe(screen[,-1]), format='markdown', caption="Betimsel İstatistikler", digits=2)
| vars | n | mean | sd | median | trimmed | mad | min | max | range | skew | kurtosis | se | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TIMEDRS | 1 | 465 | 7.90 | 10.95 | 4 | 5.61 | 4.45 | 0 | 81 | 81 | 3.23 | 12.88 | 0.51 |
| ATTDRUG | 2 | 465 | 7.69 | 1.16 | 8 | 7.71 | 1.48 | 5 | 10 | 5 | -0.12 | -0.47 | 0.05 |
| ATTHOUSE | 3 | 464 | 23.54 | 4.48 | 24 | 23.62 | 4.45 | 2 | 35 | 33 | -0.45 | 1.51 | 0.21 |
| INCOME | 4 | 439 | 4.21 | 2.42 | 4 | 4.01 | 2.97 | 1 | 10 | 9 | 0.58 | -0.38 | 0.12 |
| EMPLMNT | 5 | 465 | 0.47 | 0.50 | 0 | 0.46 | 0.00 | 0 | 1 | 1 | 0.12 | -1.99 | 0.02 |
| MSTATUS | 6 | 465 | 1.78 | 0.42 | 2 | 1.85 | 0.00 | 1 | 2 | 1 | -1.34 | -0.21 | 0.02 |
| RACE | 7 | 465 | 1.09 | 0.28 | 1 | 1.00 | 0.00 | 1 | 2 | 1 | 2.90 | 6.40 | 0.01 |
library(skimr)
skim(screen)
| Name | screen |
| Number of rows | 465 |
| Number of columns | 8 |
| _______________________ | |
| Column type frequency: | |
| numeric | 8 |
| ________________________ | |
| Group variables | None |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| SUBNO | 0 | 1.00 | 317.38 | 194.16 | 1 | 137.0 | 314 | 483 | 758 | ▇▆▆▇▁ |
| TIMEDRS | 0 | 1.00 | 7.90 | 10.95 | 0 | 2.0 | 4 | 10 | 81 | ▇▁▁▁▁ |
| ATTDRUG | 0 | 1.00 | 7.69 | 1.16 | 5 | 7.0 | 8 | 9 | 10 | ▃▇▇▅▁ |
| ATTHOUSE | 1 | 1.00 | 23.54 | 4.48 | 2 | 21.0 | 24 | 27 | 35 | ▁▁▅▇▂ |
| INCOME | 26 | 0.94 | 4.21 | 2.42 | 1 | 2.5 | 4 | 6 | 10 | ▆▇▅▃▂ |
| EMPLMNT | 0 | 1.00 | 0.47 | 0.50 | 0 | 0.0 | 0 | 1 | 1 | ▇▁▁▁▇ |
| MSTATUS | 0 | 1.00 | 1.78 | 0.42 | 1 | 2.0 | 2 | 2 | 2 | ▂▁▁▁▇ |
| RACE | 0 | 1.00 | 1.09 | 0.28 | 1 | 1.0 | 1 | 1 | 2 | ▇▁▁▁▁ |
library(DataExplorer)
create_report(screen)
##
##
## processing file: report.rmd
## | | | 0% | |. | 2% | |.. | 5% [global_options] | |... | 7% | |.... | 10% [introduce] | |.... | 12% | |..... | 14% [plot_intro]
## | |...... | 17% | |....... | 19% [data_structure] | |........ | 21% | |......... | 24% [missing_profile]
## | |.......... | 26% | |........... | 29% [univariate_distribution_header] | |........... | 31% | |............ | 33% [plot_histogram]
## | |............. | 36% | |.............. | 38% [plot_density] | |............... | 40% | |................ | 43% [plot_frequency_bar] | |................. | 45% | |.................. | 48% [plot_response_bar] | |.................. | 50% | |................... | 52% [plot_with_bar] | |.................... | 55% | |..................... | 57% [plot_normal_qq]
## | |...................... | 60% | |....................... | 62% [plot_response_qq] | |........................ | 64% | |......................... | 67% [plot_by_qq] | |.......................... | 69% | |.......................... | 71% [correlation_analysis]
## | |........................... | 74% | |............................ | 76% [principal_component_analysis]
## | |............................. | 79% | |.............................. | 81% [bivariate_distribution_header] | |............................... | 83% | |................................ | 86% [plot_response_boxplot] | |................................. | 88% | |................................. | 90% [plot_by_boxplot] | |.................................. | 93% | |................................... | 95% [plot_response_scatterplot] | |.................................... | 98% | |.....................................| 100% [plot_by_scatterplot]
## output file: C:/Users/ibrahim/Desktop/OLC733/report.knit.md
## "C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools/pandoc" +RTS -K512m -RTS "C:\Users\ibrahim\Desktop\OLC733\report.knit.md" --to html4 --from markdown+autolink_bare_uris+tex_math_single_backslash --output pandoc10bb06f617bc7.html --lua-filter "C:\Users\ibrahim\AppData\Local\R\win-library\4.5\rmarkdown\rmarkdown\lua\pagebreak.lua" --lua-filter "C:\Users\ibrahim\AppData\Local\R\win-library\4.5\rmarkdown\rmarkdown\lua\latex-div.lua" --lua-filter "C:\Users\ibrahim\AppData\Local\R\win-library\4.5\rmarkdown\rmarkdown\lua\table-classes.lua" --embed-resources --standalone --variable bs3=TRUE --section-divs --table-of-contents --toc-depth 6 --template "C:\Users\ibrahim\AppData\Local\R\win-library\4.5\rmarkdown\rmd\h\default.html" --no-highlight --variable highlightjs=1 --variable theme=yeti --mathjax --variable "mathjax-url=https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" --include-in-header "C:\Users\ibrahim\AppData\Local\Temp\Rtmpwvvq53\rmarkdown-str10bb05f02e09.html"
##
## Output created: report.html
library(funModeling)
## Zorunlu paket yükleniyor: Hmisc
##
## Attaching package: 'Hmisc'
## The following object is masked from 'package:psych':
##
## describe
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
## funModeling v.1.9.5 :)
## Examples and tutorials at livebook.datascienceheroes.com
## / Now in Spanish: librovivodecienciadedatos.ai
df_status(screen)
## variable q_zeros p_zeros q_na p_na q_inf p_inf
## 1 SUBNO 0 0.00 0 0.00 0 0
## 2 TIMEDRS 42 9.03 0 0.00 0 0
## 3 ATTDRUG 0 0.00 0 0.00 0 0
## 4 ATTHOUSE 0 0.00 1 0.22 0 0
## 5 INCOME 0 0.00 26 5.59 0 0
## 6 EMPLMNT 246 52.90 0 0.00 0 0
## 7 MSTATUS 0 0.00 0 0.00 0 0
## 8 RACE 0 0.00 0 0.00 0 0
## type unique
## 1 numeric 465
## 2 numeric 43
## 3 numeric 6
## 4 numeric 26
## 5 numeric 10
## 6 haven_labelled-vctrs_vctr-double 2
## 7 numeric 2
## 8 numeric 2
💫 Kayıp veri ile başa çıkmak için neler yapıyoruz?
screen <- read_sav("SCREEN.sav")
screen <- expss::drop_var_labs(screen)
## Registered S3 methods overwritten by 'expss':
## method from
## [.labelled Hmisc
## as.data.frame.labelled base
## print.labelled Hmisc
library(naniar)
##
## Attaching package: 'naniar'
## The following object is masked from 'package:skimr':
##
## n_complete
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
Her bir sutünda eksik veri var mı ona bakıyoruz.
any_na(screen)
## [1] TRUE
n_miss(screen)
## [1] 27
Eksik veri oranını söylüyor. (prop_miss)
prop_miss(screen)
## [1] 0.007258065
Her bir değişkendeki kayıp veri oranına bakıyoruz.
screen %>% is.na() %>% colSums()
## SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME EMPLMNT MSTATUS RACE
## 0 0 0 1 26 0 0 0
screen %>% is.na() %>% rowSums()
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0
## [75] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [112] 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
## [149] 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0
## [186] 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [223] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0
## [260] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [297] 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
## [334] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [371] 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [408] 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
## [445] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
miss_var_summary(screen)
## # A tibble: 8 × 3
## variable n_miss pct_miss
## <chr> <int> <num>
## 1 INCOME 26 5.59
## 2 ATTHOUSE 1 0.215
## 3 SUBNO 0 0
## 4 TIMEDRS 0 0
## 5 ATTDRUG 0 0
## 6 EMPLMNT 0 0
## 7 MSTATUS 0 0
## 8 RACE 0 0
miss_var_table(screen)
## # A tibble: 3 × 3
## n_miss_in_var n_vars pct_vars
## <int> <int> <dbl>
## 1 0 6 75
## 2 1 1 12.5
## 3 26 1 12.5
26 eksik verisi olan 1 değişken var o da yüzde 12.5’i oluşturuyor.
miss_case_table(screen)
## # A tibble: 2 × 3
## n_miss_in_case n_cases pct_cases
## <int> <int> <dbl>
## 1 0 438 94.2
## 2 1 27 5.81
library(rlang)
##
## Attaching package: 'rlang'
## The following object is masked from 'package:data.table':
##
## :=
library(ggplot2)
library(UpSetR)
library(naniar)
gg_miss_upset(screen)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the UpSetR package.
## Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## ℹ The deprecated feature was likely used in the UpSetR package.
## Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
vis_miss(screen) + theme(axis.text.x = element_text(angle=80))
library(naniar)
mcar_test(data=screen[,c(2,3,4,5,7,8)])
## # A tibble: 1 × 4
## statistic df p.value missing.patterns
## <dbl> <dbl> <dbl> <int>
## 1 18.7 10 0.0440 3
Anlamlı bir şekilde missing örüntüsü 3 tane, kayıp verim rastgele değil. O zaman ne ile ilişkili, veri kaybı diğer değişkenlerle ilişkili mi?
screen2 <- screen
screen2$INCOME_m <- screen2$INCOME
library(finalfit)
explanatory = c("TIMEDRS", "ATTDRUG", "ATTHOUSE")
dependent = "INCOME_m"
screen2 %>%
missing_compare(dependent, explanatory) %>%
knitr::kable(row.names=FALSE, align = c("l", "l", "r", "r", "r"),
caption = "Eksik veriye sahip olan ve olmayan değişkenlerin ortalama karşılaştırması")
| Missing data analysis: INCOME_m | Not missing | Missing | p | |
|---|---|---|---|---|
| TIMEDRS | Mean (SD) | 7.9 (11.1) | 7.6 (7.4) | 0.891 |
| ATTDRUG | Mean (SD) | 7.7 (1.2) | 7.9 (1.0) | 0.368 |
| ATTHOUSE | Mean (SD) | 23.5 (4.5) | 23.7 (4.2) | 0.860 |
library(dplyr)
miss_test <- screen2 %>%mutate(miss_income = is.na(INCOME))
# income değişkeninde eksik verisi olmayanlar
ATTHOUSE_nonna <- miss_test %>% filter(miss_income == FALSE) %>%
pull(ATTHOUSE)
# income değişkeninde eksik verisi olanlar
ATTHOUSE_na <- miss_test %>% filter(miss_income == TRUE) %>%
pull(ATTHOUSE)
#c Oran
t.test(ATTHOUSE_nonna, ATTHOUSE_na)
##
## Welch Two Sample t-test
##
## data: ATTHOUSE_nonna and ATTHOUSE_na
## t = -0.18904, df = 28.553, p-value = 0.8514
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -1.896325 1.575636
## sample estimates:
## mean of x mean of y
## 23.53196 23.69231
Fakat bu değişkenlerle ilgili çıkmadı.
💫 Veri silmeye dayalı yöntemler
na.omit(screen)
## # A tibble: 438 × 8
## SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME EMPLMNT MSTATUS RACE
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 1 8 27 5 1 2 1
## 2 2 3 7 20 6 0 2 1
## 3 3 0 8 23 3 0 2 1
## 4 4 13 9 28 8 1 2 1
## 5 5 15 7 24 1 1 2 1
## 6 6 3 8 25 4 0 2 1
## 7 7 2 7 30 6 1 2 1
## 8 8 0 7 24 6 1 2 1
## 9 9 7 7 20 2 1 2 1
## 10 10 4 8 30 8 0 1 1
## # ℹ 428 more rows
Tamamen dolu gözlemlerle analiz yapmak.
Çiftler bazında silme çok önerilmiyor. Bir ara popülermiş.
INCOME=26 eksik veri var. İstersek direkt ortalama atayabiliriz.
screen3 <- screen
screen3$INCOME[is.na(screen3$INCOME)] <- mean(screen3$INCOME, na.rm=TRUE)
summary(screen3$INCOME)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.00 3.00 4.00 4.21 6.00 10.00
sd(screen$INCOME,na.rm=TRUE)
## [1] 2.418875
sd(screen3$INCOME)
## [1] 2.350128
#screen4 <- screen[,2:5]
#for(i in 1:ncol(screen4)){
# screen4[ , i][is.na(screen4[ , i])] <- mean(screen4[ , i], na.rm = TRUE)
#}
#any_na(screen4)
#library(mvdalab)
#dat <- introNAs(iris, percent = 25)
#dat_EM <- imputeEM(dat)
#dat_EM
#library(mvdalab)
#imputeEM(data, impute.ncomps = 2, pca.ncomps = 2, CV = TRUE, Init = "mean",
# scale = TRUE, iters = 25, tol = .Machine$double.eps^0.25)
Temel bileşenler analizini kullanır. Eksik verisi olmayanlardan analiz yapıyor. Buna dayalı olarak grafikte verir. Atama sonucu oluşan bileşen sayısı arttıkça PRESS değeri düşer.
Overfitting*
impute.ncomps: test edilecek minimum değişken sayısı
değişken sayısını arttırırsak aşırı yaparsak overfittinge sebep olabilir.
Sürekli değişkenler için;
Scale=TRUE ise ss=1 olarak yeniden ölçeklendirilir.
iters= kaç iterasyon tol=yakınsama değeri ile ilgili eşik değer
library(missMethods)
##
## Attaching package: 'missMethods'
## The following objects are masked from 'package:naniar':
##
## impute_mean, impute_median, impute_mode
library(mvtnorm)
# Örnek veri seti oluşturma
ds_orig <- mvtnorm::rmvnorm(100, rep(0, 7)) # 7 değişkenli normal dağılım
ds_mis <- delete_MCAR(ds_orig, p = 0.2) # %20 eksik veri (MCAR)
# EM ile eksik verileri doldurma (stokastik olmadan)
ds_imp <- impute_EM(ds_mis, stochastic = FALSE)
# EM ile eksik verileri doldurma (stokastik olarak)
ds_imp_stochastic <- impute_EM(ds_mis, stochastic = TRUE)
library(mice)
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
md.pattern(screen)
## SUBNO TIMEDRS ATTDRUG EMPLMNT MSTATUS RACE ATTHOUSE INCOME
## 438 1 1 1 1 1 1 1 1 0
## 26 1 1 1 1 1 1 1 0 1
## 1 1 1 1 1 1 1 0 1 1
## 0 0 0 0 0 0 1 26 27
Kayıp veri meselesi veri analizinde karşımıza çıkan temel problemlerden biridir. Bu sebeple bunları bu ders kapsamında öğrenebildiğim için kendimi şanslı hissediyorum. Ama çeşitli veriler üzerinden biraz daha pratik yapmam gerekiyor.