Bağımsız İki Örneklemde T-Test Uygulması

# Gerekli kütüphanelerin yüklenmesi
library(readxl)
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(ggplot2)
# Excel dosyasından veri okuma

# Shapiro-Wilk test for normality for each column
for (column in names(Ttests)) {
  s <- shapiro.test(Ttests[[column]])
  p_value <- s$p.value
  alpha <- 0.05  # Örnek için alfa değeri
  normal_message <- ifelse(p_value > alpha, "Normal dağılıma uyar", "Normal dağılıma uymaz")
  print(paste("Shapiro-Wilk Test for column", column))
  print(s)
  cat(normal_message, "\n\n")
}
## [1] "Shapiro-Wilk Test for column TedarikciA"
## 
##  Shapiro-Wilk normality test
## 
## data:  Ttests[[column]]
## W = 0.97143, p-value = 0.6194
## 
## Normal dağılıma uyar 
## 
## [1] "Shapiro-Wilk Test for column TedarikciB"
## 
##  Shapiro-Wilk normality test
## 
## data:  Ttests[[column]]
## W = 0.97314, p-value = 0.6668
## 
## Normal dağılıma uyar

Normallik ve varyans eşitliği altında test analizi

Bağımsız İki Örneklemde T-Test “Two-Sided”

  • HO:mu1=mu2
  • HO:mu1 != Mu2
# T-test Var.equal=TRUE for specific columns
ttest_result <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "two.sided", var.equal = TRUE)

# T-test sonuçlarını yazdırma
print("Independent Samples T-test Results:")
## [1] "Independent Samples T-test Results:"
print(ttest_result)
## 
##  Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 54, p-value = 1.604e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   4.858719 10.619138
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result$statistic
df <- ttest_result$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha/2, df)
lower_critical <- -critical_value
upper_critical <- critical_value

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=c(lower_critical, upper_critical), col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Values"), col=c("red", "green"), lty=1:2, cex=0.8)

Bağımsız İki Örneklemde T-Test “less”

  • HO:mu1=mu2
  • HO:mu1 < Mu2
# T-test sonuçlarını al
ttest_result_less <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "less", var.equal = TRUE)
print(ttest_result_less)
## 
##  Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 54, p-value = 1
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##      -Inf 10.14317
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result_less$statistic
df <- ttest_result_less$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha, df)
lower_critical <- -Inf
upper_critical <- critical_value

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=upper_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)

Bağımsız İki Örneklemde T-Test “greater”

  • HO:mu1=mu2
  • HO:mu1 > Mu2
# T-test sonuçlarını al
ttest_result_right <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "greater", var.equal = TRUE)
print(ttest_result_right)
## 
##  Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 54, p-value = 8.022e-07
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  5.334685      Inf
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result_right$statistic
df <- ttest_result_right$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(alpha, df)
lower_critical <- -critical_value
upper_critical <- Inf

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=lower_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)

Normallik ve varyans eşitliğinin olmadığında test analizi

Bağımsız İki Örneklemde T-Test “Two-Sided”

  • HO:mu1=mu2
  • HO:mu1!=Mu2
# T-test sonuçlarını al (var.equal = FALSE)
ttest_result_varunequal <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "two.sided", var.equal = FALSE)
head
## function (x, ...) 
## UseMethod("head")
## <bytecode: 0x0000022034426cc0>
## <environment: namespace:utils>
# T-test sonuçlarını yazdırma
print("Independent Samples T-test Results (Var.equal = FALSE):")
## [1] "Independent Samples T-test Results (Var.equal = FALSE):"
print(ttest_result_varunequal)
## 
##  Welch Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 53.876, p-value = 1.613e-06
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   4.858567 10.619290
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result_varunequal$statistic
df <- ttest_result_varunequal$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha/2, df)
lower_critical <- -critical_value
upper_critical <- critical_value

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=c(lower_critical, upper_critical), col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Values"), col=c("red", "green"), lty=1:2, cex=0.8)

Bağımsız İki Örneklemde T-Test “Less”

  • HO:mu1=mu2
  • HO:mu1 < Mu2
# T-test sonuçlarını al (var.equal = FALSE)
ttest_result_less_varunequal <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "less", var.equal = FALSE)

