นโยบายการจัดการความรู้ มหาวิทยาลัยสงขลานครินทร์ 1.ให้ใช้เครื่องมือการจัดการความรู้ผลักดัน คุณภาพคน และกระบวนทำงาน 2.ส่งเสริมการแลกเปลี่ยนประสบการณ์การทำงาน จากหน้างาน 3.ส่งเสริมให้มีเวทีเรียนรู้ร่วมกัน

Our Shangri-La
Ico64
Kittisakdi Choomalee

ภาควิชาเวชศาสตร์ชุมชน คณะแพทยศาสตร์ มหาวิทยาลัยสงขลานครินทร์
เครือข่าย
สมาชิก · ติดตาม: 0 · ผู้ติดตาม: 16

อ่าน: 1045
ความเห็น: 1

ก้าวย่างทางเดิน ลืมเลือนคืนวัน ดั้นด้นไป: วันที่สับสน ๒๑ [C]

วันที่สับสน คนทำ (ข้อมูล) เวียนหัว

จากบันทึกที่แล้วเราค้างไว้ตรงที่ ผลลัพธ์จากความต่างของวันที่ที่สร้างขึ้นแบบสุ่มในรอบ ๑๐๑ ปีแล้วลบด้วย ๕๔๓ x ๓๖๕.๒๕ กับวันที่ที่เปลี่ยนเป็นปี ค.ศ.แล้ว ให้ผลลลัพธ์ออกมา ค่าความต่าง ๑๐๐ ค่ามีค่าเท่ากับ ๓.๗๕ กับ ๔.๗๕ และมี ๑ ค่ามีค่าเท่ากับ ๕.๗๕

หรือทำตัวเลขกลม ๆ คือ ๔, ๕ และ ๖ วันตามลำดับ

> tmp.date.dif <- tmp.date2 -tmp.date3
> head(tmp.date.dif)
Time differences in days
[1] -3.75 -3.75 -3.75 -3.75 -4.75 -4.75
> table(tmp.date.dif)
tmp.date.dif
-5.75 -4.75 -3.75
    1    29    71
> summary(as.numeric(tmp.date.dif))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
 -5.750  -4.750  -3.750  -4.057  -3.750  -3.750

 

เราพบว่าค่าความต่างของวันที่ข้างต้น มีด้วยกัน ๓ ค่าคือ -๕.๗๕, -๔.๗๕ และ -๓.๗๕ โดยมีจำนวน ๑, ๒๙, และ ๗๑ ค่าตามลำดับ

 

ค่าที่เราต้องการคือ ๓.๗๕ และ ๔.๗๕ หรือเท่ากับ ๔ หรือ ๕ วัน

 

แต่ผลลัพธ์ที่ได้กลับมีค่า ๕.๗๕ มา ๑ ค่าหรือ ๖ วัน ซึ่งเป็นค่าที่ไม่อยู่ในช่วงที่เราตั้งสมมติฐานไว้

ก่อนอื่นผมขอรวบรวมข้อมูลทั้งหมดเก็บไว้ใน data frame เดียวกัน เพื่อที่จะได้ไม่กระจัดกระจาย โดยข้อมูลทั้งหมดที่ใช้เพื่อทดสอบสมมติฐานจะเก็บไว้ใน data frame ชื่อ test.date

> test.date <- data.frame(tmp.y, stringsAsFactors=F)
> str(test.date)
'data.frame':   101 obs. of  1 variable:
 $ tmp.y: num  2507 2508 2509 2510 2511 ...
