ฉันจะแปลงข้อมูลที่ไม่เป็นลบรวมถึงศูนย์ได้อย่างไร


191

หากฉันมีข้อมูลในเชิงบวกอย่างมากฉันมักจะบันทึก แต่ฉันควรทำอย่างไรกับข้อมูลที่ไม่ใช่ค่าลบที่มีค่าเป็นศูนย์ที่เอียงอย่างมาก ฉันเห็นการเปลี่ยนแปลงสองอย่างที่ใช้:

  • log(x+1)ซึ่งมีคุณสมบัติเรียบร้อยที่ 0 แมปกับ 0
  • log(x+c)โดยที่ c ถูกประมาณหรือตั้งค่าเป็นค่าบวกที่น้อยมาก

มีวิธีอื่นอีกไหม? มีเหตุผลที่ดีไหมที่จะชอบวิธีการหนึ่งมากกว่าวิธีอื่น?


19
ฉันได้สรุปคำตอบบางส่วนพร้อมเนื้อหาอื่น ๆ ที่robjhyndman.com/researchtips/transformations
Rob Hyndman

5
วิธีที่ยอดเยี่ยมในการแปลงและส่งเสริม stat.stackoverflow!
robin girard

ใช่ฉันเห็นด้วย @robingirard (ฉันเพิ่งมาที่นี่เพราะโพสต์บล็อกของ Rob)!
Ellie Kesselman

นอกจากนี้โปรดดูstats.stackexchange.com/questions/39042/…สำหรับแอปพลิเคชันไปยังข้อมูลที่ถูกตรวจสอบทางด้านซ้าย (ซึ่งสามารถระบุลักษณะได้ถึงการเปลี่ยนตำแหน่งตรงตามคำถามปัจจุบัน)
whuber

2
มันดูแปลกที่จะถามเกี่ยวกับวิธีการแปลงโดยไม่ต้องระบุวัตถุประสงค์ของการเปลี่ยนแปลงในตอนแรก สถานการณ์คืออะไร ทำไมจึงจำเป็นต้องเปลี่ยน หากเราไม่รู้ว่าคุณกำลังพยายามทำอะไรอยู่ใครจะแนะนำอะไรอย่างมีเหตุผลได้บ้าง? (เห็นได้ชัดว่าไม่มีใครหวังว่าจะเปลี่ยนเป็นปกติเพราะการมีอยู่ของความน่าจะเป็น (ไม่ใช่ศูนย์) - ศูนย์หมายถึงเข็มในการแจกแจงที่ศูนย์ซึ่งขัดขวางการเปลี่ยนแปลงจะไม่ลบ - มันสามารถย้ายมันไปรอบ ๆ )
Glen_b

คำตอบ:


55

สำหรับฉันแล้วดูเหมือนว่าทางเลือกที่เหมาะสมที่สุดของการเปลี่ยนแปลงนั้นขึ้นอยู่กับตัวแบบและบริบท

จุด '0' สามารถเกิดขึ้นได้จากหลายสาเหตุด้วยกันซึ่งแต่ละข้ออาจต้องได้รับการปฏิบัติแตกต่างกัน:

  • การตัดปลาย (ตามตัวอย่างของ Robin): ใช้แบบจำลองที่เหมาะสม (เช่นแบบผสมแบบจำลองการอยู่รอดเป็นต้น)
  • ไม่มีข้อมูล: ใส่ข้อมูล / การสังเกตการตกถ้าเหมาะสม
  • จุดศูนย์ธรรมชาติ (เช่นระดับรายได้ผู้ว่างงานมีรายได้เป็นศูนย์): แปลงตามต้องการ
  • ความไวของเครื่องมือวัด: บางทีเพิ่มข้อมูลเล็กน้อย?

ฉันไม่ได้เสนอคำตอบจริงๆเพราะฉันคิดว่าไม่มีสากลการแปลง 'ถูกต้อง' เมื่อคุณมีเลขศูนย์


6
ทุกคำตอบสำหรับคำถามของฉันให้ข้อมูลที่เป็นประโยชน์และฉันได้รับการโหวตให้ทุกคน แต่ฉันสามารถเลือกได้เพียงคำตอบเดียวเท่านั้นและ Srikant's ให้ภาพรวม IMO ที่ดีที่สุด
Rob Hyndman

