Eksik veri inceleme Bu ödevde, TIMSS 2015 uygulamasına ait bir kitapçığın Türkiye ve Amerika verilerini kullanacaksınız.

Veri seti adı: “TRUSA.RDS”. Bu veri setini R ortamına aktarınız.

Veri setinde eksik veri olup olmadığını kontrol ediniz.

Kitapçıktaki 35 maddenin toplamını hesaplayarak veri setine yeni bir sütun olarak ekleyiniz.

Toplam puanın her iki ülkeye göre betimsel istatistiklerini hesaplayınız.

Toplam puanın, Türkiye ve ABD örneklemlerinde farklılaşıp farklılaşmadığını t testi ile test ediniz.

Veri setinde %5, %10 ve %15 oranında eksik veriler oluşturunuz.

Oluşturulan eksik veri setlerinde önce eksik verinin rastgele olup olmadığını test ediniz. Ardından, liste bazında silme yöntemiyle eksik verileri temizleyerek e seçeneğinde gerçekleştirdiğiniz t testini tekrarlayınız. Tam veri ile elde edilen sonuçlarla karşılaştırınız.

f seçeneğinde oluşturulan veri setlerindeki eksik verileri, belirlediğiniz bir kayıp veri atama yöntemiyle doldurunuz. Daha sonra, e seçeneğinde gerçekleştirdiğiniz t testini tekrar ediniz ve tam veri ile elde edilen sonuçlarla karşılaştırınız.

Eksik veri oranının uygulanan yöntemlerin performansına etkisini açıklayınız.

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Including Plots

You can also embed plots, for example:

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.

a. Data tanımlama

TRUSA <- readRDS("TRUSA.RDS")

b. Kayıp veri kontrol

library(naniar)
miss_var_table(TRUSA)
## # A tibble: 1 × 3
##   n_miss_in_var n_vars pct_vars
##           <int>  <int>    <dbl>
## 1             0     38      100

c. Toplam puan hesaplama

SUM <- TRUSA %>% dplyr :: select(starts_with("M")) %>% rowSums()
TRUSA$SUM <- SUM

d. toplam puanın betimsel istatistikleri

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(psych)
describe.by(TRUSA$SUM, TRUSA$CNT)
## Warning in describe.by(TRUSA$SUM, TRUSA$CNT): describe.by is deprecated.
## Please use the describeBy function
## 
##  Descriptive statistics by group 
## group: TUR
##    vars   n  mean   sd median trimmed  mad min max range skew kurtosis   se
## X1    1 435 13.45 7.57     11   12.74 7.41   2  32    30 0.71    -0.61 0.36
## ------------------------------------------------------------ 
## group: USA
##    vars   n  mean   sd median trimmed mad min max range skew kurtosis   se
## X1    1 716 17.05 7.53     17   16.92 8.9   1  34    33  0.1     -0.9 0.28

e. Bağımsız örneklem t testi

library(effsize) # effect size hesaplamak için
## 
## Attaching package: 'effsize'
## The following object is masked from 'package:psych':
## 
##     cohen.d
t_test_result <- t.test(SUM~CNT, data=TRUSA,var.equal = TRUE)
print(t_test_result)
## 
##  Two Sample t-test
## 
## data:  SUM by CNT
## t = -7.8348, df = 1149, p-value = 1.064e-14
## alternative hypothesis: true difference in means between group TUR and group USA is not equal to 0
## 95 percent confidence interval:
##  -4.493049 -2.693382
## sample estimates:
## mean in group TUR mean in group USA 
##          13.45287          17.04609

# Cohen d hesaplama

cohen_d_result <- effsize::cohen.d(TRUSA$SUM[TRUSA$CNT == "TUR"],
                          TRUSA$SUM[TRUSA$CNT == "USA"],
                          pooled = TRUE)
print(cohen_d_result)
## 
## Cohen's d
## 
## d estimate: -0.4762813 (small)
## 95 percent confidence interval:
##      lower      upper 
## -0.5971341 -0.3554285

