วิธีการดำเนินการแปลงภาพอัตราส่วนภาพสามมิติ


18

ฉันมีข้อมูลเกี่ยวกับพฤติกรรมการเคลื่อนไหว (เวลาที่ใช้ในการนอนหลับอยู่ประจำที่และทำกิจกรรมทางกาย) ซึ่งมีจำนวนถึง 24 (เช่นในชั่วโมงต่อวัน) ฉันต้องการสร้างตัวแปรที่ใช้เวลาสัมพัทธ์ที่ใช้ในพฤติกรรมเหล่านี้ - ฉันได้รับแจ้งว่าการเปลี่ยนแปลงอัตราส่วนการบันทึกภาพสามมิติจะทำให้สิ่งนี้สำเร็จ

ดูเหมือนว่าฉันควรใช้ฟังก์ชั่น ilr ใน R แต่ไม่สามารถหาตัวอย่างที่แท้จริงด้วยรหัสได้ ฉันจะเริ่มที่ไหน

ตัวแปรที่ฉันมีคือเวลานอนหลับเวลานั่งนิ่งเฉลี่ยกิจกรรมออกกำลังกายเบา ๆ โดยเฉลี่ยกิจกรรมออกกำลังกายปานกลางปานกลางและออกกำลังกายแข็งแรงโดยเฉลี่ย รายงานการนอนหลับด้วยตนเองในขณะที่คนอื่น ๆ เป็นค่าเฉลี่ยจากวันที่ถูกต้องของข้อมูล accelerometer ดังนั้นสำหรับตัวแปรเหล่านี้เคสจะไม่รวมเท่ากับ 24

ฉันเดาว่าฉันทำงานใน SAS แต่ดูเหมือนว่า R จะใช้งานได้ง่ายกว่าสำหรับส่วนนี้ ดังนั้นการนำเข้าข้อมูลก่อนโดยมีเพียงตัวแปรที่น่าสนใจ จากนั้นใช้ฟังก์ชั่น acomp () จากนั้นฉันไม่สามารถหาไวยากรณ์สำหรับฟังก์ชัน ilr () ได้ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

คำตอบ:


21

การแปลง ILR (Isometric Log-Ratio) ใช้ในการวิเคราะห์ข้อมูลองค์ประกอบ การสังเกตใด ๆ คือชุดของค่าบวกที่รวมเข้ากับความสามัคคีเช่นสัดส่วนของสารเคมีในส่วนผสมหรือสัดส่วนของเวลาทั้งหมดที่ใช้ไปในกิจกรรมต่าง ๆ sum-to-unity ไม่เปลี่ยนแปลงหมายความว่าแม้ว่าอาจมีองค์ประกอบk2สำหรับการสังเกตแต่ละครั้ง แต่ก็มีเพียงค่าk-1เป็นอิสระตามหน้าที่ (เรขาคณิตการสังเกตอยู่บนk-1มิติมิติในkมิติปริภูมิแบบยุคลิดRk. ธรรมชาติอย่างง่าย ๆ นี้มีให้เห็นในรูปสามเหลี่ยมของแผนการกระจายของข้อมูลจำลองที่แสดงด้านล่าง)

โดยทั่วไปแล้วการแจกแจงของส่วนประกอบจะกลายเป็น "nicer" เมื่อมีการแปลงไฟล์บันทึก การแปลงนี้สามารถปรับขนาดได้โดยการหารค่าทั้งหมดในการสังเกตด้วยค่าเฉลี่ยเรขาคณิตก่อนบันทึก (เท่ากับบันทึกของข้อมูลในการสังเกตใด ๆ จะถูกจัดกึ่งกลางโดยการลบค่าเฉลี่ย) ซึ่งเป็นที่รู้จักกันในชื่อการแปลง "อัตรากึ่งกลางบันทึก" หรือ CLR ค่าผลลัพธ์ยังคงอยู่ภายในไฮเปอร์เพลนในRkเนื่องจากการขยายทำให้การรวมของบันทึกเป็นศูนย์ ILR ประกอบด้วยการเลือกพื้นฐานแบบดั้งเดิมใด ๆ สำหรับไฮเปอร์เพลนนี้: พิกัดk-1ของการสังเกตแต่ละครั้งที่เปลี่ยนรูปกลายเป็นข้อมูลใหม่ เท่าไฮเปอร์เพลหมุน (หรือสะท้อน) ให้ตรงกับเครื่องบินหายไปกับkTHประสานงานและเป็นหนึ่งในการใช้งานครั้งแรกk-1พิกัด (เพราะการหมุนและการสะท้อนรักษาระยะห่างพวกเขาจะisometriesดังนั้นชื่อของขั้นตอนนี้.)