2
นอกจากนี้โปรดทราบว่ามีรุ่นที่ไม่พองศูนย์ (ศูนย์เป็นพิเศษและคุณสนใจเลขศูนย์บางส่วน: แบบผสม) และรุ่นกีดขวาง (เลขศูนย์และคุณสนใจเลขศูนย์: รุ่นสองขั้นตอนที่มีรูปแบบการเซ็นเซอร์เริ่มต้น)
Wayne

82

ไม่มีใครพูดถึงการแปลงไฮเพอร์โบลิกไซน์ผกผัน ดังนั้นเพื่อความสมบูรณ์ฉันจะเพิ่มที่นี่

นี่คือทางเลือกอื่นสำหรับการแปลงแบบ Box-Cox และถูกกำหนดโดย ที่ 0 สำหรับค่าใด ๆ ของให้ศูนย์จับคู่กับศูนย์ นอกจากนี้ยังมีรุ่นพารามิเตอร์สองตัวที่อนุญาตให้เปลี่ยนแปลงเช่นเดียวกับการแปลง BC แบบสองพารามิเตอร์ Burbidge จีและ Robb (1988)หารือเกี่ยวกับการเปลี่ยนแปลงของไอเอชเอรวมทั้งประมาณการ\θ > 0 θ θ

f(y,θ)=sinh1(θy)/θ=log[θy+(θ2y2+1)1/2]/θ,
θ>0θθ

การแปลง IHS ทำงานกับข้อมูลที่กำหนดไว้ในบรรทัดจริงทั้งหมดรวมถึงค่าลบและศูนย์ สำหรับค่าขนาดใหญ่ของมันทำหน้าที่เหมือนการแปลงบันทึกโดยไม่คำนึงถึงค่าของ (ยกเว้น 0) จำกัด การกรณีเป็นให้Yθ θ 0 F ( Y , θ ) Yyθθ0f(y,θ)y

ดูเหมือนว่าฉันจะเห็นการเปลี่ยนแปลงของ IHS มากกว่าที่เป็นอยู่


1
ดูเหมือนว่าจะเป็นทางเลือกที่ดีสำหรับการแปลง / logistictanh
Firebug

1
เกี่ยวกับ IHS ​​บางคนดูเหมือนจะไม่เห็นด้วย: onlinelibrary.wiley.com/doi/10.1890/10-0340.1/abstract
kjetil b halvorsen

3
กระดาษแผ่นนั้นเกี่ยวกับการแปลงไซน์ผกผันไม่ใช่ไฮเพอร์โบลิกไซน์ผกผัน
ไบรอัน

42

