R’da Maddeleri Ters Puanlama
Sosyal bilimler alanında Likert-tipi maddeler sıklıkla kullanılır ve bazen bu maddelere verilen yanıtların ters puanlanması gerekir. Bu yazıda, bir ölçekte ters puanlanması gereken maddelerden alınan puanları içeren veri setinin nasıl hızlıca düzenlenebileceğini ele alacağım.
Maddeleri ters puanlama işlemi alanda yine sıklıkla kullanılan bir program olan SPSS’te şöyle yapılıyordu : Transform menüsünden Recode into Different Variables denildikten sonra açılan pencerenin sol kutucuğunda yer alan ilgili değişkenler sağ kutucuğa atılır. Her değişken için yeni isimler belirlenir ve Output Variable bölümüne yazılır. Ardından Change tıklanır. Old and New Values… düğmesi tıklanır. Açılan pencerede sol tarafa cevap kategorilerinin eski değerleri, sağ tarafa da onlara ait yeni değerler girilir (Örneğin 5’li derecelendirmede 1 yerine 5, 2 yerine 4 gibi). Bu işlemler arasında her seferinde Add denilerek devam edilir. Old → New kutucuğunda tüm kodlamaların tamamlandığı görüldüğünde Continue ve OK tıklanarak işlem tamamlanır.
Psikometri alanında da sıklıkla kullanılan bir yazılım haline gelen R, istatistiksel programlama, veri analizi ve grafiksel gösterimler icin kullanılan ve ticari amaç gütmeyen ücretsiz bir yazılımdır. R’da bir veri setinde düzenlemeler farklı şekillerde yapılabilir.
Maddelerin ters puanlanmasının R’da farklı şekillerde nasıl yapıldığını görmek için öncelikle aşağıdaki satır komutlarıyla bir veri seti oluşturalım.
set.seed(12)
num <- sample(x = 1:5, size = 60, replace = TRUE)
colnames <- c(“I1”, “I2”, “I3”, “I4”, “I5”, “I6”)
rownames <- c(“P1”, “P2”, “P3”, “P4”, “P5”, “P6”, “P7”, “P8”, “P9”, “P10”)
veri_r <- matrix(num, nrow = 10, dimnames = list(rownames, colnames))Yukarıda sırasıyla bir başlangıç değeri seçilmiş (kodlar her çalıştırıldığında aynı sonuçların elde edilebilmesi için), num isimli bir nesne oluşturulmuş, oluşturulacak matriste kullanılmak üzere sütun ve satır isimleri girilmiş ve son olarak veri_r isimli bir matris oluşturulmuştur. Bu matris, veri setimizdir. Veri setimizde 10 kişinin 6 farklı maddeye (soruya) yanıtlarının 1 ile 5 arasında puanlandığını düşünelim. Aşağıdaki satır komutu yardımıyla veri setimizi inceleyelim.
veri_rSonuç olarak, aşağıdaki 10x6 tipindeki matrisi göreceğiz.
I1 I2 I3 I4 I5 I6
P1 2 2 5 4 3 5
P2 2 1 4 4 5 2
P3 3 4 5 5 3 4
P4 5 2 5 5 2 3
P5 5 2 1 3 5 5
P6 4 5 2 5 4 2
P7 2 4 2 4 2 2
P8 3 1 4 3 5 4
P9 2 2 4 5 1 2
P10 5 3 3 4 4 5Yukarıda görüldüğü üzere veri setimiz bireylerin maddelere verdiği yanıtlardan oluşuyor. R’da maddelerin ters puanlanması farklı şekillerde yapılabilir. Bu uygulamalar aşağıda başlıklar halinde verilmiştir.
1.Yöntem: İlgili maddelerden alınan puanları içeren sütundaki değerlerin ilgili maddeden alınabilecek en yüksek ve en düşük puanın toplamından çıkarılması
Uygulamamızda kullanacağımız veri_r isimli veri setindeki 3 ve 4. maddenin aslında ters puanlanması gerektiğini fark ettiğimizi düşünelim. Veri setindeki bu maddeler 1'den 5'e kadar derecelendirilerek puanlanmış. Bu halde, bu maddelerden alınan puanları eğer 6'dan çıkarırsak aslında maddeler ters puanlanmış olur. Bunun için sırasıyla aşağıdaki işlemleri yapmak gerekiyor.
ters1 <- veri_r
ters1[, c(3, 4)] <- 6 — veri_r[, c(3, 4)]
ters1Yukarıda sırasıyla veri_r isimli veri setini bozmamak adına, ters1 adlı aynı veri seti oluşturulmuştur. İkinci satırda ise 3 ve 4. maddelerden alınan puanlar alınarak yine ters1 adlı veri setinin içine kaydedilmiştir. Son satırda ise veri setinin yeni hali istenmiştir. Aşağıdaki sonuç elde edilir.
I1 I2 I3 I4 I5 I6
P1 2 2 1 2 3 5
P2 2 1 2 2 5 2
P3 3 4 1 1 3 4
P4 5 2 1 1 2 3
P5 5 2 5 3 5 5
P6 4 5 4 1 4 2
P7 2 4 4 2 2 2
P8 3 1 2 3 5 4
P9 2 2 2 1 1 2
P10 5 3 3 2 4 5Yukarıdaki ters1 adlı veri setine bakılacak olursa sadece I3 ve I4 isimli sütunlardaki değerlerin istediğimiz şekilde değiştiği görülecektir.
2.Yöntem: Değişkenlerin isimlerini girerek maddeleri ters puanlama
Bu yöntemde de aslında bir önceki uygulamadaki ile aynı mantık güdülmektedir. Farklı olarak, eğer büyük bir veri setiyle çalışıyorsanız ve sütunların numaraları yerine isimlerini kullanmak isterseniz aşağıdaki komut satırlarını kullanabilirsiniz.
ters2 <- veri_r
ters2[, c("I3", "I4")] <- 6 - veri_r[, c("I3", "I4")]
ters2Yukarıda sırasıyla veri_r isimli veri setini bozmamak adına, ters2 adlı aynı veri seti oluşturulmuştur. İkinci satırda ise 3 ve 4. maddelerden alınan puanlar alınarak yine ters2 adlı veri setinin içine kaydedilmiştir. Burada sütunların isimleri kullanılmıştır. Son satırda ise veri setinin yeni hali istenmiştir. Aşağıdaki sonuç elde edilir.
I1 I2 I3 I4 I5 I6
P1 2 2 1 2 3 5
P2 2 1 2 2 5 2
P3 3 4 1 1 3 4
P4 5 2 1 1 2 3
P5 5 2 5 3 5 5
P6 4 5 4 1 4 2
P7 2 4 4 2 2 2
P8 3 1 2 3 5 4
P9 2 2 2 1 1 2
P10 5 3 3 2 4 5Yukarıdaki ters2 adlı veri setine bakılacak olursa sadece I3 ve I4 isimli sütunlardaki değerlerin istediğimiz şekilde değiştiği görülecektir. ters1 nesnesi ile ters2 nesnesi birebir aynıdır.
3.Yöntem: ‘psych’ paketi içindeki reverse.code() fonksiyonu ile ters puanlama
Get Metehan Güngör’s stories in your inbox
Join Medium for free to get updates from this writer.
Bu yöntemde bir paketin kurulumuna ve çalıştırılmasına ihtiyaç duymaktayız.
install.packages("psych")
library(psych)
tersmaddeler <- c(1, 1, -1, -1, 1, 1)
reverse.code(tersmaddeler, veri_r, mini = 1, maxi = 5)Yukarıda sırasıyla “psych” paketi kurulmuş ve çalıştırılmıştır. Ardından tersmaddeler isimli bir vektör oluşturulmuştur. Bu vektörün iki elemanı -1, diğer elemanları 1'dir. Ardından reverse.code() fonksiyonu yardımıyla yeni veri seti elde edilmiştir. Son satırda ise veri setinin yeni hali istenmiştir. Aşağıdaki sonuç elde edilir.
I1 I2 I3- I4- I5 I6
P1 2 2 1 2 3 5
P2 2 1 2 2 5 2
P3 3 4 1 1 3 4
P4 5 2 1 1 2 3
P5 5 2 5 3 5 5
P6 4 5 4 1 4 2
P7 2 4 4 2 2 2
P8 3 1 2 3 5 4
P9 2 2 2 1 1 2
P10 5 3 3 2 4 5Yukarıdaki veri seti incelendiğinde 3 ve 4. sütundaki maddelerin ters puanlandığı görülebilir. Ayrıca değişkenlerin yanına bir de eksi (-) işareti gelmiştir. Bu örnekte reverse.code() fonksiyonu kullanılırken mini ve maxi argümanlarının kullanılmaması hatalı bir dönüştürme işlemine sebep olacaktır. Bu konuda dikkatli olunmalıdır.
4.Yöntem: fix() fonksiyonu kullarak elle veri düzenleme
Bu yöntemde aşağıdaki satır komutunu çalıştırmanız yeterlidir.
ters4 <- veri_r
fix(ters4)Yukarıda sırasıyla veri_r isimli veri setini bozmamak adına, ters4 adlı aynı veri seti oluşturulmuştur. fix() fonksiyonu kullanılarak bir veri düzenleme ekranına ulaşılmıştır. İlgili kodlar çalıştırıldığında, ekrana aşağıdaki Data Editor gelecektir.
Yukarıda yer alan kutucuklara tıklayarak dilediğiniz kutucuktaki değeri değiştirebilirsiniz. Bu yöntemin çok sayıda gözlem içeren veri setlerinde kullanışlı olmayacağı açıktır.
5.Yöntem: apply() fonksiyonunu kullanarak maddeleri ters puanlama
Bu yöntemde apply() fonksiyonunun içine istenen fonksiyonlar yazılarak değiştirilmek istenen sütunlarla ilgili işlemler yapılabilir. 3 ve 4. sütunlardaki maddelerin ters puanlanabilmesi için aşağıdaki satır komutları çalıştırılabilir.
ters5 <- veri_r
k <- apply(ters5[, c(3,4)], 2, function(x) 6-x)
k
yeni_k <- data.frame(ters5[, 1:2], k, ters5[, 5:6])
yeni_kYukarıda sırasıyla veri_r isimli veri setini bozmamak adına, ters5 adlı aynı veri seti oluşturulmuştur. İkinci satırda apply() fonksiyonunun içine fonksiyon yazılarak 3 ve 4. sütunlarda işlemlerin gerçekleştirilmesi istenmiş ve sonuçların k isimli nesneye kaydedilmesi istenmiştir. Ardından k isimli nesne çağırılmıştır. Bu nesne 2 sütunludur. Ardından hem düzenlenmiş iki sütun, hem baştaki hem de sondaki sütunlar birleştirilerek bir data frame oluşturulmuş ve yeni_k olarak isimlendirilmiştir. Son satırda ise veri setinin yeni hali istenmiştir. Aşağıdaki sonuç elde edilir.
I1 I2 I3 I4 I5 I6
P1 2 2 1 2 3 5
P2 2 1 2 2 5 2
P3 3 4 1 1 3 4
P4 5 2 1 1 2 3
P5 5 2 5 3 5 5
P6 4 5 4 1 4 2
P7 2 4 4 2 2 2
P8 3 1 2 3 5 4
P9 2 2 2 1 1 2
P10 5 3 3 2 4 56.Yöntem: ‘tidyverse’ paketi ile maddeleri ters puanlama
Bu yöntemde bir paketin kurulumuna ve çalıştırılmasına ihtiyaç duymaktayız.
install.packages("tidyverse")
library(tidyverse)
veri_r2 <- as.data.frame(veri_r)veri_r2 %>%
mutate(across(matches("^I[34]"), ~ 6 - .))#ya da aşağıdaki komutu çalıştırabilirsiniz.
veri_r2 %>%
mutate(across(I3:I4, ~ 6 - .))
Yukarıda sırasıyla “tidyverse” paketi kurulmuş ve çalıştırılmıştır. Ardından veri_r isimli nesne data frame’e dönüştürülerek veri_r2 isimli nesne oluşturulmuştur (Aksi halde mutate() fonksiyonu çalışmayacaktır). Son olarak yukarıda verilen iki ayrı komutu çalıştırarak aşağıdaki sonuçları elde edebilirsiniz. İki komut arasındaki fark şudur : Birinci komutta sadece iki sütunun (3 ve 4. sütunlar) ters puanlanması istenirken, ikinci komutta 3. sütundan 4. sütuna kadar olan sütunların ters puanlanması istenmiştir. Ancak bu örnekte iki komut da aynı anlama gelecektir.
I1 I2 I3 I4 I5 I6
P1 2 2 1 2 3 5
P2 2 1 2 2 5 2
P3 3 4 1 1 3 4
P4 5 2 1 1 2 3
P5 5 2 5 3 5 5
P6 4 5 4 1 4 2
P7 2 4 4 2 2 2
P8 3 1 2 3 5 4
P9 2 2 2 1 1 2
P10 5 3 3 2 4 5Yukarıdaki sonuçlara bakılırsa sadece I3 ve I4 isimli sütunlardaki değerlerin istediğimiz şekilde değiştiği görülecektir.
Sonuç olarak, R’da maddeleri ters puanlamanın pek çok farklı yöntemi mevcuttur. Burada birkaç tanesi örneklendirilmiştir. 1. Yöntem olarak verilen yöntem hayli kullanışlıdır. Örneklerde 5'li Likert-tipi maddeler ters puanlandığı için değerler 6'dan çıkarılmıştır. Ancak 7'li bir derecelendirme ile puanlama yapıldıysa, değerlerin 8'den çıkarılacağı unutulmamalıdır. 2. Yöntem’de de aynı mantık güdülmektedir. Sadece değişkenlerin (sütunların) numaraları yerine adlarının girilmesi ile temelde aynı işlemler yapılmaktadır. 3. Yöntemde fazladan bir paket kurulumuna ihtiyaç duyulmaktadır. Bunun haricinde minimum ve maksimum değerlerin argümanlarla birlikte verilmemesi durumunda da R yine bir sonuç döndürmektedir. Ancak bu sonuç bazen istediğimiz sonuç olmamaktadır. Bu sebeple dikkatli olunmalıdır. 4. Yöntem sadece az sayıda gözlemin/hücrenin düzenleneceği bir durumda tercih edilebilir. Onun haricinde işlevsiz olduğu söylenebilir. 5 ve 6. Yöntemlerde de bir paket kurulumuna ihtiyaç duyulmaktadır. Ayrıca bu yöntemlerdeki işlemler biraz karmaşık görünebilir. Bu yazıda ele alınan örnekte ele alınmamış olmakla birlikte, “tidyverse” paketinin içindeki mutate() fonksiyonu ile çok sayıda sütunu bulunan, kendine has değişken kodları bulunan veri setlerinde düzenlemeler yapılması daha işlevsel olabilir (örneğin PISA, TIMSS gibi veri setlerinde tamamı T harfi ile başlayan sütunların ters puanlanması ya da adının içinde 9 rakamını içeren sütunların ters puanlanması gibi). Bir hatırlatma olarak, eğer mutate() fonksiyonunun veri setinizle istediğiniz işlemleri gerçekleştiremediğine dair bir hata mesajı alırsanız, veri setinizi data frame olarak kaydetmeyi deneyebilirsiniz.