Tsagris, Preston และ Wood กล่าวว่า "ตัวเลือกมาตรฐานของ [เมทริกซ์การหมุน] Hคือเมทริกซ์ย่อยของ Helmert ที่ได้จากการเอาแถวแรกออกจากเมทริกซ์ Helmert"

เมทริกซ์คำสั่ง Helmert ของkถูกสร้างขึ้นในลักษณะที่เรียบง่าย (ดูตัวอย่าง Harville p. 86) แถวแรกของมันคือ1วินาที แถวถัดไปเป็นหนึ่งในที่ง่ายที่สุดที่สามารถทำฉากกับแถวแรกคือ(1,-1,0,...,0) ) แถวJเป็นหนึ่งในวิธีที่ง่ายที่สุดที่มีมุมฉากกับแถวก่อนหน้าทั้งหมด: รายการแรกของJ-1คือ1วินาที, ซึ่งรับประกันได้ว่าเป็นมุมฉากกับแถว2,3,...,J-1และของJTHรายการถูกตั้งไว้ที่1-Jที่จะทำให้มันตั้งฉากกับแถวแรก (นั่นคือรายการที่จะต้องรวมศูนย์) แถวทั้งหมดจะถูกลดขนาดเป็นความยาวหน่วย

ที่นี่เพื่อแสดงให้เห็นถึงรูปแบบเป็นเมทริกซ์เฮลเมอร์4×4ก่อนที่จะลดแถว:

(11111-10011-20111-3).

(แก้ไขเพิ่มสิงหาคม 2017) แง่มุมที่ดีอย่างหนึ่งของ "ความแตกต่าง" เหล่านี้ (ซึ่งอ่านทีละแถว) คือความสามารถในการตีความ แถวแรกถูกลบทิ้งเหลือk-1แถวที่เหลือเพื่อแสดงข้อมูล แถวที่สองเป็นสัดส่วนกับความแตกต่างระหว่างตัวแปรที่สองและที่หนึ่ง แถวที่สามเป็นสัดส่วนกับความแตกต่างระหว่างตัวแปรที่สามและสองคนแรก โดยทั่วไปแถวJ ( 2Jk ) สะท้อนความแตกต่างระหว่างตัวแปรJและสิ่งที่อยู่ข้างหน้าตัวแปร1,2,...,J-1. สิ่งนี้ทำให้ตัวแปรแรกJ=1เป็น "ฐาน" สำหรับความต่างทั้งหมด ฉันพบว่าการตีความเหล่านี้มีประโยชน์เมื่อติดตาม ILR โดยการวิเคราะห์ส่วนประกอบหลัก (PCA): ช่วยให้การตีความการโหลดอย่างน้อยคร่าว ๆ ในแง่ของการเปรียบเทียบระหว่างตัวแปรดั้งเดิม ฉันได้แทรกบรรทัดลงในการRใช้งานilrด้านล่างซึ่งให้ชื่อตัวแปรที่เหมาะสมกับเอาต์พุตเพื่อช่วยในการตีความนี้ (สิ้นสุดการแก้ไข)

เนื่องจากRมีฟังก์ชั่นcontr.helmertในการสร้างเมทริกซ์ดังกล่าว (แม้ว่าจะไม่มีการปรับสเกลและด้วยแถวและคอลัมน์ที่ถูกทำให้เป็นโมฆะและถ่ายโอน) คุณไม่จำเป็นต้องเขียนโค้ด (ง่าย) เพื่อทำเช่นนั้น เมื่อใช้สิ่งนี้ฉันได้ใช้ ILR (ดูด้านล่าง) ในการออกกำลังกายและทดสอบฉันสร้างการดึงอิสระ1000ครั้งจากการแจกแจง Dirichlet (ด้วยพารามิเตอร์1,2,3,4 ) และวางแผนตารางเมทริกซ์สแคตเตอร์ นี่k=4 4

