วิธีทำให้ข้อมูลเป็นมาตรฐานใน r


ในกรณีส่วนใหญ่ เมื่อผู้คนพูดถึง “การทำให้ตัวแปรในชุดข้อมูลเป็นมาตรฐาน” หมายความว่าพวกเขาต้องการปรับขนาดค่าเพื่อให้ตัวแปรมีค่าเฉลี่ยเป็น 0 และค่าเบี่ยงเบนมาตรฐานจาก 1

สาเหตุที่พบบ่อยที่สุดในการทำให้ตัวแปรเป็นมาตรฐานคือเมื่อคุณทำการวิเคราะห์หลายตัวแปรบางประเภท (เช่น คุณต้องการเข้าใจความสัมพันธ์ระหว่างตัวแปรทำนายหลายตัวและตัวแปรตอบสนอง) และคุณต้องการให้ตัวแปรแต่ละตัวมีส่วนช่วยในการวิเคราะห์อย่างเท่าเทียมกัน

เมื่อมีการวัดตัวแปรในระดับที่แตกต่างกัน ตัวแปรเหล่านั้นมักจะไม่ได้มีส่วนช่วยในการวิเคราะห์อย่างเท่าเทียมกัน ตัวอย่างเช่น หากค่าของตัวแปรหนึ่งมีค่าตั้งแต่ 0 ถึง 100,000 และค่าของตัวแปรอื่นมีตั้งแต่ 0 ถึง 100 ตัวแปรที่มีช่วงมากกว่าจะถูกกำหนดให้มีน้ำหนักมากขึ้นในการวิเคราะห์

นี่เป็นเรื่องปกติเมื่อตัวแปรตัวหนึ่งวัดค่าบางอย่าง เช่น เงินเดือน ($0 ถึง $100,000) และอีกตัวแปรหนึ่งวัดค่าบางอย่างเช่น อายุ (0 ถึง 100 ปี)

ด้วยการกำหนดตัวแปรให้เป็นมาตรฐาน เรามั่นใจได้ว่าแต่ละตัวแปรมีส่วนช่วยในการวิเคราะห์อย่างเท่าเทียมกัน มีสองวิธีทั่วไปในการทำให้ตัวแปร (หรือ “สเกล”) เป็นมาตรฐาน:

  • การทำให้เป็นมาตรฐานต่ำสุด-สูงสุด: (X – นาที(X)) / (สูงสุด(X) – นาที(X))
  • การกำหนดมาตรฐานของคะแนน Z: (X – μ) / σ

จากนั้นเราจะแสดงวิธีการใช้เทคนิคทั้งสองนี้ใน R

วิธีทำให้ตัวแปร (หรือ “สเกล”) เป็นมาตรฐานใน R

สำหรับแต่ละตัวอย่างต่อไปนี้ เราจะใช้ ม่านตา ชุดข้อมูล R ในตัวเพื่อแสดงวิธีทำให้ตัวแปรเป็นมาตรฐานหรือปรับขนาดใน R:

 #view first six rows of iris dataset