f. veri setinde % eksik veri oluşturma

library(mvdalab)   # introNas fonksiyonu rastgele eksik veri oluşturuyor
## 
## Attaching package: 'mvdalab'
## The following object is masked from 'package:psych':
## 
##     smc
TRUSA_5 <- introNAs(TRUSA, percent = 5)
TRUSA_10 <- introNAs(TRUSA, percent = 10)
TRUSA_15 <- introNAs(TRUSA, percent = 15)

TRUSA_5 %>% is.na() %>% colSums()
##   IDSTUD   IDBOOK  M042182  M042081  M042049  M042052  M042076 M042302A 
##       39       62       43       62       55       67       50       73 
## M042302B M042302C  M042100  M042202  M042240  M042093  M042271  M042268 
##       61       60       55       49       53       59       59       49 
##  M042159  M042164  M042167  M062208 M062208A M062208B M062208C M062208D 
##       62       58       67       52       43       66       68       54 
##  M062153 M062111A M062111B  M062237  M062314  M062074  M062183  M062202 
##       55       62       58       64       50       56       56       62 
##  M062246  M062286  M062325  M062106  M062124      CNT      SUM 
##       53       61       70       61       56       62       52
TRUSA_10 %>% is.na() %>% colSums()
##   IDSTUD   IDBOOK  M042182  M042081  M042049  M042052  M042076 M042302A 
##      116      119      109      114      127      134      107      123 
## M042302B M042302C  M042100  M042202  M042240  M042093  M042271  M042268 
##      122      130      127      106      119      107       96      110 
##  M042159  M042164  M042167  M062208 M062208A M062208B M062208C M062208D 
##      126      103      114      119      121      119      127      109 
##  M062153 M062111A M062111B  M062237  M062314  M062074  M062183  M062202 
##      118      111      117      118      109      113      115       95 
##  M062246  M062286  M062325  M062106  M062124      CNT      SUM 
##      111      119      119      123       92      113      112
TRUSA_15 %>% is.na() %>% colSums()
##   IDSTUD   IDBOOK  M042182  M042081  M042049  M042052  M042076 M042302A 
##      157      182      188      183      151      153      170      180 
## M042302B M042302C  M042100  M042202  M042240  M042093  M042271  M042268 
##      175      162      165      175      174      170      178      164 
##  M042159  M042164  M042167  M062208 M062208A M062208B M062208C M062208D 
##      196      171      182      184      163      193      165      182 
##  M062153 M062111A M062111B  M062237  M062314  M062074  M062183  M062202 
##      182      162      175      172      177      169      173      181 
##  M062246  M062286  M062325  M062106  M062124      CNT      SUM 
##      166      163      190      164      178      162      156

g. Bağımsız Örneklem T testi

TRUSA_5_lw <- na.omit(TRUSA_5)
TRUSA_10_lw <- na.omit(TRUSA_10)
TRUSA_15_lw <- na.omit(TRUSA_15)

# h. Çoklu atama (çok fazla eksik veri olduğunda)

maxit: iterasyon sayısı logreg: iki kategorili değişken için polireg: ordinal değişken ise seed: doldurma için hep aynı değer olması için

#library(mice) #TRUSA_5_im1 <- mice(TRUSA_5[,2:36],m=5,maxit = 50, method = ‘logreg’, seed=500) #TRUSA_10_im1 <- mice(TRUSA_10[,2:36],m=5, maxit=50, method=‘logreg’,seed=500) #TRUSA_15_im1 <- mice(TRUSA_15[,2:36],m=5, maxit = 50, method=‘logreg’,seed=500)

#completed_data_1 <- complete(TRUSA_5_im1, 1) #completed_data_2 <- complete(TRUSA_5_im1,2) #completed_data_3 <- complete(TRUSA_5_im1,3) #completed_data_4 <- complete(TRUSA_5_im1, 4) #completed_data_5 <- complete(TRUSA_5_im1, 5)