รูปที่ 1

จุดทั้งหมดอยู่ใกล้กับมุมซ้ายล่างและเติมแพตช์สามเหลี่ยมของพื้นที่การพล็อตตามลักษณะของข้อมูลประกอบ

ILR ของพวกเขามีเพียงสามตัวแปร, พล็อตเป็นเมทริกซ์กระจายอีกครั้ง:

Figure_2

สิ่งนี้จะดูดีกว่า: scatterplots ได้รับรูปร่าง "รูปวงรีเมฆ" ที่มีลักษณะเฉพาะมากขึ้นตอบสนองต่อการวิเคราะห์อันดับสองได้ดีขึ้นเช่นการถดถอยเชิงเส้นและ PCA

Tsagris และคณะ พูดคุยเรื่อง CLR โดยใช้การแปลง Box-Cox ซึ่งสรุปลอการิทึม (บันทึกคือการแปลง Box-Cox พร้อมพารามิเตอร์0 ) มันมีประโยชน์เพราะตามที่ผู้เขียน (ถูกต้อง IMHO) ให้เหตุผลในหลาย ๆ แอปพลิเคชันข้อมูลที่ควรจะกำหนดการเปลี่ยนแปลงของพวกเขา ข้อมูลเหล่านี้ Dirichlet พารามิเตอร์ของ1/2 (ซึ่งเป็นครึ่งทางระหว่างไม่มีการเปลี่ยนแปลงและการเปลี่ยนแปลงเข้าสู่ระบบ) ผลงานที่สวยงาม:

Figure_3

1/2


การวางนัยทั่วไปนี้ใช้งานในilrฟังก์ชั่นด้านล่าง คำสั่งในการสร้างตัวแปร "Z" เหล่านี้เป็นเพียงแค่

z <- ilr(x, 1/2)

ข้อดีอย่างหนึ่งของการแปลง Box-Cox คือการบังคับใช้กับการสังเกตที่มีค่าศูนย์จริง: มันยังคงถูกกำหนดหากพารามิเตอร์นั้นเป็นค่าบวก

อ้างอิง

Michail T. Tsagris ไซมอนเพรสตันและแอนดรู TA ไม้, การเปลี่ยนแปลงอำนาจข้อมูลที่ใช้สำหรับข้อมูล compositional arXiv: 1106.1451v2 [stat.ME] 16 มิถุนายน 2554

เดวิดเอ Harville, เมทริกซ์พีชคณิตจากมุมมองของนักสถิติ Springer Science & Business Media, 27 มิ.ย. 2551


นี่คือRรหัส

#
# ILR (Isometric log-ratio) transformation.
# `x` is an `n` by `k` matrix of positive observations with k >= 2.
#
ilr <- function(x, p=0) {
  y <- log(x)
  if (p != 0) y <- (exp(p * y) - 1) / p       # Box-Cox transformation
  y <- y - rowMeans(y, na.rm=TRUE)            # Recentered values
  k <- dim(y)[2]
  H <- contr.helmert(k)                       # Dimensions k by k-1
  H <- t(H) / sqrt((2:k)*(2:k-1))             # Dimensions k-1 by k
  if(!is.null(colnames(x)))                   # (Helps with interpreting output)
    colnames(z) <- paste0(colnames(x)[-1], ".ILR")
  return(y %*% t(H))                          # Rotated/reflected values
}
#
# Specify a Dirichlet(alpha) distribution for testing.
#
alpha <- c(1,2,3,4)
#
# Simulate and plot compositional data.
#
n <- 1000
k <- length(alpha)
x <- matrix(rgamma(n*k, alpha), nrow=n, byrow=TRUE)
x <- x / rowSums(x)
colnames(x) <- paste0("X.", 1:k)
pairs(x, pch=19, col="#00000040", cex=0.6)
#
# Obtain the ILR.
#
y <- ilr(x)
colnames(y) <- paste0("Y.", 1:(k-1))
#
# Plot the ILR.
#
pairs(y, pch=19, col="#00000040", cex=0.6)

