Ilham F.N. & Niken Prasasti
November, 2017
| Objek class yang sama | Kelas objek yang berbeda | Dimensi | |
|---|---|---|---|
| Vector | yes | ||
| List | yes | ||
| Matrix | yes | yes | |
| Data frame | yes | yes |
enter (pada console) atau ctrl + r (pada script)sum(1:5)
[1] 15
<- atau=data <- sum(1:5)
data
[1] 15
?read.csv
x <- vector("numeric", length = 10)
x
[1] 0 0 0 0 0 0 0 0 0 0
y <- list(TRUE, 1, "a")
y
[[1]]
[1] TRUE
[[2]]
[1] 1
[[3]]
[1] "a"
rm(object)
rm(x)
Proses ini merupakan tahap awal yang penting sebelum mulai bekerja dengan bahasa R, karena kita harus mempersiapkan data sebelum dapat dianailisis lebih lanjut. Proses yang perlu kita ketahui diantaranya adalah
Import data. R bisa import berbagai jenis data, diantaranya adalah file dengan ekstensi .csv, .xlsx, .txt, hingga .sav. Untuk saat ini kita akan mengimport file .csv
data <- read.csv(file = "file location", header = TRUE)
File> Import Dataset. kemudian pilih bentuk data yang ada inginkanMelihat data. Untuk dapat melihat sekilas data, kita dapat menggunakan command head(data) atau tail(data)
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Memeriksa data yang hilang. R sangat sensitif pada data, sehingga dalam setiap proses data yang hilang atau tidak ada harus diperlakukan secara khusus. Oleh karena proses mengetahui apakah dalam data kita ada yang hilang atau tidak merupakan hal yang penting.
colSums(is.na(mtcars))
mpg cyl disp hp drat wt qsec vs am gear carb
0 0 0 0 0 0 0 0 0 0 0
Mengetahui jenis objek Mengetahui bentuk objek yang kita kerjakan adalah hal yang sangat penting karena berbagai macam fungsi di R memiliki syarat spesifik untuk menggunakan jenis objek tertentu. Fungsi yang dapat digunakan untuk ini adalah class(object)
class(mtcars)
[1] "data.frame"
Menggabungkan kolom dan baris Kita dapat menggabungkan kolom yang memiliki jumlah baris yang sama dengan command cbind dan baris yang memiliki kolom yang sama dengan rbind
b <- matrix(c(2, 4, 3, 1, 5, 7), nrow = 3)
c <- matrix(c(7,4,2), nrow = 3)
d <- matrix(c(6, 2), nrow = 1)
b
[,1] [,2]
[1,] 2 1
[2,] 4 5
[3,] 3 7
c
[,1]
[1,] 7
[2,] 4
[3,] 2
d
[,1] [,2]
[1,] 6 2
cbind(b, c)
[,1] [,2] [,3]
[1,] 2 1 7
[2,] 4 5 4
[3,] 3 7 2
rbind(b, d)
[,1] [,2]
[1,] 2 1
[2,] 4 5
[3,] 3 7
[4,] 6 2
Subsetting data Untuk mempercepat pemrosesan data, kadang kita tidak membutuhkan seluruh data yang ada pada data.frame. Maka kita dapat membuat objek baru dengan mengambil bagian yang diinginkan.
data(mtcars)
head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
sub_mtcars <- mtcars[ ,1:3]
head(sub_mtcars)
mpg cyl disp
Mazda RX4 21.0 6 160
Mazda RX4 Wag 21.0 6 160
Datsun 710 22.8 4 108
Hornet 4 Drive 21.4 6 258
Hornet Sportabout 18.7 8 360
Valiant 18.1 6 225
sub_mtcars2 <- mtcars[1:3, ]
sub_mtcars2
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Memberi nama variabel Data yang Anda import memiliki kemungkin memiliki nama yang kurang efisien untuk digunakan dalam pemrograman R. Hal itu dapat terjadi karena nama yang terlalu panjang, dan membingungkan. Sehingga ada kalanya kita harus merubah nama variabel yang ada.
data <- data.frame(1:3, 4:6, 7:9)
data
X1.3 X4.6 X7.9
1 1 4 7
2 2 5 8
3 3 6 9
names(data) <- c("alpha", "gamma", "beta")
data
alpha gamma beta
1 1 4 7
2 2 5 8
3 3 6 9
Melihat dimensi objek Jika objek berupa matrix atau data.frame maka ada dimensi yang harus kita ketahui mengenai objek tersebut. Fungsi itu dapat dilakukan dengan menggunakan command ncol(object) , nrow(object), dim(object)
ncol(mtcars)
[1] 11
nrow(mtcars)
[1] 32
dim(mtcars)
[1] 32 11
Tabel kontigensi Dalam melihat data, seringkali kita ingin melihat ringkasan data dalam bentuk kontigensi tabel untuk memudahkan kita. Ini dapat dilakukan dengan menggunakan fungsi table(object)
table(mtcars$cyl)
4 6 8
11 7 14
table(mtcars$cyl, mtcars$gear)
3 4 5
4 1 8 2
6 2 4 1
8 12 0 2
Histogram
hist(mtcars$drat, xlab = "drat", main = "Histogram data mtcars", col = "red")
Scatter plot
plot(mtcars$mpg ~ mtcars$drat, main = "Scatter Plot of mtcars", xlab = "drat", ylab = "mpg")
Density
plot(density(mtcars$drat), xlab = "drat", main = "Distribution of drat mtcars")
Boxplot
boxplot(mtcars$drat ~ mtcars$cyl, main = "Boxplot of mtcars", xlab = "Cylinder", ylab = "drat")
rm(list = ls())vector bernama x dan y dimana masing-masing berisi objek numerik 1 sampai dengan 5 list bernama z yang berisi objek logical, numeric, character, complex, dan integer dengan urutan tersebutmatrix bernama w yang berdimensi 2 x 5 dengan menggabungkan vector x dan ymatrix bernama q yang berdimensi 5 x 2 dengan menggabungkan vector x dan ypackage yang diperlukaninstall.packages("corrplot")
install.packages("car")
package yang akan digunakanlibrary(car)
library(corrplot)
library(moments)
library(e1071)
hbat <- read.csv("hbat.csv", header = TRUE)
data_hbat <- hbat[8:24]
head(hbat)
X id x1 x2 x3
1 1 1 1 to 5 years Magazine industry Large (500+)
2 2 2 Over 5 years Newsprint industry Small (0 to 499)
3 3 3 Over 5 years Magazine industry Large (500+)
4 4 4 Less than 1 year Newsprint industry Large (500+)
5 5 5 1 to 5 years Magazine industry Large (500+)
6 6 6 Less than 1 year Newsprint industry Small (0 to 499)
x4 x5 x6 x7 x8 x9 x10 x11
1 Outside North America Direct to customer 8.5 3.9 2.5 5.9 4.8 4.9
2 USA/North America Indirect through broker 8.2 2.7 5.1 7.2 3.4 7.9
3 Outside North America Direct to customer 9.2 3.4 5.6 5.6 5.4 7.4
4 Outside North America Indirect through broker 6.4 3.3 7.0 3.7 4.7 4.7
5 USA/North America Direct to customer 9.0 3.4 5.2 4.6 2.2 6.0
6 Outside North America Indirect through broker 6.5 2.8 3.1 4.1 4.0 4.3
x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 X24
1 6.0 6.8 4.7 4.3 5.0 5.1 3.7 8.2 8.0 8.4 65.1 Yes, would consider 2
2 3.1 5.3 5.5 4.0 3.9 4.3 4.9 5.7 6.5 7.5 67.1 No, would not consider 1
3 5.8 4.5 6.2 4.6 5.4 4.0 4.5 8.9 8.4 9.0 72.1 Yes, would consider 3
4 4.5 8.8 7.0 3.6 4.3 4.1 3.0 4.8 6.0 7.2 40.1 No, would not consider 1
5 4.5 6.8 6.1 4.5 4.5 3.5 3.5 7.1 6.6 9.0 57.1 No, would not consider 2
6 3.7 8.5 5.1 9.5 3.6 4.7 3.3 4.7 6.3 6.1 50.1 No, would not consider 3
head(data_hbat)
x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22
1 8.5 3.9 2.5 5.9 4.8 4.9 6.0 6.8 4.7 4.3 5.0 5.1 3.7 8.2 8.0 8.4 65.1
2 8.2 2.7 5.1 7.2 3.4 7.9 3.1 5.3 5.5 4.0 3.9 4.3 4.9 5.7 6.5 7.5 67.1
3 9.2 3.4 5.6 5.6 5.4 7.4 5.8 4.5 6.2 4.6 5.4 4.0 4.5 8.9 8.4 9.0 72.1
4 6.4 3.3 7.0 3.7 4.7 4.7 4.5 8.8 7.0 3.6 4.3 4.1 3.0 4.8 6.0 7.2 40.1
5 9.0 3.4 5.2 4.6 2.2 6.0 4.5 6.8 6.1 4.5 4.5 3.5 3.5 7.1 6.6 9.0 57.1
6 6.5 2.8 3.1 4.1 4.0 4.3 3.7 8.5 5.1 9.5 3.6 4.7 3.3 4.7 6.3 6.1 50.1
qqnorm(hbat$x9)
qqline(hbat$x9, col = "red")
ks.test(hbat$x9, "pnorm", mean(hbat$x9), sd(hbat$x9), alternative = "two.sided")
One-sample Kolmogorov-Smirnov test
data: hbat$x9
D = 0.051072, p-value = 0.9567
alternative hypothesis: two-sided
library(e1071)
kurtosis(hbat$x9, type = 2)
[1] -0.5858665
skewness(hbat$x9, type = 2)
[1] -0.1358107
Sebelum kita membuat model linear kita perlu melihat korelasi dari data yang kita punya menggunakan package corrplot. Dengan anggapan bahwa penelitia tidak punya teori dasar untuk kasus ini.
library(corrplot)
M <- cor(data_hbat)
corrplot(M, method = "number")
Kita akan membuat model regresi linear dengan variabel dependen satisfaction (X19), dan variabel independen complaint resolution (X9), sales force image (X12), dan delivery speed (X18). Command lm digunakan di dalam R untuk membuat model linear.
\[ X_{19} = X_9 + X_{12} + X_{18} \]
lm(y ~ x1 + x2 + x3, data = data)
mod1 <- lm(x19 ~ x18 + x9 + x12, data = data_hbat)
summary(mod1)
Call:
lm(formula = x19 ~ x18 + x9 + x12, data = data_hbat)
Residuals:
Min 1Q Median 3Q Max
-2.02354 -0.66848 -0.01179 0.73972 1.60653
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.83021 0.54830 3.338 0.00120 **
x18 0.18057 0.23493 0.769 0.44401
x9 0.41548 0.14120 2.943 0.00408 **
x12 0.41480 0.08293 5.002 2.56e-06 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.8515 on 96 degrees of freedom
Multiple R-squared: 0.505, Adjusted R-squared: 0.4895
F-statistic: 32.65 on 3 and 96 DF, p-value: 1.238e-14
Untuk hasil yang lebih detail dilihat pada model dengan mod diikuti dengan lambang $ kemudian pilih objek apa yang ingin anda lihat
mod1$coefficients
(Intercept) x18 x9 x12
1.8302133 0.1805684 0.4154849 0.4148016
mod1$call
lm(formula = x19 ~ x18 + x9 + x12, data = data_hbat)
Breusch-Godfrey test
library(lmtest)
bptest(mod1)
studentized Breusch-Pagan test
data: mod1
BP = 3.0805, df = 3, p-value = 0.3794
VIF
library(car)
vif(mod1)
x18 x9 x12
4.064678 3.974759 1.079734
plot(mod1, pch=16, which=1)
install.packages("modEVA")
| Multiple Regression | Logistics Regression |
|---|---|
| Total sum of squares | -2LL of Base model |
| Error sum of squares | -2LL of proposed model |
| Regression sum of squares | Difference of -LL base and proposed model |
| F test of model fit | Chi-square test of -2LL difference |
| Coefficient of determination | “Pseudo” R2^ measure |
\[ Logit_i = ln \left( \frac{prob_{event}}{1 - prob_{event}} \right) = b_0 + b_1X_1 + ... +b_nX_n \]
\[ Odds_i = \left( \frac{prob_{event}}{1 - prob_{event}} \right) = e^{b_0 + b_1X_1 + ... +b_nX_n} \]
Kita akan menggunakan data yang sama yaitu hbat. Pertama kita akan mengidentifikasi variabel mana yang mungkin digunakan di dalam regresi logistik. Untuk dependen variabel kita akan mencari variabel yang bersifat biner. Kita akan melihat berapa tingkat faktor yang ada di dalam data dengan fungsi str.
str(hbat)
'data.frame': 100 obs. of 26 variables:
$ X : int 1 2 3 4 5 6 7 8 9 10 ...
$ id : int 1 2 3 4 5 6 7 8 9 10 ...
$ x1 : Factor w/ 3 levels "1 to 5 years",..: 1 3 3 2 1 2 2 1 1 2 ...
$ x2 : Factor w/ 2 levels "Magazine industry",..: 1 2 1 2 1 2 2 1 2 1 ...
$ x3 : Factor w/ 2 levels "Large (500+)",..: 1 2 1 1 1 2 1 1 1 1 ...
$ x4 : Factor w/ 2 levels "Outside North America",..: 1 2 1 1 2 1 1 1 1 1 ...
$ x5 : Factor w/ 2 levels "Direct to customer",..: 1 2 1 2 1 2 2 2 2 2 ...
$ x6 : num 8.5 8.2 9.2 6.4 9 6.5 6.9 6.2 5.8 6.4 ...
$ x7 : num 3.9 2.7 3.4 3.3 3.4 2.8 3.7 3.3 3.6 4.5 ...
$ x8 : num 2.5 5.1 5.6 7 5.2 3.1 5 3.9 5.1 5.1 ...
$ x9 : num 5.9 7.2 5.6 3.7 4.6 4.1 2.6 4.8 6.7 6.1 ...
$ x10: num 4.8 3.4 5.4 4.7 2.2 4 2.1 4.6 3.7 4.7 ...
$ x11: num 4.9 7.9 7.4 4.7 6 4.3 2.3 3.6 5.9 5.7 ...
$ x12: num 6 3.1 5.8 4.5 4.5 3.7 5.4 5.1 5.8 5.7 ...
$ x13: num 6.8 5.3 4.5 8.8 6.8 8.5 8.9 6.9 9.3 8.4 ...
$ x14: num 4.7 5.5 6.2 7 6.1 5.1 4.8 5.4 5.9 5.4 ...
$ x15: num 4.3 4 4.6 3.6 4.5 9.5 2.5 4.8 4.4 5.3 ...
$ x16: num 5 3.9 5.4 4.3 4.5 3.6 2.1 4.3 4.4 4.1 ...
$ x17: num 5.1 4.3 4 4.1 3.5 4.7 4.2 6.3 6.1 5.8 ...
$ x18: num 3.7 4.9 4.5 3 3.5 3.3 2 3.7 4.6 4.4 ...
$ x19: num 8.2 5.7 8.9 4.8 7.1 4.7 5.7 6.3 7 5.5 ...
$ x20: num 8 6.5 8.4 6 6.6 6.3 7.8 5.8 7.5 5.9 ...
$ x21: num 8.4 7.5 9 7.2 9 6.1 7.2 7.7 8.2 6.7 ...
$ x22: num 65.1 67.1 72.1 40.1 57.1 50.1 41.1 56.1 56.1 59.1 ...
$ x23: Factor w/ 2 levels "No, would not consider",..: 2 1 2 1 1 1 1 1 2 1 ...
$ X24: int 2 1 3 1 2 3 1 3 3 2 ...
Setelah dianalisis, kita dapat menggunakan variabel \( X_4 \) (region of the customer location) sebagai variabel dependen. Tujuan dari analisis ini adalah mencari variabel yang dapat memprediksi region lokasi customer. Model ini berangkat dengan menggunakan variabel \( X_{13} \) (competitive pricing), dan \( X_{17} \) (price flexibility).
Dalam R regresi logistik dapat dilakukan dengan fungsi glm
glm(formula, data = data, family = binomial)
mylogit <- glm(x4 ~ x13 + x17, data = hbat, family = binomial)
summary(mylogit)
Call:
glm(formula = x4 ~ x13 + x17, family = binomial, data = hbat)
Deviance Residuals:
Min 1Q Median 3Q Max
-2.4354 -0.4569 -0.1785 0.6381 1.9908
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 10.1888 1.9583 5.203 1.96e-07 ***
x13 -0.6332 0.2162 -2.929 0.0034 **
x17 -1.4755 0.3783 -3.900 9.62e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 133.750 on 99 degrees of freedom
Residual deviance: 74.927 on 97 degrees of freedom
AIC: 80.927
Number of Fisher Scoring iterations: 6
Regresi logistik tidak memiliki R2, karena itu sebagai gantinya beberapa peneliti mengajukan indikator yang disebut sebagai “pseudo” R2. Indikator tersebut ada di dalam package modEVA
library(modEvA)
RsqGLM(mylogit)
$CoxSnell
[1] 0.444687
$Nagelkerke
[1] 0.6029672
$McFadden
[1] 0.4397945
$Tjur
[1] 0.5001888
$sqPearson
[1] 0.4965371
anova(mylogit, test = "Chisq")
Analysis of Deviance Table
Model: binomial, link: logit
Response: x4
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 99 133.750
x13 1 33.188 98 100.562 8.367e-09 ***
x17 1 25.634 97 74.927 4.126e-07 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
HLfit(model = mylogit, bin.method = "quantiles")
$bins.table
BinCenter NBin BinObs BinPred BinObsCIlower BinObsCIupper
1 0.006313888 10 0.0000000 0.007359984 0.00000000 0.3084971
2 0.021917919 10 0.0000000 0.021015431 0.00000000 0.3084971
3 0.052878424 9 0.0000000 0.051440760 0.00000000 0.3362671
4 0.096768023 11 0.0000000 0.095874737 0.00000000 0.2849142
5 0.174170827 10 0.3000000 0.171581105 0.06673951 0.6524529
6 0.414853510 10 0.4000000 0.434686872 0.12155226 0.7376219
7 0.667799911 9 0.8888889 0.655954883 0.51750349 0.9971909
8 0.701750940 10 0.7000000 0.706767287 0.34754715 0.9332605
9 0.815911730 10 0.7000000 0.812164678 0.34754715 0.9332605
10 0.914020546 11 0.9090909 0.913005777 0.58722008 0.9977010
$chi.sq
[1] 6.14535
$DF
[1] 8
$p.value
[1] 0.6309544
$RMSE
[1] 0.9383523