head(iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 3.5 1.4 0.2 setosa
#2 4.9 3.0 1.4 0.2 setosa
#3 4.7 3.2 1.3 0.2 setosa
#4 4.6 3.1 1.5 0.2 setosa
#5 5.0 3.6 1.4 0.2 setosa
#6 5.4 3.9 1.7 0.4 setosa

การทำให้เป็นมาตรฐานขั้นต่ำ-สูงสุด

สูตรสำหรับการทำให้เป็นมาตรฐานขั้นต่ำ-สูงสุดคือ:

(X – นาที(X))/(สูงสุด(X) – นาที(X))

สำหรับแต่ละค่าของตัวแปร เราเพียงแต่หาระยะห่างระหว่างค่านั้นกับค่าต่ำสุด จากนั้นหารด้วยช่วง

หากต้องการนำสิ่งนี้ไปใช้ใน R เราสามารถกำหนดฟังก์ชันง่ายๆ จากนั้นใช้ laply เพื่อนำฟังก์ชันนั้นไปใช้กับคอลัมน์ในชุดข้อมูล ม่านตา ที่เราต้องการ:

 #define Min-Max normalization function
min_max_norm <- function (x) {
    (x - min(x)) / (max(x) - min(x))
  }

#apply Min-Max normalization to first four columns in iris dataset
iris_norm <- as.data.frame(lapply(iris[1:4], min_max_norm))

#view first six rows of normalized iris dataset
head(iris_norm)

# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 0.22222222 0.6250000 0.06779661 0.04166667
#2 0.16666667 0.4166667 0.06779661 0.04166667
#3 0.11111111 0.5000000 0.05084746 0.04166667
#4 0.08333333 0.4583333 0.08474576 0.04166667
#5 0.19444444 0.6666667 0.06779661 0.04166667
#6 0.30555556 0.7916667 0.11864407 0.12500000

โปรดทราบว่าตอนนี้แต่ละคอลัมน์มีค่าระหว่าง 0 ถึง 1 โปรดทราบว่าคอลัมน์ที่ห้า “สปีชีส์” ได้ถูกลบออกจากกรอบข้อมูลนี้แล้ว เราสามารถเพิ่มมันได้อย่างง่ายดายโดยใช้รหัสต่อไปนี้:

 #add back Species column
iris_norm$Species <- iris$Species

#view first six rows of iris_norm
head(iris_norm)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 0.22222222 0.6250000 0.06779661 0.04166667 setosa
#2 0.16666667 0.4166667 0.06779661 0.04166667 setosa
#3 0.11111111 0.5000000 0.05084746 0.04166667 setosa
#4 0.08333333 0.4583333 0.08474576 0.04166667 setosa
#5 0.19444444 0.6666667 0.06779661 0.04166667 setosa
#6 0.30555556 0.7916667 0.11864407 0.12500000 setosa

มาตรฐานคะแนน Z

ข้อเสียของเทคนิคการทำให้เป็นมาตรฐานขั้นต่ำ – สูงสุดคือการย้ายค่าข้อมูลให้ใกล้กับค่าเฉลี่ยมากขึ้น หากเราต้องการให้แน่ใจว่าค่าผิดปกตินั้นมีน้ำหนักมากกว่าค่าอื่นๆ การใช้มาตรฐานคะแนน z จะเป็นเทคนิคที่ดีกว่าในการนำไปใช้

สูตรในการกำหนดมาตรฐานของคะแนน z มีดังนี้:

(X – μ) / σ

สำหรับแต่ละค่าของตัวแปร เราเพียงลบค่าเฉลี่ยของตัวแปรแล้วหารด้วยค่าเบี่ยงเบนมาตรฐานของตัวแปร

เพื่อนำไปใช้ใน R เรามีหลายทางเลือก:

1. สร้างมาตรฐานให้กับตัวแปร

หากเราเพียงต้องการสร้างมาตรฐานให้กับตัวแปรในชุดข้อมูล เช่น Sepal.Width ในชุดข้อมูล iris เราสามารถใช้โค้ดต่อไปนี้:

 #standardize Sepal.Width
iris$Sepal.Width <- (iris$Sepal.Width - mean(iris$Sepal.Width)) / sd(iris$Sepal.Width)

head(iris)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 5.1 1.01560199 1.4 0.2 setosa
#2 4.9 -0.13153881 1.4 0.2 setosa
#3 4.7 0.32731751 1.3 0.2 setosa
#4 4.6 0.09788935 1.5 0.2 setosa
#5 5.0 1.24503015 1.4 0.2 setosa
#6 5.4 1.93331463 1.7 0.4 setosa

ตอนนี้ค่า Sepal.Width ได้รับการปรับขนาดเพื่อให้ค่าเฉลี่ยเป็น 0 และส่วนเบี่ยงเบนมาตรฐานคือ 1 เรายังสามารถตรวจสอบสิ่งนี้ได้หากต้องการ:

 #find mean of Sepal.Width
mean(iris$Sepal.Width)

#[1] 2.034094e-16 #basically zero

#find standard deviation of Sepal.Width
sd(iris$Sepal.Width)

#[1] 1

2. สร้างมาตรฐานให้กับตัวแปรหลายตัวโดยใช้ฟังก์ชันสเกล

หากต้องการทำให้ตัวแปรหลายตัวเป็นมาตรฐาน เราสามารถใช้ฟังก์ชัน สเกล ได้ ตัวอย่างเช่น รหัสต่อไปนี้แสดงวิธีปรับขนาดสี่คอลัมน์แรกของชุดข้อมูล ม่านตา :

 #standardize first four columns of iris dataset
iris_standardize <- as.data.frame(scale(iris[1:4]))

#view first six rows of standardized dataset
head(iris_standardize)

# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1 -0.8976739 1.01560199 -1.335752 -1.311052
#2 -1.1392005 -0.13153881 -1.335752 -1.311052
#3 -1.3807271 0.32731751 -1.392399 -1.311052
#4 -1.5014904 0.09788935 -1.279104 -1.311052
#5 -1.0184372 1.24503015 -1.335752 -1.311052
#6 -0.5353840 1.93331463 -1.165809 -1.048667

โปรดทราบว่าตามค่าเริ่ม ต้น ฟังก์ชันมาตราส่วนจะพยายามทำให้แต่ละคอลัมน์ในกรอบข้อมูลเป็นมาตรฐาน ดังนั้น เราจะได้รับข้อผิดพลาดหากเราพยายามใช้ มาตราส่วน (ม่านตา) เนื่องจากคอลัมน์ Species ไม่ใช่ตัวเลขและไม่สามารถกำหนดมาตรฐานได้:

 scale(iris)

#Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

อย่างไรก็ตาม เป็นไปได้ที่จะสร้างมาตรฐานเฉพาะตัวแปรบางตัวในกรอบข้อมูลในขณะที่ยังคงรักษาตัวแปรอื่นๆ ทั้งหมดไว้เหมือนกันโดยใช้แพ็คเกจ dplyr ตัวอย่างเช่น รหัสต่อไปนี้ทำให้ตัวแปร Sepal.Width และ Sepal.Length เป็นมาตรฐาน ในขณะที่ยังคงรักษาตัวแปรอื่นๆ ทั้งหมดไว้เหมือนเดิม:

 #load dplyr package
library(dplyr)

#standardize Sepal.Width and Sepal.Length
iris_new <- iris %>% mutate_each_(list(~scale(.) %>% as.vector),
                                  vars = c("Sepal.Width","Sepal.Length"))

#view first six rows of new data frame
head(iris_new)

# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1 -0.8976739 1.01560199 1.4 0.2 setosa
#2 -1.1392005 -0.13153881 1.4 0.2 setosa
#3 -1.3807271 0.32731751 1.3 0.2 setosa
#4 -1.5014904 0.09788935 1.5 0.2 setosa
#5 -1.0184372 1.24503015 1.4 0.2 setosa
#6 -0.5353840 1.93331463 1.7 0.4 setosa

โปรดทราบว่า Sepal.Length และ Sepal.Width ได้รับการกำหนดมาตรฐาน โดยตัวแปรทั้งสองมีค่าเฉลี่ยเป็น 0 และค่าเบี่ยงเบนมาตรฐานเป็น 1 ในขณะที่ตัวแปรอีกสามตัวในกรอบข้อมูลยังคงไม่เปลี่ยนแปลง

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *