16.02.2026_1.ders

💭Ders Notlarım: Veri Temizleme

  • 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ü

  • Tamamen Rastlantısal (MCRandom) (MCAR)

MCAR Testi istatistiksel açıdan anlamlı değilse tamamen rastgele olmuş olur.

  • Rastgele Kayıp-MAR (Missing at Random)

Eksiğin kaynağı veri setindeki bir değişkenle ilgili (t-test, eksik verileri görselleştirerek anlama yoluna gidilebilir)

  • Rastgele Olmayan Kayıp (MNAR)/İhmal Edilemez Kayıp (en istemediğimiz)

Değişkenin doğasıyla ilgili. Okuma yeterliliği düşük olduğu için diğer sorular

  1. Eksik veriyi belirleme

  2. 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

  1. Beklenti adımı
  2. Maksimizasyon adımı

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)'))
Summary Statistics
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)
Betimsel İstatistikler
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)
Data summary
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ı")
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ı.

💫 Kayıp Veriyle Baş Etme Yöntemleri

💫 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

🧠 Öğrenme Günlüğü

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.