#t_test_result_1 <- t.test(SUM~CNT, data=completed_data_1, var.equal=TRUE)

Not: analizi yaptım ancak CNT bulunmadı dediği için devam edemedim.

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ readr     2.1.6
## ✔ ggplot2   4.0.2     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.0
## ✔ purrr     1.2.0     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::%+%()   masks psych::%+%()
## ✖ ggplot2::alpha() masks psych::alpha()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stevemisc)
## 
## Attaching package: 'stevemisc'
## 
## The following object is masked from 'package:lubridate':
## 
##     dst
## 
## The following object is masked from 'package:dplyr':
## 
##     tbl_df
library(haven)
library(outliers)
## 
## Attaching package: 'outliers'
## 
## The following object is masked from 'package:psych':
## 
##     outlier
library(ggplot2)
library(plotly)
## 
## Attaching package: 'plotly'
## 
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## 
## The following object is masked from 'package:stats':
## 
##     filter
## 
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggpmisc)
## Loading required package: ggpp
## Registered S3 methods overwritten by 'ggpp':
##   method                  from   
##   heightDetails.titleGrob ggplot2
##   widthDetails.titleGrob  ggplot2
## 
## Attaching package: 'ggpp'
## 
## The following object is masked from 'package:ggplot2':
## 
##     annotate
library(psych)
library(sur)
## 
## Attaching package: 'sur'
## 
## The following object is masked from 'package:psych':
## 
##     skew
library(moments)
library(corrplot)
## corrplot 0.95 loaded
library(olsrr)
## 
## Attaching package: 'olsrr'
## 
## The following object is masked from 'package:datasets':
## 
##     rivers

h. NORMALLİK

library(dplyr)
library(haven) # SPSS dosyalarını R ortamına aktarmak için haven paketini kullanıLIR.
screen <- read_sav("SCREEN.sav")
screen <- expss::drop_var_labs(screen) #verilerdeki etiketleri silmek için kullanıyoruz(1 kadın 2 erkek gibi etiketler)
head(screen) # Veri setinin ilk birkaç satırını görüntülemek için kullanılır.
## # A tibble: 6 × 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

ı. EKSİK VERİ DÜZENLEME

screen <- screen %>% 
mutate(INCOME = ifelse(is.na(INCOME), mean(INCOME, na.rm =TRUE),INCOME)) %>% na.omit()
summary(screen)
##      SUBNO          TIMEDRS          ATTDRUG         ATTHOUSE    
##  Min.   :  1.0   Min.   : 0.000   Min.   : 5.00   Min.   : 2.00  
##  1st Qu.:136.8   1st Qu.: 2.000   1st Qu.: 7.00   1st Qu.:21.00  
##  Median :313.5   Median : 4.000   Median : 8.00   Median :24.00  
##  Mean   :317.3   Mean   : 7.914   Mean   : 7.69   Mean   :23.54  
##  3rd Qu.:483.2   3rd Qu.:10.000   3rd Qu.: 9.00   3rd Qu.:27.00  
##  Max.   :758.0   Max.   :81.000   Max.   :10.00   Max.   :35.00  
##      INCOME          EMPLMNT         MSTATUS          RACE      
##  Min.   : 1.000   Min.   :0.000   Min.   :1.00   Min.   :1.000  
##  1st Qu.: 3.000   1st Qu.:0.000   1st Qu.:2.00   1st Qu.:1.000  
##  Median : 4.000   Median :0.000   Median :2.00   Median :1.000  
##  Mean   : 4.208   Mean   :0.472   Mean   :1.78   Mean   :1.086  
##  3rd Qu.: 6.000   3rd Qu.:1.000   3rd Qu.:2.00   3rd Qu.:1.000  
##  Max.   :10.000   Max.   :1.000   Max.   :2.00   Max.   :2.000

j.KATEGORİK DEĞİŞKENLER İÇİN UÇ DEĞER

