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
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.
TRUSA <- readRDS("TRUSA.RDS")
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
SUM <- TRUSA %>% dplyr :: select(starts_with("M")) %>% rowSums()
TRUSA$SUM <- SUM
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
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
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
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
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
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
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
##
## | | 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)
| 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.
• Ç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
• Ç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.