วิธีการที่มีประโยชน์เมื่อตัวแปรถูกใช้เป็นปัจจัยอิสระในการถดถอยคือการแทนที่มันด้วยสองตัวแปร: หนึ่งคือตัวบ่งชี้ไบนารีว่ามันเป็นศูนย์และอื่น ๆ เป็นค่าของตัวแปรเดิมหรือการแสดงออกของมันอีกครั้ง เช่นลอการิทึมของมัน เทคนิคนี้ถูกกล่าวถึงในหนังสือของ Hosmer & Lemeshow เรื่องการถดถอยโลจิสติก (และในที่อื่น ๆฉันแน่ใจ) แปลงความน่าจะเป็นที่ถูกตัดทอนของส่วนที่เป็นบวกของตัวแปรดั้งเดิมนั้นมีประโยชน์สำหรับการระบุการแสดงออกที่เหมาะสม (ดูการวิเคราะห์ที่https://stats.stackexchange.com/a/30749/919สำหรับตัวอย่าง)

เมื่อตัวแปรเป็นสิ่งที่ต้องพึ่งพาในตัวแบบเชิงเส้นการถดถอยแบบเซนเซอร์ (เช่นTobit ) จะมีประโยชน์และทำให้จำเป็นต้องสร้างลอการิทึมเริ่มต้นอีกครั้ง เทคนิคนี้เป็นเรื่องธรรมดาในหมู่นักเศรษฐมิติ


1
การสร้างแบบจำลองข้อมูลเป็นปัวซองที่มีค่าเป็นศูนย์เป็นกรณีพิเศษของวิธีการนี้หรือไม่?
David LeBauer

4
@ David ถึงแม้ว่าดูเหมือนว่าจะคล้ายกัน แต่ไม่ใช่เพราะ ZIP เป็นรูปแบบของตัวแปรที่ขึ้นต่อกันไม่ใช่ตัวแปรอิสระ
whuber

1
@whuber เทคนิคนี้ถูกกล่าวถึงในหนังสือของ Hosmer & Lemeshow เรื่องการถดถอยโลจิสติกคุณมีโอกาสที่จะรู้ว่าในบทใดที่พวกเขาพูดถึงเทคนิคนี้ ฉันกำลังดูหนังสือของพวกเขา แต่ดูเหมือนจะไม่สามารถหาหน้าขวา ...
landroni

1
@landroni H&L รู้สึกสดชื่นในใจฉันรู้สึกมั่นใจว่ามีบางอย่างในหนังสือเล่มนี้ที่เกี่ยวข้องกับหัวข้อนี้ (ฉันได้ปรึกษากับมันเพื่อพัฒนาตัวแบบการถดถอยที่มีขนาดใหญ่มากและตัวแปรอิสระหลายตัวต้องได้รับการปฏิบัติด้วยวิธีนี้) อย่างไรก็ตามฉันไม่สามารถหาข้อมูลอ้างอิงได้ในจุดนี้ ฉันได้เขียนเกี่ยวกับเทคนิคนี้ในโพสต์ที่ตามมาในกรณีที่คุณกำลังมองหารายละเอียด สองที่แสดงขึ้นในการค้นหาสถานที่ที่มีความstats.stackexchange.com/questions/6563และstats.stackexchange.com/questions/4831
whuber

1
@landroni ใช่มันเทียบเท่ากันในลักษณะเดียวกับการเข้ารหัสตัวเลขของตัวแปรไบนารีใด ๆ ที่เทียบเท่า เลือกอย่างใดอย่างหนึ่งที่คุณคิดว่าสะดวกที่สุดในการตีความ
whuber

37

การแปลงไฟล์บันทึกด้วยกะเป็นกรณีพิเศษของการแปลง Box-Cox :

y(λ1,λ2)={(y+λ2)λ11λ1when λ10log(y+λ2)when λ1=0

เหล่านี้เป็นรูปแบบขยายสำหรับค่าลบ แต่ยังใช้กับข้อมูลที่มีค่าศูนย์ Box and Cox (1964) นำเสนออัลกอริทึมเพื่อค้นหาค่าที่เหมาะสมสำหรับโดยใช้โอกาสสูงสุด สิ่งนี้จะให้การเปลี่ยนแปลงที่ดีที่สุดแก่คุณ λ

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

ฉันไม่แน่ใจว่าข้อมูลของคุณดีแค่ไหนเพราะอาจเป็นได้ว่าซึ่งเป็นเพียงบันทึกการแปลงที่คุณพูดถึง แต่มันอาจคุ้มค่าที่จะประเมินการตรวจสอบของอีกครั้ง การเปลี่ยนแปลงมีความเหมาะสมλλ=(0,1)λ

ใน R boxcox.fitฟังก์ชันในแพ็คเกจgeoRจะคำนวณพารามิเตอร์ให้คุณ


อืมไม่สามารถรับน้ำยาง "เริ่มคดี" เพื่อรับสายใหม่ : - /
ARS

@ars ฉันแก้ไข eqns ให้ใช้กรณีเริ่มต้น ฉันหวังว่าฉันไม่ได้ทำการลบล้าง eqns ในกระบวนการ

1
@Rob: โอ้ขอโทษ ดิ๊กเกิ้ลของ Geor เป็นวิธีที่จะไป - แต่ระบุในข้อโต้แย้งที่จะlambda2=TRUE boxcox.fit(นอกจากนี้ยังมีการปรับปรุงคำตอบ.)
อาร์

3
@ gd047: นี่คือการอ้างอิงที่ดี: elevatorlady.ca/doc/refcard/expressions.html
ARS

6
boxcoxfitสำหรับทุกคนที่อ่านนี้สงสัยว่าสิ่งที่เกิดขึ้นกับฟังก์ชั่นนี้จะเรียกว่าตอนนี้
stragu

19

ฉันสันนิษฐานว่าเป็นศูนย์! = ข้อมูลที่หายไปเนื่องจากเป็นคำถามที่แตกต่างอย่างสิ้นเชิง

เมื่อคิดถึงวิธีจัดการกับศูนย์ในการถดถอยเชิงเส้นหลายครั้งฉันมักจะพิจารณาว่าเรามีศูนย์จำนวนเท่าไร

ศูนย์สองสามเท่านั้น

หากฉันมีศูนย์เดียวในชุดข้อมูลที่มีขนาดใหญ่พอสมควรฉันมักจะ:

  1. ลบจุดบันทึกและพอดีกับรูปแบบ
  2. เพิ่มขนาดเล็กไปยังจุดบันทึกและพอดีกับแบบc

พอดีกับรูปแบบการเปลี่ยนแปลงหรือไม่ แล้วค่าพารามิเตอร์ล่ะ? ถ้าแบบเป็นธรรมมีประสิทธิภาพในการกำจัดของจุดที่ฉันจะไปหาวิธีการที่รวดเร็วและสกปรกของการเพิ่มคc

คุณสามารถทำให้ขั้นตอนนี้ลดน้อยลงเล็กน้อยและใช้วิธี boxcox พร้อมกะที่อธิบายไว้ในคำตอบของ ars

ศูนย์จำนวนมาก

หากชุดข้อมูลของฉันมีเลขศูนย์จำนวนมากแสดงว่าการถดถอยเชิงเส้นอย่างง่ายไม่ใช่เครื่องมือที่ดีที่สุดสำหรับงาน แต่ฉันจะใช้บางอย่างเช่นการสร้างแบบจำลองผสม (ตามที่ Srikant และ Robin แนะนำ)


15

หากคุณต้องการสิ่งที่รวดเร็วและสกปรกทำไมไม่ใช้สแควร์รูท?


7
และบ่อยครั้งที่การแปลงรูทของคิวบ์ทำงานได้ดีและอนุญาตให้ศูนย์และเนกาทีฟ ฉันพบว่ารูทคิวบ์จะทำงานได้ดีเป็นพิเศษเมื่อเช่นการวัดคือปริมาตรหรือจำนวนอนุภาคต่อหน่วยปริมาตร คิวบ์รูทจะแปลงเป็นมิติเชิงเส้น วิธีการที่ยืดหยุ่นมากขึ้นคือการใส่ลูกบาศก์ลูกบาศก์ที่ จำกัด (เส้นโค้งธรรมชาติ) บนคิวบ์รูทหรือสแควร์รูททำให้สามารถออกจากรูปแบบสันนิษฐานได้
Frank Harrell

2
+1 สำหรับบทความเล็ก ๆ เกี่ยวกับรูตคิวบ์ให้ดูstata-journal.com/article.html?article=st0223 (นี่จะเป็นไฟล์. pdf ฟรีจากไตรมาสแรกของปี 2014)
Nick Cox

2
รากที่สองของศูนย์เป็นศูนย์ดังนั้นเฉพาะค่าที่ไม่ใช่ศูนย์จะถูกเปลี่ยน สิ่งนี้ไม่ได้ทำอะไรเพื่อจัดการกับเข็มถ้าเป็นศูนย์เกินจริงและอาจทำให้เกิดปัญหาร้ายแรงหากในกลุ่มแต่ละคนมีเลขศูนย์ที่แตกต่างกัน กล่าวอีกนัยหนึ่งถ้าบางกลุ่มมีศูนย์จำนวนมากและอื่น ๆ มีน้อยการเปลี่ยนแปลงนี้อาจส่งผลกระทบต่อหลายสิ่งในทางลบ สำหรับกลุ่มที่มีความแปรปรวนมากที่สุด (มีค่าเป็นศูนย์น้อยที่สุด) ค่าเกือบทั้งหมดจะถูกแปลง ในทางตรงกันข้ามผู้ที่มีเลขศูนย์มากที่สุดจะมีการแปลงค่าไม่มากนัก สิ่งนี้สามารถเปลี่ยนแปลงกลุ่มที่มีความแปรปรวนมากที่สุด
D_ วิลเลียมส์

ไม่มีการแปลงจะรักษาความแปรปรวนในกรณีที่อธิบายโดย @D_Williams แบบจำลองผสม (กล่าวถึงที่อื่นในหัวข้อนี้) อาจเป็นวิธีที่ดีในกรณีนี้
mkt

10

ฉันถือว่าคุณมีข้อมูลต่อเนื่อง

หากข้อมูลมีค่าเป็นศูนย์หมายความว่าคุณมีค่าสูงสุดที่ศูนย์ซึ่งอาจเป็นเพราะข้อมูลบางส่วนของคุณ มันปรากฏตัวอย่างเช่นในพลังงานลม, ลมต่ำกว่า 2 m / s ผลิตพลังงานศูนย์ (เรียกว่าการตัด) และลมเหนือ (บางสิ่ง) 25 m / s ยังผลิตพลังงานศูนย์ (เพื่อเหตุผลด้านความปลอดภัยเรียกว่าถูกตัดออก) . ในขณะที่การกระจายตัวของพลังงานลมที่ผลิตดูเหมือนจะต่อเนื่อง

วิธีการแก้ปัญหาของฉัน: ในกรณีนี้ฉันขอแนะนำให้รักษาค่าศูนย์แยกโดยทำงานกับส่วนผสมของสไปค์เป็นศูนย์และแบบจำลองที่คุณวางแผนจะใช้สำหรับการกระจายที่ต่อเนื่อง (wrt Lebesgue)


9

การเปรียบเทียบคำตอบที่ให้ไว้ใน @RobHyndman กับการแปลง log-plus-one ที่ขยายไปเป็นค่าลบด้วยแบบฟอร์ม:

T(x)=sign(x)log(|x|+1)
r = -1000:1000

l = sign(r)*log1p(abs(r))
l = l/max(l)
plot(r, l, type = "l", xlab = "Original", ylab = "Transformed", col = adjustcolor("red", alpha = 0.5), lwd = 3)

#We scale both to fit (-1,1)
for(i in exp(seq(-10, 100, 10))){
  s = asinh(i*r)

  s = s / max(s)
  lines(r, s, col = adjustcolor("blue", alpha = 0.2), lwd = 3)
}
legend("topleft", c("asinh(x)", "sign(x) log(abs(x)+1)"), col = c("blue", "red"), lty = 1)

θθ1θ0

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


θx=0


8

เนื่องจากมีการเสนอ Box-Cox แบบสองพารามิเตอร์พอดีนี่คือ R บางส่วนเพื่อให้พอดีกับข้อมูลอินพุตเรียกใช้ฟังก์ชันตามอำเภอใจ (เช่นการคาดการณ์อนุกรมเวลา) แล้วส่งคืนเอาต์พุตขากลับ:

# Two-parameter Box-Cox function
boxcox.f <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return(((x + lambda2) ^ lambda1 - 1) / lambda1)
  } else {
    return(log(x + lambda2))
  }
}