library(dplyr)
table(screen$RACE)
## 
##   1   2 
## 424  40
library(summarytools)
## 
## Attaching package: 'summarytools'
## The following object is masked from 'package:tibble':
## 
##     view
freq(screen$RACE, 
     round.digits=2,report.nas = FALSE,
 style = "rmarkdown") 
## setting plain.ascii to FALSE
## ### Frequencies  
## #### screen$RACE  
## **Type:** Numeric  
## 
## |    &nbsp; | Freq |      % | % Cum. |
## |----------:|-----:|-------:|-------:|
## |     **1** |  424 |  91.38 |  91.38 |
## |     **2** |   40 |   8.62 | 100.00 |
## | **Total** |  464 | 100.00 | 100.00 |

NOT: Tablo incelendiğinde gruplar arasında % 91 e % 8 gibi bir oran var. bu oran yorumlamak için doğru değil.

NOT!!!! summarytools paketi incele

library(knitr)
freq(screen$MSTATUS,report.nas = FALSE) %>%
  kable(format='markdown', 
      caption="Frekans Tablosu",digits = 2)
Frekans Tablosu
Freq % Valid % Valid Cum. % Total % Total Cum.
1 102 21.98 21.98 21.98 21.98
2 362 78.02 100.00 78.02 100.00
0 NA NA 0.00 100.00
Total 464 100.00 100.00 100.00 100.00

NOT: Tablodaki yüzdeler incelendiğinde 21 e 78 olduğu görülüp kabul edilebilir düzeydedir. Ancak yinede evrendeki orana da bakmak gerekir. Yani kategorik değişkenlerde uç değer olup olmadığını anlamak için kategorilerdeki frekans tablolarındaki oaranlara bakılır.

SÜREKLİ DEĞİŞKENLERDE UÇ DEĞER NOT: sürekli değişkenlerde uç değer bakılırken en basiti ve iyisi Z puanına çevirmek. Tek değişkenli uç değerler çok büyük z puanına sahip olurlar.

Z puanı scores () fonksiyonu ile hesaplanabilir.

library(outliers)
z.scores <- screen %>%  
 select(2:5) %>% 
 scores(type = "z") %>%
 round(2) #iki ondalıkta vermesi için
head(z.scores)
##   TIMEDRS ATTDRUG ATTHOUSE INCOME
## 1   -0.63    0.27     0.77   0.34
## 2   -0.45   -0.60    -0.79   0.76
## 3   -0.72    0.27    -0.12  -0.51
## 4    0.46    1.13     0.99   1.61
## 5    0.65   -0.60     0.10  -1.36
## 6   -0.45    0.27     0.33  -0.09

summarytools paketinde descr() fonksiyonu ile z değerlerinin minimum ve maksimum değerleri incelenebilir.

summarytools::descr(z.scores,
 stats     = c("min", "max"),
 transpose = TRUE,
 headings  = FALSE)
## 
##                    Min    Max
## -------------- ------- ------
##        ATTDRUG   -2.33   2.00
##       ATTHOUSE   -4.80   2.56
##         INCOME   -1.36   2.46
##        TIMEDRS   -0.72   6.67
library(DT) #interaktif tablo yapmayı sağlar

DT::datatable(z.scores)
library(ggplot2)
ggplot(screen, aes(x = TIMEDRS)) +
  geom_histogram(bins = 30L, fill = "#0c4c8a")

# library(ggpmisc)
ggplot(screen, aes(x = TIMEDRS)) + geom_histogram() + 
geom_vline(xintercept =7.914, color = "red", 
linetype = "dashed") +    # geom_vline fonk ile ortalama yazdırılır.
annotate("text", label = "Ort = 7.913", x = 10, y = 100,  color ="black")
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

  ggplot(screen, aes(x = TIMEDRS)) +
 geom_histogram(aes(y=..density..))+
 geom_density(alpha=.5, fill="#0c4c8a") +
  theme_minimal()
## Warning: The dot-dot notation (`..density..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(density)` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `stat_bin()` using `bins = 30`. Pick better value `binwidth`.