1
@Alex ฉันไม่เข้าใจความหมายของคำว่า "ปลอม" ที่สัมพันธ์กัน ใช่ตัวแปรต้องขึ้นอยู่กับ - แต่งานของ PCA คือการช่วยให้คุณระบุลักษณะและปริมาณการอ้างอิงเหล่านั้น หมายเหตุด้วยเช่นกันว่าผลรวมของ CLR นั้นไม่คงที่ (แม้ว่า CLR จะขึ้นอยู่กับค่าที่รวมเป็นเอกภาพ)
whuber

1
@Alex ทำไมไม่ศึกษาเพียงแค่เอาต์พุต PCA ถ้ามันซับซ้อนและคุณต้องการมุ่งเน้นไปที่ตัวแปรสองตัวให้ทำ PCA ของตัวแปรทั้งสองนั้น แผนการกระจายของพวกเขาจะเปิดเผยธรรมชาติและขอบเขตของความเป็นคู่ใด ๆ
whuber

1
@Alex แน่นอน - นั่นเป็นเหตุผลที่ฉันใช้ scatterplots ในคำตอบนี้เพื่ออธิบาย ILR!
whuber

2
@Alex นั่นเป็นคำพูดที่น่าสนใจ ดูเหมือนว่าจะสะท้อนถึงปรัชญาที่บินผ่านหน้า EDA (เหนือสิ่งอื่นใด) ซึ่งแสดงให้เห็นว่าเมื่อเราสามารถค้นหาการแสดงออกของตัวแปรที่ก่อให้เกิดความสัมพันธ์ที่เป็นประโยชน์หรือให้ข้อมูลนั่นเป็นสิ่งที่ดีไม่ใช่ปัญหา ผู้เสนอของ EDA (เช่น John Tukey) ยืนยันว่ารูปแบบที่แสดงข้อมูลในตอนแรกไม่จำเป็นต้องเป็นรูปแบบที่พวกเขาควรจะวิเคราะห์ในขณะที่ใบเสนอราคานี้โดยนัยจะตรงกันข้าม ฉันจะปล่อยให้คุณตัดสินใจว่าวิธีไหนมีประโยชน์มากกว่า
whuber

1
@Eli ความคิดเห็นนั้นตั้งใจจะอ้างถึง CLR ทั่วไป ตามที่ฉันเขียนไว้ในเนื้อความของคำตอบนี้ "การขยายขนาดทำให้ผลรวมของบันทึกเป็นศูนย์"
whuber

5

สำหรับกรณีการใช้งานของคุณมันก็โอเคที่จะลดขนาดทุกอย่างลง ความจริงที่ว่าตัวเลขไม่ได้เพิ่มขึ้นอย่างแน่นอนถึง 24 จะเพิ่มเสียงรบกวนเล็กน้อยให้กับข้อมูล แต่มันก็ไม่ควรทำให้เรื่องยุ่งเหยิง

RD-1D

รายละเอียดทางเทคนิคทั้งหมดนอกเหนือจากนั้นสิ่งสำคัญคือต้องทราบวิธีการตีความข้อมูลที่ถูกแปลง ILR อย่างถูกต้อง ในที่สุดการแปลง ILR เพียงหมายถึงอัตราส่วนการบันทึกของกลุ่ม แต่มันกำหนดด้วยความเคารพต่อลำดับชั้นที่กำหนดไว้ล่วงหน้า หากคุณกำหนดลำดับชั้นดังนี้

ป้อนคำอธิบายรูปภาพที่นี่

ตัวแปรที่แปลงแต่ละตัวสามารถคำนวณได้ดังนี้

ผม=RsR+sLNก.(Rผม)ก.(Sผม)