# Two-parameter inverse Box-Cox function
boxcox.inv <- function(x, lambda1, lambda2) {
  if (lambda1!=0) {
    return((lambda1 * x + 1) ^ (1 / lambda1) - lambda2)
  } else {
    return(exp(x) - lambda2)
  }
}

# Function to Box-Cox transform x, apply function g, 
# and return inverted Box-Cox output y
boxcox.fit.apply <- function(x, g) {
  require(geoR)
  require(plyr)

  # Fit lambdas
  t <- try(lambda.pair <- boxcoxfit(x, lambda2=T)$lambda)

  # Estimating both lambdas sometimes fails; if so, estimate lambda1 only
  if (inherits(t, "try-error")) {
    lambda1 <- boxcoxfit(x)$lambda
    lambda2 <- 0
  } else {
    lambda1 <- lambda.pair[1]
    lambda2 <- lambda.pair[2]
  }
  x.boxcox <- boxcox.f(x, lambda1, lambda2)

  # Apply function g to x.boxcox. This should return data similar to x (e.g. ts)
  y <- aaply(x.boxcox, 1, g)

  return(boxcox.inv(y, lambda1, lambda2))
}

5

สมมติว่า Y คือจำนวนเงินที่ชาวอเมริกันใช้จ่ายกับรถยนต์ใหม่ในปีนั้น ๆ (ราคาซื้อทั้งหมด) Y จะขัดขวางที่ 0; จะไม่มีค่าใด ๆ ระหว่าง 0 ถึงประมาณ 12,000; และจะรับค่านิยมอื่น ๆ ส่วนใหญ่ในวัยรุ่นวัยยี่สิบและสามสิบ ผู้ทำนายจะเป็นผู้รับมอบฉันทะตามระดับความต้องการและ / หรือความสนใจในการซื้อสินค้าดังกล่าว ความต้องการหรือความสนใจนั้นแทบจะเรียกได้ว่าเป็นศูนย์สำหรับผู้ที่ไม่ซื้อ ในระดับเหล่านี้ผู้ซื้อที่ไม่ใช่ผู้ซื้อจะใกล้ชิดกับผู้ซื้อมากกว่า Y หรือแม้กระทั่งบันทึกของ Y ในกรณีเช่นนี้ แต่ในการดูแลสุขภาพฉันพบว่าการทำนายที่แม่นยำที่สุดซึ่งตัดสินโดยชุดทดสอบครอสวาลเดชันแบบทดสอบ / ชุดฝึกอบรมได้มาจากลำดับที่เพิ่มขึ้น

  1. การถดถอยโลจิสติกส์ในเวอร์ชั่นไบนารีของ Y
  2. OLS บน Y
  3. การถดถอยแบบปกติ (PLUM) บน Y หลอมเป็น 5 หมวด (เพื่อแบ่งผู้ซื้อออกเป็น 4 กลุ่มขนาดเท่ากัน)
  4. การถดถอยโลจิสติก Multinomial บน Y หลอมเป็น 5 ประเภท
  5. OLS ในบันทึก (10) ของ Y (ฉันไม่คิดว่าจะลองรูทคิวบ์) และ
  6. OLS บน Y ได้แยกออกเป็น 5 หมวดหมู่

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


4
คุณสามารถแบ่งออกเป็นสองรุ่น: ความน่าจะเป็นที่จะซื้อรถยนต์ (การตอบกลับแบบไบนารี่) และมูลค่าของรถยนต์ที่ซื้อ นี่คือการปฏิบัติมาตรฐานในหลายสาขาเช่นการประกันภัยความเสี่ยงด้านเครดิตและอื่น ๆ
Hong Ooi

1
@HongOoi - คุณสามารถแนะนำการอ่านใด ๆ เกี่ยวกับเมื่อวิธีการนี้เป็นและไม่สามารถใช้ได้?
rolando2

4

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

นี่คือบทสรุปของการเปลี่ยนแปลงด้วยข้อดี / ข้อเสียเพื่อแสดงให้เห็นว่าทำไม Yeo-Johnson จึงดีกว่า

เข้าสู่ระบบ

จุดเด่น: ทำงานได้ดีกับข้อมูลเชิงบวก

ข้อด้อย: ไม่จัดการกับศูนย์

> log(0)
[1] -Inf

บันทึกบวก 1

ข้อดี: การชดเชย 1 บวกเพิ่มความสามารถในการจัดการค่าศูนย์นอกเหนือจากข้อมูลในเชิงบวก

ข้อด้อย: ล้มเหลวด้วยข้อมูลเชิงลบ