library(plotly)
plot_ly(x = screen$TIMEDRS,  type = "histogram", 
histnorm = "probability")
ggplot(screen, aes(y = TIMEDRS)) + 
  geom_boxplot() 

out <- boxplot.stats(screen$TIMEDRS)$out
out
##  [1] 60 23 39 33 38 34 27 30 25 49 60 27 27 52 24 57 52 58 57 43 37 75 29 30 25
## [26] 37 56 29 37 81 27 23
out_ind <- which(screen$TIMEDRS %in% c(out))
out_ind
##  [1]  40  64  67  76  79  96 102 117 150 163 168 170 178 193 203 206 213 249 274
## [20] 278 285 289 309 342 344 362 367 374 388 404 408 443
plot_ly(y = screen$TIMEDRS, type = 'box')
plot_ly(y = screen$TIMEDRS, type = 'box')  %>% 
  layout(title = 'Box Plot',
annotations = list( x = -0.01,  y = boxplot.stats(screen$TIMEDRS)$out, 
text = paste(out_ind), showarrow = FALSE,
xanchor = "right"))
ggplot(screen, aes(x = factor(MSTATUS), 
y = TIMEDRS, fill = factor(MSTATUS))) +
  geom_boxplot() +
  theme_minimal()

ggplot(screen) + aes(x =  ATTDRUG) +
  geom_histogram( bins = 6, fill = "#0c4c8a")+
theme_minimal()

ggplot(screen) +
aes(x =  ATTHOUSE) +
geom_histogram( bins = 10, fill = "darkgreen") +
theme_minimal()

plot_ly(y = screen$ATTHOUSE, type = 'box')
screen[c(260,298),]
## # A tibble: 2 × 8
##   SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME EMPLMNT MSTATUS  RACE
##   <dbl>   <dbl>   <dbl>    <dbl>  <dbl>   <dbl>   <dbl> <dbl>
## 1   346       2       8        2      1       0       1     1
## 2   407       2       8        2      4       0       1     1
screen[c(260,298),]
## # A tibble: 2 × 8
##   SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME EMPLMNT MSTATUS  RACE
##   <dbl>   <dbl>   <dbl>    <dbl>  <dbl>   <dbl>   <dbl> <dbl>
## 1   346       2       8        2      1       0       1     1
## 2   407       2       8        2      4       0       1     1
screen2 <- screen[-c(260,298),]

NOT: VERİ SETİNDE TEK DEĞİŞKENLİ UÇ DEĞERLER TESPİT EDİLDİĞİNDE ÖNCE UÇ DEĞERİN NEDENİ ANLAŞILMALI, SONRA DEĞİŞKENİN DÖNÜŞTÜRÜLMWSİNİN UYGUN OLUP OLMADIĞINA KARAR VERİLMELİDİR.DÖNÜŞÜM HEM DAĞILIMLARIN NORMALLİĞİNİ GELİŞTİRİR HEMDE TEK DEĞİŞKENLİ UÇ DEĞERLERİ DAĞILIMIN MERKEZİNE ÇEKEREK ETKİSİNİ AZALTIR. !!!!!DÖNÜŞÜME KARAR VERİLİRSE ÇOK DEĞİŞKENLİ UÇ DEĞERLER İNCELENMEDEN ÖNCE DÖNÜŞÜM YAPILMALIDIR. ÇÜNKÜ ÇOK DEĞİŞKENLİ UÇ DEĞERLERİN BELİRLENMESİNDE KULLANILAN İSTATİSTİKLER NORMAL DAĞILIM GEREKTİRİR.

K. MAHALANOBIS UZAKLIĞI

• ÇOK DEĞIŞKENLI UÇ DEĞERLERI BELIRLEMENIN BIR YOLU MAHALANOBIS UZAKLIĞINI HESAPLAMAKTIR. MAHALANOBIS UZAKLIĞI Z PUANININ ÇOK BOYUTLU VERSIYONUDUR. BIR GÖZLEMIN, DAĞILIMIN KOVARYANSI (ÇOK BOYUTLU VARYANSI) VERILDIĞINDE, DAĞILIMIN AĞIRLIK MERKEZINDEN (ÇOK BOYUTLU ORTALAMASINDAN) UZAKLIĞINI ÖLÇER.