> test.date$tmp.d <- tmp.d
> test.date$tmp.m <- tmp.m
> test.date$tmp.date <- tmp.date
> test.date$tmp.date2 <- tmp.date2
> test.date$tmp.date3 <- tmp.date3
> test.date$tmp.date.dif <- tmp.date.dif
> str(test.date)
'data.frame':   101 obs. of  7 variables:
 $ tmp.y       : num  2507 2508 2509 2510 2511 ...
 $ tmp.d       : int  14 20 24 7 5 13 25 7 16 3 ...
 $ tmp.m       : int  1 12 11 2 6 2 3 2 1 7 ...
 $ tmp.date    : Date, format: "2507-01-14" "2508-12-20" "2509-11-24" "2510-02-07" ...
 $ tmp.date2   : Date, format: "1964-01-10" "1965-12-16" "1966-11-20" "1967-02-03" ...
 $ tmp.date3   : Date, format: "1964-01-14" "1965-12-20" "1966-11-24" "1967-02-07" ...
 $ tmp.date.dif:Class 'difftime'  atomic [1:101] -3.75 -3.75 -3.75 -3.75 -4.75 -4.75 -3.75 -3.75 -3.75 -3.75 ...
  .. ..- attr(*, "units")= chr "days"

คราวนี้เรามาดูกันว่าทำไมถึงมีค่าความต่างเป็นจำนวน ๖ วันโผล่มา ๑ ครั้ง และจำนวนค่าความต่างที่เท่ากับ ๓.๗๕ และ ๔.๗๕ มีค่าเป็น ๗๑ และ ๒๙ ครั้ง ตามลำดับ

ก่อนอื่นเรามาดูกันก่อนว่าในจำนวน ๑๐๑ ปีนั้นมีปีใดบ้างที่หารด้วย ๔ ลงตัว หารด้วย ๑๐๐ หรือ ๔๐๐ ลงตัว และมีจำนวนเท่าไหร่ในแต่ละกลุ่ม

> test.date$tmp.y.4 <- test.date$tmp.y %%4
> test.date$tmp.y.100 <- test.date$tmp.y %%100
> test.date$tmp.y.400 <- test.date$tmp.y %%400
> table(test.date$tmp.y.4)

 0  1  2  3
25 25 25 26
> length(test.date$tmp.y.100[test.date$tmp.y.100==0])
[1] 1
> length(test.date$tmp.y.100[test.date$tmp.y.100!=0])
[1] 100
> length(test.date$tmp.y.400[test.date$tmp.y.400==0])
[1] 0
> length(test.date$tmp.y.400[test.date$tmp.y.400!=0])
[1] 101

เราพบว่าปีที่หารด้วย ๔ ลงตัวมีทั้งหมด ๒๕ ปี ปีที่หารด้วย ๔ ไม่ลงตัวมีทั้งหมด ๒๕ + ๒๕ + ๒๖ = ๗๖ ปี

จำนวนปีที่หารด้วย ๑๐๐ ลงตัวมี ๑ ปีและไม่มีปีที่หารด้วย ๔๐๐ ลงตัว

ต่อไปเราหาปีที่หารด้วย ๑๐๐ ลงตัวว่าหารด้วย ๔ ลงตัวหรือไม่และเป็นปีใด

> test.date$tmp.date[test.date$tmp.y.100==0]
[1] "2600-02-05"
> test.date$tmp.date[test.date$tmp.y.4==0 & test.date$tmp.y.100==0]
[1] "2600-02-05"
> test.date$tmp.y[test.date$tmp.y.4==0 & test.date$tmp.y.100==0]
[1] 2600

 

ในจำนวนปี ๑๐๑ ปีของข้อมูลตัวอย่างนั้นมี ๑ ปีที่หารด้วย ๔ และ ๑๐๐ ลงตัว นั่นคือปี ๒๖๐๐

ดังนั้นปี ๒๖๐๐ จึงไม่ใช่ปีอธิกสุรทิน แต่เป็นปีปกติสุรทิน ดังนั้น วันที่ในปี ๒๖๐๐ ต้องมีค่าความต่างในตัวแปร tmp.date.dif เท่ากับ ๔.๗๕ ไม่ใช่ ๓.๗๕

เราตรวจสอบข้อมูลครับ

> test.date$tmp.date.dif[test.date$tmp.y.4==0 & test.date$tmp.y.100==0]
Time difference of -4.75 days
> test.date$tmp.date.dif[test.date$tmp.y==2600]
Time difference of -4.75 days