# T-test sonuçlarını yazdırma
print("Left-tailed T-test Results (Var.equal = FALSE):")
## [1] "Left-tailed T-test Results (Var.equal = FALSE):"
print(ttest_result_less_varunequal)
## 
##  Welch Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 53.876, p-value = 1
## alternative hypothesis: true difference in means is less than 0
## 95 percent confidence interval:
##      -Inf 10.14327
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result_less_varunequal$statistic
df <- ttest_result_less_varunequal$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha, df)
lower_critical <- -Inf
upper_critical <- critical_value

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=upper_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)

Bağımsız İki Örneklemde T-Test “Greater”

  • HO:mu1=mu2
  • HO:mu1 > Mu2
# T-test sonuçlarını al (var.equal = FALSE)
ttest_result_right_varunequal <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "greater", var.equal = FALSE)

# T-test sonuçlarını yazdırma
print("Right-tailed T-test Results (Var.equal = FALSE):")
## [1] "Right-tailed T-test Results (Var.equal = FALSE):"
print(ttest_result_right_varunequal)
## 
##  Welch Two Sample t-test
## 
## data:  Ttests$TedarikciA and Ttests$TedarikciB
## t = 5.387, df = 53.876, p-value = 8.066e-07
## alternative hypothesis: true difference in means is greater than 0
## 95 percent confidence interval:
##  5.334588      Inf
## sample estimates:
## mean of x mean of y 
##  76.83607  69.09714
# Test istatistiklerini çıkar
test_statistic <- ttest_result_right_varunequal$statistic
df <- ttest_result_right_varunequal$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(alpha, df)
lower_critical <- -critical_value
upper_critical <- Inf

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=lower_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)

Parametrik olmayan iki bağımsız örneklemde T-testinin Karşılığı MannWhitny-U

  • NullHipotezi (H0): İki grubun dağılımları aynıdır.
  • Alternatif Hipotez (H1): İki grubun ortalamaları farklıdır. `
# Gerekli kütüphaneleri yükleme
library(readxl)
library(stats)

# Veriyi okuma
mannveri <- as.data.frame(mannveri)

# Grupları ve değerleri kontrol etme
print(head(mannveri))
##      Gruplar Degerler
## 1 TedarikciA    69.45
## 2 TedarikciA    44.43
## 3 TedarikciA     1.75
## 4 TedarikciA    16.70
## 5 TedarikciA    81.56
## 6 TedarikciA    11.87
print(table(mannveri$Gruplar))
## 
## TedarikciA TedarikciB 
##         28         28
# Normallik testi ve sonuçların yazdırılması
normallik_testleri <- tapply(mannveri$Degerler, mannveri$Gruplar, shapiro.test)
normallik_sonuclari <- sapply(normallik_testleri, function(x) x$p.value)
print(normallik_sonuclari)
##  TedarikciA  TedarikciB 
## 0.005266793 0.183812773
# Hangi grupların normal dağılıma uymadığını yazdırma
for (i in seq_along(normallik_sonuclari)) {
  if (normallik_sonuclari[i] > 0.05) {
    cat(names(normallik_sonuclari)[i], "grubu normal dağılıma uyar.\n")
  } else {
    cat(names(normallik_sonuclari)[i], "grubu normal dağılıma uymaz.\n")
  }
}
## TedarikciA grubu normal dağılıma uymaz.
## TedarikciB grubu normal dağılıma uyar.
# Gruplara ayırma
Grup1 <- mannveri$Degerler[mannveri$Gruplar == "TedarikciA"]
Grup2 <- mannveri$Degerler[mannveri$Gruplar == "TedarikciB"]

# Mann-Whitney U testi
mwu_testi <- wilcox.test(Grup1, Grup2)

# Test sonucunu görüntüleme
print(mwu_testi)
## 
##  Wilcoxon rank sum exact test
## 
## data:  Grup1 and Grup2
## W = 504, p-value = 0.06742
## alternative hypothesis: true location shift is not equal to 0

Bağımlı iki örneklemde T testi

Bağımlı örneklemde T testi “Two-sided”

  • HO:muonce=musonra
  • H1:muonce!=musonra
# Gerekli kütüphaneleri yükle
library(ggplot2)
library(dplyr)

# Excel dosyasından veri okuma
# Bağımlı iki örneklem t-testi (paired=TRUE, alternative="two.sided")
ttest_result_twosided <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "two.sided", paired=TRUE)

# Test istatistiklerini çıkar
test_statistic <- ttest_result_twosided$statistic
df <- ttest_result_twosided$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha/2, df)
lower_critical <- -critical_value
upper_critical <- critical_value

# Plot oluşturma
plot(seq(-5, 5, length=100), dt(seq(-5, 5, length=100), df), type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=c(lower_critical, upper_critical), col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Values"), col=c("red", "green"), lty=1:2, cex=0.8)
title(main = "Paired Samples T-test (Two-Sided)")

Bağımlı örneklemde T testi “less”

  • HO:muonce=musonra
  • H1:muonce<musonra
# Bağımlı iki örneklem t-testi (paired=TRUE, alternative="less")
ttest_result_less <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "less", paired=TRUE)

# Test istatistiklerini çıkar
test_statistic <- ttest_result_less$statistic
df <- ttest_result_less$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(alpha, df)
lower_critical <- -critical_value
upper_critical <- Inf

# Plot oluşturma
x_values <- seq(-5, 5, length=100)
y_values <- dt(x_values, df)
plot(x_values, y_values, type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=lower_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)
title(main = "Paired Samples T-test (Less)")

Bağımlı örneklemde T testi “greater”

  • HO:muonce=musonra
  • H1:muonce>musonra
# Bağımlı iki örneklem t-testi (paired=TRUE, alternative="greater")
ttest_result_greater <- t.test(Ttests$TedarikciA, Ttests$TedarikciB, alternative = "greater", paired=TRUE)

# Test istatistiklerini çıkar
test_statistic <- ttest_result_greater$statistic
df <- ttest_result_greater$parameter
alpha <- 0.05  # Örnek için alfa değeri

# Red ve kabul bölgelerini hesapla
critical_value <- qt(1 - alpha, df)
lower_critical <- -Inf
upper_critical <- critical_value

# Plot oluşturma
x_values <- seq(-5, 5, length=100)
y_values <- dt(x_values, df)
plot(x_values, y_values, type="l", col="blue", lwd=2, ylab="Density", xlab="t-value")
abline(v=test_statistic, col="red", lwd=2)
abline(v=upper_critical, col="green", lty=2, lwd=2)
legend("topright", legend=c("T-Value", "Critical Value"), col=c("red", "green"), lty=1:2, cex=0.8)
title(main = "Paired Samples T-test (Greater)")

Parametrik olmayan Eşleştirilmiş iki örneklemde Ttestinin karşılığı Wilcoxon Test

  • H0: Mevcut teknoloji ile yeni teknoloji arasinda, musteri memnuniyeti acisindan, istatistiksel olarak anlamli bir fark yoktur.
  • H1: Mevcut teknoloji ile yeni teknoloji arasinda, musteri memnuniyeti acisindan, istatistiksel olarak anlamli bir fark vardır
# kutuphaneleri cagiralim
library(readxl)
library(dplyr)
names(veri_wilcoxon)
## [1] "TeknolojiA" "TeknolojiB"
# Oncelikle verimizin normal dagilim olup olmadigini kontrol edelim
library(dplyr)
shapiro_sonuc=apply(veri_wilcoxon,2,shapiro.test) # veriye, 2: sutunlar boyunca, shapiro.tes uygula

for (val in c(names(veri_wilcoxon))) {
  p_deger=shapiro_sonuc[[val]]$p.value
  if (p_deger>0.05) {
    print(paste("normal dagilima uygundur:", val)) 
  } else {
    print(paste("H0 reddedilir- Normal dagilima uygun degildir:",val))
  } 
}
## [1] "H0 reddedilir- Normal dagilima uygun degildir: TeknolojiA"
## [1] "normal dagilima uygundur: TeknolojiB"
#### T-Test varsayimlar Tamamlanamadi. Teknoloji A normal dagilim degil 


# wilcoxon test 
wilcoxon_sonuc <-  wilcox.test(veri_wilcoxon$TeknolojiA, veri_wilcoxon$TeknolojiB, paired = TRUE, exact=FALSE, alternative = "two.sided")
wilcoxon_sonuc
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  veri_wilcoxon$TeknolojiA and veri_wilcoxon$TeknolojiB
## V = 315, p-value = 0.01112
## alternative hypothesis: true location shift is not equal to 0
## gorsellestirelim mi? 
library(ggplot2)
library(reshape2)
veri_gorsel = melt(veri_wilcoxon)
## No id variables; using all as measure variables
names(veri_gorsel)[1]<- "Teknoloji"
names(veri_gorsel)[2]<- "musteri_memnuniyet"
# ggplot ile kutu grafigi
ggplot(veri_gorsel, aes(x=Teknoloji, y=musteri_memnuniyet,fill=Teknoloji)) + 
geom_boxplot(alpha=0.8) +
  theme(legend.position="none") +
  scale_fill_brewer(palette="BuPu")

Varyans analizi

Homojenlik Normallik varsayımları ile Tek yönlü anova testi

library(stats)
library(car) 
## Zorunlu paket yükleniyor: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
tapply(X=Anova_veri$Degerler,INDEX=Anova_veri$Gruplar,FUN=shapiro.test)
## $BolgeA
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.97136, p-value = 0.6175
## 
## 
## $BolgeB
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.97318, p-value = 0.6679
## 
## 
## $BolgeC
## 
##  Shapiro-Wilk normality test
## 
## data:  X[[i]]
## W = 0.97906, p-value = 0.8274
# Normallik testi
normallik_testleri <- tapply(Anova_veri$Degerler, Anova_veri$Gruplar, shapiro.test)
normallik_sonuclari <- sapply(normallik_testleri, function(x) x$p.value)
print(normallik_sonuclari)
##    BolgeA    BolgeB    BolgeC 
## 0.6175043 0.6679435 0.8274008
# Normallik testi sonuçlarına göre
normallik_var <- all(normallik_sonuclari > 0.05)
cat("Normallik Testi:", ifelse(normallik_var, "Veriler normal dağılıyor.", "Veriler normal dağılmıyor."), "\n")
## Normallik Testi: Veriler normal dağılıyor.
# Varyans eşitliği testi (Levene's Test)
levene_testi <- leveneTest(Degerler ~ Gruplar, data = Anova_veri)
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
print(levene_testi)
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  2  1.0255 0.3632
##       81
# Varyans eşitliği testi sonucuna göre
varyans_esitligi_var <- levene_testi$`Pr(>F)`[1] > 0.05
cat("Varyans Eşitliği Testi:", ifelse(varyans_esitligi_var, "Varyanslar eşit.", "Varyanslar eşit değil."), "\n")
## Varyans Eşitliği Testi: Varyanslar eşit.
if (normallik_var && varyans_esitligi_var) {
  # Normallik ve varyans eşitliği sağlanıyorsa klasik ANOVA
  anova_sonucu <- oneway.test(Degerler ~ Gruplar, data = Anova_veri, var.equal = TRUE)
  cat("Klasik ANOVA Sonuçları:\n")
} else {
  # Normallik ve/veya varyans eşitliği sağlanmıyorsa Welch ANOVA
  anova_sonucu <- oneway.test(Degerler ~ Gruplar, data = Anova_veri, var.equal = FALSE)
  cat("Welch ANOVA Sonuçları:\n")
}
## Klasik ANOVA Sonuçları:
print(anova_sonucu)
## 
##  One-way analysis of means
## 
## data:  Degerler and Gruplar
## F = 12.861, num df = 2, denom df = 81, p-value = 1.411e-05

Tek yönlü varyans analizi olan parametrik olmayan karşılığı “Kruskal Wallis H Testi”

  • H0: Uretim yontemlerinin verimlilik uzerine etkilerinde istatistiksel olarak anlamli bir fark yoktur.
  • H1: Uretim yontemlerinin verimlilik uzerine etkilerinde istatistiksel olarak anlamli bir fark vardır.
names(veri)
## [1] "YöntemX" "YöntemY" "YöntemZ"
names(veri)[1]="YontemX"
names(veri)[2]="YontemY"
names(veri)[3]="YontemZ"

# Oncelikle verimizin normal dagilim olup olmadigini kontrol edelim
library(dplyr)
print("Shapiro testi H0: populasyon normal dagilimdir.")
## [1] "Shapiro testi H0: populasyon normal dagilimdir."
shapiro_sonuc=apply(veri,2,shapiro.test) # veriye, 2: sutunlar boyunca, shapiro.tes uygula


for (val in c("YontemX","YontemY","YontemZ")) {
  p_deger=shapiro_sonuc[[val]]$p.value
  if (p_deger>0.05) {
    print(paste("normal dagilima uygundur:", val)) 
  } else {
    print(paste("H0 reddedilir-Normal dagilim degildir:",val))
  } 
}
## [1] "H0 reddedilir-Normal dagilim degildir: YontemX"
## [1] "normal dagilima uygundur: YontemY"
## [1] "normal dagilima uygundur: YontemZ"
# YontemX normal dagilim degil.O yuzden parametrik test uygulayamam.

library(reshape2)
yeni_veri_kruskal = melt(veri)
## No id variables; using all as measure variables
names(yeni_veri_kruskal)[1]<- "Yontem"
names(yeni_veri_kruskal)[2]<- "satis_miktari"


### H0: Uretim yontemlerinin verimlilik uzerine 
### etkilerinde istatistiksel olarak anlamli bir fark yoktur.

# Kruskal-Wallis bakalim 
kruskal_sonuc <- kruskal.test(satis_miktari~ Yontem,data=yeni_veri_kruskal)
kruskal_sonuc
## 
##  Kruskal-Wallis rank sum test
## 
## data:  satis_miktari by Yontem
## Kruskal-Wallis chi-squared = 8.9983, df = 2, p-value = 0.01112

Kikare Analizi

  • H0: uc farkli reklam kampanyasinin musteri geri donuleri uzerindeki etkisi arasinda istatistiksel olarak anlamli bir fark yoktur
  • H1: uc farkli reklam kampanyasinin musteri geri donuleri uzerindeki etkisi arasinda istatistiksel olarak anlamli bir fark vardır
#install.packages('stats')
library(stats)
library(readxl)

head(veri_kikare)
## # A tibble: 6 × 2
##   `Müşteri Geri Dönüşleri` Kampanya  
##   <chr>                    <chr>     
## 1 nötr                     Kampanya 1
## 2 nötr                     Kampanya 1
## 3 nötr                     Kampanya 1
## 4 nötr                     Kampanya 1
## 5 olumlu                   Kampanya 1
## 6 nötr                     Kampanya 1
names(veri_kikare)
## [1] "Müşteri Geri Dönüşleri" "Kampanya"
# okumada problem yasadigi icin ozniteligin ismini degistirelim
names(veri_kikare)[1]<-"Musteri_donus"
names(veri_kikare)[2]<-"Kampanya"
View(veri_kikare)
# veri_kikare verisinin musteri_donus ve Kampanya sutununun sinifini ogrenelim
class(veri_kikare$Musteri_donus) 
## [1] "character"
class(veri_kikare$Kampanya)
## [1] "character"
### Biraz gorsellikle mantikli mi, test edelim?
library(ggplot2)
ggplot(veri_kikare, aes(x = Kampanya, y = Musteri_donus)) + 
geom_boxplot()

#### Veriyi kikare analizi icin hazir edecegiz. Contingency tablosunu hazirlayalim
tablo= table(veri_kikare) 
tablo
##              Kampanya
## Musteri_donus Kampanya 1 Kampanya 2 Kampanya 3
##       nötr            12         17          9
##       olumlu           9          8         10
##       olumsuz          7          3          9
## barplot eklenecek/eklendi
library(ggplot2)

ggplot(veri_kikare, aes(x = Kampanya, fill = Musteri_donus)) +
  geom_bar(position = "dodge")

## H0: uc farkli reklam kampanyasinin musteri geri donuleri uzerindeki etkisi 
## arasinda istatistiksel olarak anlamli bir fark yoktur

# kikare-test bakalim 
kikare_test_sonuc <- chisq.test(tablo)

# kikare-test sonuclarini yazdiralim
print(kikare_test_sonuc)
## 
##  Pearson's Chi-squared test
## 
## data:  tablo
## X-squared = 5.7485, df = 4, p-value = 0.2187

Korelasyon Analizi

Pearson Korelasyon analizi-Paramerik Testler için

  • H0: Korelasyon katsayisi istatistiksel olarak anlamli degildir
  • H0: Korelasyon katsayisi istatistiksel olarak anlamlidir
library(readxl)

## oncelikle hep yaptigimiz gibi sutun isimleri kontrol edecegiz
names(veri_korr) #tabiiki yine sorun oldu
## [1] "Pazarlama Bütçesi (bin dolar)" "Üretim Hacmi (bin birim)"
names(veri_korr)[1]<-"Butce"
names(veri_korr)[2]<-"Hacim"

## hangi korelasyon metodunu kullanacagiz belirlemek icin 
## verinin normal dagilip dagilmadigini kontrol edelim
library(dplyr)
print("Shapiro testi H0: populasyon normal dagilimdir.")
## [1] "Shapiro testi H0: populasyon normal dagilimdir."
shapiro_sonuc=apply(veri_korr,2,shapiro.test) # veriye, 2: sutunlar boyunca, shapiro.tes uygula

for (val in c(names(veri_korr))) {
  p_deger=shapiro_sonuc[[val]]$p.value
  if (p_deger>0.05) {
    print(paste("normal dagilima uygundur:", val))
  } else {
    print(paste("H0 reddedilir-Normal dagilim degildir:",val))
  } 
}
## [1] "normal dagilima uygundur: Butce"
## [1] "normal dagilima uygundur: Hacim"
# Korelasyonlari bulalim
round(cor(veri_korr),digits = 2)
##       Butce Hacim
## Butce  1.00  0.43
## Hacim  0.43  1.00
# cor(veri_korr,method = "spearman") #parametrik olmayanlar icin

# Pearson korelasyon testi

test <- cor.test(veri_korr$Butce, veri_korr$Hacim)
test
## 
##  Pearson's product-moment correlation
## 
## data:  veri_korr$Butce and veri_korr$Hacim
## t = 4.4149, df = 88, p-value = 2.86e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2398914 0.5816278
## sample estimates:
##       cor 
## 0.4258276
## Gorsellestirme yapalim:

## 1) birbirlerine gore nokta-grafigi bakalim

plot(veri_korr$Butce~veri_korr$Hacim) 
abline(lm(veri_korr$Butce~veri_korr$Hacim),col = "red") #ekstra y=x cizgisi ekler

## 2) Korelasyon grafigini de alalim
# improved correlation matrix
#install.packages("corrplot")
library(corrplot)
## corrplot 0.92 loaded
corrplot(cor(veri_korr),
         method = "number",
         type = "upper" # sadece yukariyi goster
)

Spearman Korelasyon analizi-Parametrik olmayan Testler için

  • H0: Korelasyon katsayisi istatistiksel olarak anlamli degildir
  • H0: Korelasyon katsayisi istatistiksel olarak anlamlidir
library(readxl)
library(dplyr)
library(corrplot)

head(veri_korr)
## # A tibble: 6 × 2
##   Butce Hacim
##   <dbl> <dbl>
## 1  67.6  319.
## 2  54    357.
## 3  59.8  328.
## 4  72.4  384.
## 5  68.7  352.
## 6  40.2  309.
# Sütun isimlerini düzeltme
names(veri_korr)[1] <- "Butce"
names(veri_korr)[2] <- "Hacim"

# Normal dağılım testi (Shapiro-Wilk)
shapiro_sonuc <- lapply(veri_korr, shapiro.test)

for (val in names(veri_korr)) {
  p_deger <- shapiro_sonuc[[val]]$p.value
  if (p_deger > 0.05) {
    print(paste("Normal dağılıma uygundur:", val))
  } else {
    print(paste("H0 reddedilir - Normal dağılım değildir:", val))
  }
}
## [1] "Normal dağılıma uygundur: Butce"
## [1] "Normal dağılıma uygundur: Hacim"
# Pearson Korelasyon Katsayısı
korelasyon_pearson <- cor.test(veri_korr$Butce, veri_korr$Hacim)
korelasyon_pearson
## 
##  Pearson's product-moment correlation
## 
## data:  veri_korr$Butce and veri_korr$Hacim
## t = 4.4149, df = 88, p-value = 2.86e-05
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2398914 0.5816278
## sample estimates:
##       cor 
## 0.4258276
# Korelasyon Matrisi
corr_matrix <- cor(veri_korr)

# Korelasyon Matrisi Görselleştirme
corrplot(corr_matrix,
         method = "number",
         type = "upper" # Sadece üst kısmı göster
)

# Spearman Korelasyon Katsayısı
korelasyon_spearman <- cor.test(veri_korr$Butce, veri_korr$Hacim, method = "spearman", exact = TRUE)
## Warning in cor.test.default(veri_korr$Butce, veri_korr$Hacim, method =
## "spearman", : Cannot compute exact p-value with ties
korelasyon_spearman
## 
##  Spearman's rank correlation rho
## 
## data:  veri_korr$Butce and veri_korr$Hacim
## S = 68732, p-value = 1.902e-05
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##       rho 
## 0.4342383

Regresyon Analizi

Basit regresyon Analizi

library(readxl)
head(veri_regresyon)
## # A tibble: 6 × 2
##   `Pazarlama Harcamaları (bin dolar)` `Satış Miktarları (bin birim)`
##                                 <dbl>                          <dbl>
## 1                               135.                           1253.
## 2                               108                            1052.
## 3                               120.                           1142.
## 4                               145.                           1257.
## 5                               137.                           1336.
## 6                                80.4                           882.
### yine turkce karakterler var
### duzenleme yapalim:)
names(veri_regresyon)[1]<- "pazarlama_harcama"
names(veri_regresyon)[2]<- "satis_miktari"

# bi veriyi gorelim, neler yapabiliriz
plot(satis_miktari ~ pazarlama_harcama, data = veri_regresyon)

## direkt lineer durmuyor ama bir lineerlik iliskisine bakalim
val=cor(veri_regresyon$pazarlama_harcama, veri_regresyon$satis_miktari)
if (val>=0.7 & val<0.9){
  sprintf("korelasyon degeri %f olarak iyi bir korelasyon oldugu dusunulmaktedir.",round(val,2))
} else{if (val>=0.9){
  sprintf("korelasyon degeri %f olarak guclu bir korelasyon oldugu dusunulmaktedir.",round(val,2))}
}
## [1] "korelasyon degeri 0.840000 olarak iyi bir korelasyon oldugu dusunulmaktedir."
## bilinen regresyon modelleri genelde normal dagilim 
## (bagimli degisken) bekler
hist(veri_regresyon$satis_miktari)

## kabaca normal diyebiliriz, emin olmak icin hadi shapiro da uygulayalim
shapiro.test(veri_regresyon$satis_miktari)
## 
##  Shapiro-Wilk normality test
## 
## data:  veri_regresyon$satis_miktari
## W = 0.95022, p-value = 0.6402
## denemelere baslayalim:

### 1) lineer regresyon modeli:
model_lineer <- lm(satis_miktari ~ pazarlama_harcama, data = veri_regresyon)
summary(model_lineer)
## 
## Call:
## lm(formula = satis_miktari ~ pazarlama_harcama, data = veri_regresyon)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -218.15  -45.94   22.24   64.45  111.31 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        218.684    179.149   1.221 0.250210    
## pazarlama_harcama    7.493      1.539   4.870 0.000652 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 98.37 on 10 degrees of freedom
## Multiple R-squared:  0.7034, Adjusted R-squared:  0.6737 
## F-statistic: 23.72 on 1 and 10 DF,  p-value: 0.0006518
### ust uste cizdirelim
library(ggplot2)
satis.graph<-ggplot(veri_regresyon, aes(x=pazarlama_harcama, y=satis_miktari))+
  geom_point()
satis.graph

satis.graph <- satis.graph + geom_smooth(method="lm", col="red")
satis.graph
## `geom_smooth()` using formula = 'y ~ x'

satis.graph <- satis.graph +
  annotate(geom="text", x=90, y=1400, label="= 218.684 + (7.493*harcama)")
satis.graph
## `geom_smooth()` using formula = 'y ~ x'

### 2) polynomial regresyon yapsak peki ne olurdu?

model_poli = lm(satis_miktari ~ poly(pazarlama_harcama,3, raw=T), data=veri_regresyon)

# polinom regresyon_sonuc
summary(model_poli)
## 
## Call:
## lm(formula = satis_miktari ~ poly(pazarlama_harcama, 3, raw = T), 
##     data = veri_regresyon)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -193.867  -11.211    6.118   44.452  130.317 
## 
## Coefficients:
##                                        Estimate Std. Error t value Pr(>|t|)
## (Intercept)                           4.887e+03  6.450e+03   0.758    0.470
## poly(pazarlama_harcama, 3, raw = T)1 -1.224e+02  1.784e+02  -0.687    0.512
## poly(pazarlama_harcama, 3, raw = T)2  1.182e+00  1.618e+00   0.730    0.486
## poly(pazarlama_harcama, 3, raw = T)3 -3.513e-03  4.814e-03  -0.730    0.486
## 
## Residual standard error: 106.5 on 8 degrees of freedom
## Multiple R-squared:  0.7219, Adjusted R-squared:  0.6177 
## F-statistic: 6.924 on 3 and 8 DF,  p-value: 0.01297

Logistic Regresyon

library(readxl)

head(veri_lojistik)
## # A tibble: 6 × 3
##     Yaş `Gelir Düzeyi` `Ürün Kabulü`
##   <dbl>          <dbl> <chr>        
## 1  52.6         78247. Evet         
## 2  39           29784. Evet         
## 3  44.8         30943. Evet         
## 4  57.4         64541. Hayır        
## 5  53.7         32403. Evet         
## 6  25.2         79154. Evet
# Gerekli Kütüphanelerin Yüklenmesi
library(readxl)
library(dplyr)
library(caTools)
library(ggplot2)
library(corrplot)
library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
# Kolon İsimlerini Değiştirme
names(veri_lojistik)[1] <- "yas"
names(veri_lojistik)[2] <- "gelir"
names(veri_lojistik)[3] <- "urun_kabul"

# İkili Lojistik Regresyon için Bağımlı Değişkeni Dönüştürme
veri_lojistik_new <- veri_lojistik %>%
  mutate(urun_kabul = ifelse(urun_kabul == "Evet", 1, 0))

View(veri_lojistik_new)

# Korelasyon Matrisi
cor_matrix <- cor(veri_lojistik_new[, c("yas", "gelir", "urun_kabul")])
corrplot(cor_matrix, method = "circle", type = "lower", tl.col = "black", tl.srt = 45)

# Lojistik Regresyon Modeli Oluşturma
model_logistik <- glm(urun_kabul ~ yas + gelir, family = binomial, data = veri_lojistik_new)

# Model Özeti
summary(model_logistik)
## 
## Call:
## glm(formula = urun_kabul ~ yas + gelir, family = binomial, data = veri_lojistik_new)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)  4.425e-01  9.252e-01   0.478    0.632
## yas          2.469e-02  2.087e-02   1.183    0.237
## gelir       -1.973e-05  1.309e-05  -1.508    0.132
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 136.66  on 99  degrees of freedom
## Residual deviance: 133.47  on 97  degrees of freedom
## AIC: 139.47
## 
## Number of Fisher Scoring iterations: 4
# Tahmin edilen olasılıkların hesaplanması
predicted_probabilities <- predict(model_logistik, type = "response")

# ROC Eğrisi ve AUC Hesaplama
roc_curve <- roc(veri_lojistik_new$urun_kabul, predicted_probabilities)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
auc_value <- auc(roc_curve)

# ROC Eğrisinin Çizdirilmesi
plot(roc_curve, main = paste("ROC Eğrisi (AUC =", round(auc_value, 2), ")"))

# Yaşa göre tahmin edilen olasılıklar
plot_data <- data.frame(
  yas = veri_lojistik_new$yas,
  gelir = veri_lojistik_new$gelir,
  urun_kabul = veri_lojistik_new$urun_kabul,
  predicted_probabilities = predicted_probabilities
)

ggplot(plot_data, aes(x = yas, y = predicted_probabilities)) +
  geom_point(aes(color = as.factor(urun_kabul))) +
  geom_smooth(method = "glm", method.args = list(family = binomial), se = FALSE) +
  labs(title = "Yaşa Göre Tahmin Edilen Olasılıklar", x = "Yaş", y = "Tahmin Edilen Olasılıklar") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!

# Gelire göre tahmin edilen olasılıklar
ggplot(plot_data, aes(x = gelir, y = predicted_probabilities)) +
  geom_point(aes(color = as.factor(urun_kabul))) +
  geom_smooth(method = "glm", method.args = list(family = binomial), se = FALSE) +
  labs(title = "Gelire Göre Tahmin Edilen Olasılıklar", x = "Gelir", y = "Tahmin Edilen Olasılıklar") +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!