• MAHALONOBIS UZAKLIĞI KI-KARE DAĞILIMI GÖSTERIR (SERBESTLIK DERECESI HESAPLAMADA KULLANILAN DEĞIŞKEN SAYISINA EŞITTIR) VE KI-KARE DAĞILIMI KULLANILARAK DEĞERLENDIRILEBILIR. EĞER HESAPLANAN MAHALONOBIS UZAKLIĞININ GÖZLENME OLASILIĞI 0.001 VEYA DAHA KÜÇÜKSE GÖZLEM UÇDEĞERDIR.

• BU YÖNTEM EŞIT ARALIK VEYA EŞIT ORĂN DÜZEYINDE ÖLÇÜLEN DEĞIŞKENLER IÇIN VEYA SÜREKLI DEĞIŞKEN OLARAK ELE ALINAN SIRALAMA ÖLÇEĞINDE ÖLÇÜLEN DEĞIŞKENLER IÇIN GEÇERLI OLUP SINIFLAMA DÜZEYINDE ÖLÇÜLEN DEĞIŞKENLER IÇIN GEÇERLI DEĞILDIR.

library(psych)
veri <- screen2[,1:5]
md <- mahalanobis(veri, center = colMeans(veri), cov = cov(veri))
head(md,20)
##  [1]  3.785517  4.541493  3.501077  7.281365  5.457240  2.896550  5.807898
##  [8]  3.879478  4.751166  7.415405 10.602100  5.249121  6.073732  3.271885
## [15] 12.316463  4.440749  4.836160  6.362806  4.126524 10.797545
library(psych)
alpha <- .001
cutoff <- (qchisq(p = 1 - alpha, df = ncol(veri)))
cutoff
## [1] 20.51501
ucdegerler <- which(md > cutoff)
veri[ucdegerler, ]
## # A tibble: 9 × 5
##   SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME
##   <dbl>   <dbl>   <dbl>    <dbl>  <dbl>
## 1    48      60       7       24      1
## 2   235      60      10       29      4
## 3   276      57       9       24      2
## 4   291      52       8       19      1
## 5   330      58       7       29      4
## 6   370      57       8       23      4
## 7   398      75       9       33      9
## 8   502      56       8       19      3
## 9   548      81       8       24      9
data_temiz <- veri[-ucdegerler, ]
veri[ucdegerler, ]
## # A tibble: 9 × 5
##   SUBNO TIMEDRS ATTDRUG ATTHOUSE INCOME
##   <dbl>   <dbl>   <dbl>    <dbl>  <dbl>
## 1    48      60       7       24      1
## 2   235      60      10       29      4
## 3   276      57       9       24      2
## 4   291      52       8       19      1
## 5   330      58       7       29      4
## 6   370      57       8       23      4
## 7   398      75       9       33      9
## 8   502      56       8       19      3
## 9   548      81       8       24      9

L. ÇOK DEĞIŞKENLI NORMALLIK SAYILTISI

• ÇOK DEGISKENLI NORMALLIK SAYILTISINI TEST ETMEK IÇIN DOĞRUDAN BIR TEST BULUNMADIĞINDAN, GENELLIKLE HER BIR DEĞIŞKEN AYRI AYRI TEST EDILIR VE EĞER HER DEĞIŞKEN NORMAL DAĞILIM GÖSTERIYORSA ÇOK DEĞIŞKENLI NORMAL OLDUKLARI VARSAYILIR.

• ÇOK DEĞIŞKENLI NORMALLIK HER BIR DEĞIŞKENIN VE DEGISKENLERIN BÜTÜN DOĞRUSAL KOMBINASYONLARININ NORMAL DAĞILDIĞI SAYILTISIDIR.