> log1p(-1)
[1] -Inf
> log1p(-2)
[1] NaN
Warning message:
In log1p(-2) : NaNs produced

รากที่สอง

ข้อดี: ใช้การแปลงพลังงานที่สามารถจัดการศูนย์และข้อมูลในเชิงบวก

ข้อด้อย: ล้มเหลวด้วยข้อมูลเชิงลบ

> sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced

Box Cox

รหัส R:

box_cox <- function(x, lambda) {

    eps <- 0.00001
    if (abs(lambda) < eps)
        log(x)
    else
        (x ^ lambda - 1) / lambda

}

ข้อดี: เปิดใช้งานการแปลงพลังงานที่ปรับขนาด

จุดด้อย: ทนทุกข์ทรมานจากปัญหาเกี่ยวกับศูนย์และเนกาทีฟ (เช่นสามารถจัดการข้อมูลในเชิงบวกเท่านั้น

> box_cox(0, lambda = 0)
[1] -Inf
> box_cox(0, lambda = -0.5)
[1] -Inf
> box_cox(-1, lambda = 0.5)
[1] NaN

ยีโอจอห์นสัน

รหัส R:

yeo_johnson <- function(x, lambda) {

    eps <- .000001
    not_neg <- which(x >= 0)
    is_neg  <- which(x < 0)

    not_neg_trans <- function(x, lambda) {
        if (abs(lambda) < eps) log(x + 1)
        else ((x + 1) ^ lambda - 1) / lambda
    }

    neg_trans <- function(x, lambda) {
        if (abs(lambda - 2) < eps) - log(-x + 1)
        else - ((-x + 1) ^ (2 - lambda) - 1) / (2 - lambda)
    }

    x[not_neg] <- not_neg_trans(x[not_neg], lambda)

    x[is_neg] <- neg_trans(x[is_neg], lambda)

    return(x)

}

ข้อดี: สามารถจัดการข้อมูลในเชิงบวกศูนย์และลบ

จุดด้อย: ไม่มีที่ฉันสามารถคิดได้ คุณสมบัติคล้ายกับ Box-Cox มาก แต่สามารถจัดการข้อมูลที่เป็นศูนย์และลบได้

> yeo_johnson(0, lambda = 0)
[1] 0
> yeo_johnson(0, lambda = -0.5)
[1] 0
> yeo_johnson(-1, lambda = 0.5)
[1] -1.218951

1
ข้อเสียสำหรับ Yeo – Johnson: ซับซ้อนการเปลี่ยนแปลงแยกต่างหากสำหรับผลบวกและลบและสำหรับค่าที่อยู่ด้านข้างของแลมบ์ดาค่าจูนเวทย์มนตร์ (epsilon; และแลมบ์ดาคืออะไร) ไม่มีข้อได้เปรียบที่เห็นได้ชัดเมื่อเปรียบเทียบกับการแปลงบันทึกเชิงลบที่ง่ายกว่าซึ่งแสดงในคำตอบของ Firebug ยกเว้นว่าคุณต้องการการแปลงพลังงานแบบสเกล (เช่นเดียวกับ Box – Cox)
Konrad Rudolph

1

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

คุณสามารถค้นหาบทความได้โดยคลิกที่นี่: https://ssrn.com/abstract=3444996

log(y)=βlog(x)+εβyx

YY+c>0

ในบทความของเราเราให้ตัวอย่างที่เพิ่มค่าคงที่ขนาดเล็กมากให้จริงอคติสูงสุด เราให้การแสดงออกของอคติ

ที่จริงแล้ว Poisson Pseudo Maximum Likelihood (PPML) ถือได้ว่าเป็นทางออกที่ดีสำหรับปัญหานี้ หนึ่งจะต้องพิจารณากระบวนการดังต่อไปนี้:

yi=aiexp(α+xiβ)E(ai|xi)=1

βaiyi=0E(ai|xi)=1E(yiexp(α+xiβ)|xi)=0

i=1N(yiexp(α+xiβ))xi=0

yi=0

β

log(yi+exp(α+xiβ))=xiβ+ηi

เราแสดงให้เห็นว่าตัวประมาณนี้ไม่เอนเอียงและสามารถประมาณได้ด้วย GMM ด้วยซอฟต์แวร์สถิติมาตรฐานใด ๆ ตัวอย่างเช่นสามารถประมาณได้โดยการรันโค้ดเพียงบรรทัดเดียวด้วย Stata

เราหวังว่าบทความนี้สามารถช่วยได้และเรายินดีรับข้อเสนอแนะจากคุณ

Christophe Bellégoและ Louis-Daniel Pape CREST - Ecole Polytechnique - ENSAE

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