จากบรรทัดคำสั่งข้างต้น ๒ บรรทัดคำสั่งใช้เพื่อตรวจสอบสิ่งเดียวกัน ตรวจสอบแล้วให้ผลเหมือนกันคือ ปี ๒๖๐๐ เป็นปีที่หารด้วย ๔ และ ๑๐๐ ลงตัว แต่หารด้วย ๔๐๐ ไม่ลงตัว นั่นคือเป็นปีปกติสุรทิน ดังนั้นค่าความต่างของวันต้องเป็น ๕ วัน ซึ่งผผลลัพธ์ให้ผลความต่างที่ถูกต้อง

แต่เรายังไม่รู้ว่าข้อมูลของปีอื่น ๆ ถูกต้องทั้งหมดหรือไม่ เราต้องตรวจสอบต่อไป

แต่มีข้อสังเกตอย่างหนึ่งที่ได้จากผลสรุปจำนวนวันที่ต่างกันของข้อมูลตัวอย่าง

> table(tmp.date.dif)
tmp.date.dif
-5.75 -4.75 -3.75
    1    29    71

จากผลข้างต้นเราพบว่าความต่างของวันเท่ากับ ๔ วันนั้นมีมากถึง ๗๑ ครั้ง แต่ความต่างที่เท่ากับ ๕ วันนั้นมีจำนวนเพียงแต่ ๒๙ ครั้ง

จากข้อมูลในบันทึกก่อนหน้านี้ เช่นปี ๒๕๕๖ เมื่อปีนี้เป็นปี ค.ศ. ปีนี้จะเป็นปีอธิกสุรทิน เนื่องจากหารด้วย ๔ ลงตัวแต่หารด้วย ๑๐๐ หรือ ๔๐๐ ไม่ลงตัว และจากการตรวจสอบพบว่าค่าความต่างเป็น ๔ วัน ซึ่งเป็นค่าที่ถูกต้อง

จากผลลัพธ์ข้างต้นเราพบว่าจำนวนปีที่มีวันที่ต่างกัน ๔ วันมีถึง ๗๑ ปีใน ๑๐๑ ปีหรือหมายถึงมีปีที่เป็นปีอธิกสุรทินถึง ๗๑ ปี ซึ่งเป็นตัวเลขที่แปลก หรือมากเกินความจริง

> table(test.date$tmp.y.4)

 0  1  2  3
25 25 25 26

แต่จากการตรวจสอบปีที่หารด้วย ๔ ลงตัวพบว่า จำนวนปีที่หารด้วย ๔ ลงตัวนั้นมีจำนวนแค่ ๒๕ ปีเท่านั้น

ดังนั้นจำนวนความต่างของวันที่เท่ากับ ๔ วันต้องไม่มากกว่า ๒๕ ค่า

ในข้อมูลตัวอย่างอาจจะมีอะไรที่ผิดพลาดอยู่ ต้องทบทวนอีกรอบ

อิอิอิ

ข้อมูลอาจจะไม่ผิดแต่วิธีการที่เราทำอาจจะไม่ใช่ ไม่ได้ผิดแต่อาจจะไม่ใช่

 

อิอิอิ

แบบนี้ต้องให้คนธรรมดามาช่วยคิดว่าต้องรื้อตรงไหน

อิอิอิ

 

เราเอง

 

เพลง: สงกรานต์บ้านนา
ศิลปิน: รุ่งเพชร แหลมสิงห์

 

หมวดหมู่บันทึก: เรื่องทั่วไป
สัญญาอนุญาต: ซีซี: แสดงที่มา-ไม่ใช้เพื่อการค้า-อนุญาตแบบเดียวกัน Cc-by-nc-sa
สร้าง: 12 เมษายน 2557 11:14 แก้ไข: 01 พฤษภาคม 2563 09:37 [ แจ้งไม่เหมาะสม ]
ดอกไม้
สมาชิกที่ให้กำลังใจ: Ico24 ServiceMan, Ico24 คนธรรมดา, และ 3 คนอื่น.
สมาชิกที่ให้กำลังใจ
 
Facebook
Twitter
Google

บันทึกอื่นๆ

ความเห็น

จะให้เริ่มรื้อตรงไหนก่อนดีละครับ

คุณต้องทำการเข้าระบบก่อนแสดงความเห็น