NORMALLIĞIN IKI BILEŞENI VARDIR: ÇARPIKLIK VE BASIKLIK

• BIR DEĞIŞKENE AIT DAĞILIM NORMAL OLDUĞUNDA, DEĞIŞKENIN ÇARPIKLIK VE BASIKLIK DEĞERLERI SIFIRA EŞITTIR.

• KURAL OLARAK EĞER DEĞIŞKENIN ÇARPIKLIK VE BASIKLIK DEĞERLERI -1.0 ILE +1.0 ARASINDAYSA, DEĞIŞKENIN NORMALE OLDUKÇA YAKIN OLDUĞU SÖYLENEBILIR.

SAYILTININ KARŞILANMASI DURUMUNDA ANALİZİN ARTIKLARI (HATALARI) NORMAL DAĞILIR. (ARTIK: KESTİRİLEN DEĞER İLE GÖZLENEN DEĞER ARASINDAKİ FARK)

library(sur)
attach(screen)

skew(screen$TIMEDRS)
## [1] 3.234045
sew(data_temiz$TIMEDRS)
## NULL
se.skew(TIMEDRS)
## [1] 0.1133494
skew.ratio(TIMEDRS)
## [1] 28.53164
skew(TIMEDRS)/se.skew(TIMEDRS)
## [1] 28.53164

NOT: NORMALLİK DAĞILIMI bakılırken; jarque.test fonksiyonu ile “veri normal dağılımdan farklılaşmamaktadır” yokluk hipotezini test etmektedir.

library(moments)
library(labelled)
jarque.test(remove_labels(TIMEDRS))
## 
##  Jarque-Bera Normality Test
## 
## data:  remove_labels(TIMEDRS)
## JB = 4034.9, p-value < 2.2e-16
## alternative hypothesis: greater
jarque.test(remove_labels(ATTDRUG))
## 
##  Jarque-Bera Normality Test
## 
## data:  remove_labels(ATTDRUG)
## JB = 5.0552, p-value = 0.07985
## alternative hypothesis: greater
skew.ratio(ATTDRUG)
## [1] -1.10762
jarque.test(remove_labels(ATTHOUSE))
## 
##  Jarque-Bera Normality Test
## 
## data:  remove_labels(ATTHOUSE)
## JB = 61.092, p-value = 5.418e-14
## alternative hypothesis: greater
set.seed(0)
normal <- rnorm(200)
non_normal <- rexp(200, rate=3)
par(mfrow=c(1,2))
hist(normal, col='steelblue', main='Normal')
hist(non_normal, col='steelblue', main='Non-normal')

par(mfrow=c(1,2))
qqnorm(normal, main='Normal')
qqline(normal)
qqnorm(non_normal, main='Non-normal')

ggplot(data=screen, aes(sample=ATTHOUSE))+
  geom_qq()+
  geom_qq_line()

:)) ÖĞRENME GÜNLÜĞÜ:))

Bu hafta derste işlenen konular aslında teoride ve başka program uygulamalarında bildiğim konulardı. Ancak bunları R programında pratiğe dökmek benim için çok zor oldu. Özellikle veri setini içe aktarma, eksik veri oluşturma ve analizleri tekrar etme aşamalarında karşılaştığım hata mesajları beni biraz zorladı. Bazen çok küçük bir kod hatasının bile tüm süreci durdurması, R’nin ne kadar dikkat gerektiren bir program olduğunu gösterdi.R öğrenmek sadece komutları bilmek değil, aynı zamanda hata mesajlarını okuyup yorumlayabilmeyi de gerektiriyor. Açıkçası sürecin biraz karmaşık olması ve benim bir çok konuda temelde eksikliğimin olması ve dersin işlenme hızı benim dersi anlamamı zorlaştırdı. Zamanla daha fazla pratik yaptıkça daha hakim olabileceğimi düşünüyorum. Bu nedenle şu an zor gelse de, bu sürecin benim için faydalı olacağına inanıyorum.