ผมRผมผมSผมผมก.(...)หมายถึงค่าเฉลี่ยเรขาคณิต ตัวแปรที่แปลงเหล่านี้รู้จักกันในนามของยอดคงเหลือ

ดังนั้นคำถามต่อไปคือคุณจะกำหนดลำดับชั้นของตัวแปรได้อย่างไร สิ่งนี้ขึ้นอยู่กับคุณ แต่ถ้าคุณมีตัวแปรสามตัวมีการผสมกันไม่มากเกินไป ตัวอย่างเช่นคุณสามารถกำหนดลำดับชั้นได้

                        /-A
            /(A|B)-----|
-(AB|C)----|            \-B
           |
            \-C

ABC(A|B)A B12LNAB(AB|)AB23LNABยอดเงินต้น

แต่กลับไปที่คำถามเดิมของคุณคุณจะใช้ข้อมูลนี้เพื่อทำการแปลงค่าจริงได้อย่างไร?

หากคุณใช้ R ฉันจะเช็คเอาต์แพคเกจการแต่งเพลง

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

        A  B  C
(A|B)   1 -1  0
(AB|C)  1  1 -1

โดยที่ค่าบวกแสดงถึงตัวแปรในตัวเศษค่าลบแสดงถึงตัวแปรในส่วนและศูนย์แสดงถึงการขาดของตัวแปรนั้นในยอดคงเหลือ คุณสามารถสร้างพื้นฐาน orthonormal โดยใช้balanceBaseจาก SBP ที่คุณกำหนดไว้
เมื่อคุณมีสิ่งนี้แล้วคุณควรจะสามารถส่งผ่านตารางสัดส่วนของคุณพร้อมกับพื้นฐานที่คุณคำนวณข้างต้น

ฉันจะตรวจสอบข้อมูลอ้างอิงนี้สำหรับคำจำกัดความดั้งเดิมของยอดคงเหลือ


4

โพสต์ดังกล่าวข้างต้นตอบคำถามเกี่ยวกับวิธีการสร้างพื้นฐาน ILR และได้รับยอดคงเหลือ ILR ของคุณ หากต้องการเพิ่มสิ่งนี้ทางเลือกของที่พื้นฐานสามารถบรรเทาการแปลผลของคุณ

คุณอาจสนใจในพาร์ติชั่นพาร์ติชั่นต่อไปนี้:

(1) (นอน, อยู่ประจำ | physical_activity) (2) (นอน | อยู่ประจำ)

เนื่องจากคุณมีองค์ประกอบสามส่วนในการจัดองค์ประกอบของคุณคุณจะได้รับยอดคงเหลือ ILR สองรายการเพื่อทำการวิเคราะห์ โดยการตั้งค่าพาร์ติชันดังกล่าวข้างต้นคุณสามารถรับยอดคงเหลือที่สอดคล้องกับ "ใช้งานอยู่หรือไม่" (1) และ "รูปแบบที่ไม่มีการใช้งาน" (2)

หากคุณวิเคราะห์ยอดคงเหลือ ILR แต่ละรายการตัวอย่างเช่นดำเนินการถดถอยกับช่วงเวลาของวันหรือช่วงเวลาของปีเพื่อดูว่ามีการเปลี่ยนแปลงใด ๆ หรือไม่คุณสามารถตีความผลลัพธ์ในแง่ของการเปลี่ยนแปลงใน "การใช้งานหรือไม่" และการเปลี่ยนแปลงใน "รูปแบบที่ไม่มีการใช้งาน"

ในทางกลับกันถ้าคุณจะใช้เทคนิคเช่น PCA ซึ่งได้รับพื้นฐานใหม่ในพื้นที่ ILR ผลลัพธ์ของคุณจะไม่ขึ้นอยู่กับการเลือกพาร์ติชันของคุณ นี่เป็นเพราะข้อมูลของคุณมีอยู่ใน CLR-space, ระนาบ D-1 orthogonal ต่อหนึ่งเวกเตอร์, และยอดคงเหลือ ILR เป็นตัวเลือกที่แตกต่างกันของแกนยูนิต - นอร์มเพื่ออธิบายตำแหน่งของข้อมูลบนระนาบ CLR

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.