การแจกแจง t ที่เหมาะสมใน R: พารามิเตอร์การปรับ


17

ฉันจะพอดีกับพารามิเตอร์ของการแจกแจงแบบทีคือพารามิเตอร์ที่สอดคล้องกับ 'เฉลี่ย' และ 'ส่วนเบี่ยงเบนมาตรฐาน' ของการแจกแจงแบบปกติ ฉันคิดว่าพวกมันถูกเรียกว่า 'mean' และ 'scaling / degrees of freedom' สำหรับการแจกแจงแบบ t?

รหัสต่อไปนี้มักส่งผลให้เกิดข้อผิดพลาด 'การเพิ่มประสิทธิภาพล้มเหลว'

library(MASS)
fitdistr(x, "t")

ฉันต้องปรับขนาด x ก่อนหรือแปลงเป็นความน่าจะเป็นหรือไม่? วิธีที่ดีที่สุดที่จะทำเช่นนั้น?


2
มันล้มเหลวไม่ใช่เพราะคุณต้องปรับขนาดพารามิเตอร์ แต่เนื่องจากเครื่องมือเพิ่มประสิทธิภาพล้มเหลว ดูคำตอบของฉันด้านล่าง
Sergey Bushmanov

คำตอบ:


16

fitdistrใช้ความน่าจะเป็นสูงสุดและเทคนิคการปรับให้เหมาะสมเพื่อค้นหาพารามิเตอร์ของการแจกแจงที่กำหนด บางครั้งโดยเฉพาะอย่างยิ่งสำหรับการแจกแจงแบบ t ตามที่ผู้ใช้ @12719 สังเกตเห็นการเพิ่มประสิทธิภาพในรูปแบบ:

fitdistr(x, "t")

ล้มเหลวด้วยข้อผิดพลาด

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

fitdistr(x, "t", start = list(m=mean(x),s=sd(x), df=3), lower=c(-1, 0.001,1))

หมายเหตุdf=3เป็นเดาที่ดีที่สุดของคุณในสิ่งที่ "ดีที่สุด"dfอาจเป็นได้ หลังจากให้ข้อมูลเพิ่มเติมนี้ข้อผิดพลาดของคุณจะหายไป

ข้อความที่ตัดตอนมาเพื่อช่วยให้คุณเข้าใจกลไกภายในของfitdistr:

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

...

สำหรับการแจกแจงที่มีชื่อดังต่อไปนี้ค่าเริ่มต้นที่เหมาะสมจะถูกคำนวณหากstartถูกละเว้นหรือระบุเพียงบางส่วนเท่านั้น: "cauchy", "gamma", "logistic", "ลบทวินาม" (parametrized โดย mu และขนาด), "t" และ "weibull " โปรดทราบว่าค่าเริ่มต้นเหล่านี้อาจไม่ดีพอหากความพอดีไม่ดี: โดยเฉพาะอย่างยิ่งพวกเขาจะไม่ทนต่อค่าผิดปกติเว้นแต่การกระจายที่ติดตั้งจะเป็นแบบหางยาว


1
คำตอบทั้งสอง (Flom และ Bushmanov) มีประโยชน์ ฉันเลือกอันนี้เพราะมันทำให้ชัดเจนมากขึ้นด้วยค่าเริ่มต้นที่เหมาะสมและการเพิ่มประสิทธิภาพ 'fitdistr' ข้อ จำกัด มาบรรจบกัน
user12719

10

νเสื้อ

νเสื้อ

set.seed(1234)
n <- 10
x <- rt(n,  df=2.5)

make_loglik  <-  function(x)
    Vectorize( function(nu) sum(dt(x, df=nu,  log=TRUE)) )

loglik  <-  make_loglik(x)
plot(loglik,  from=1,  to=100,  main="loglikelihood function for df     parameter", xlab="degrees of freedom")
abline(v=2.5,  col="red2")

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

n

ให้เราลองทำแบบจำลอง:

t_nu_mle  <-  function(x) {
    loglik  <-  make_loglik(x)
    res  <-  optimize(loglik, interval=c(0.01, 200), maximum=TRUE)$maximum
    res   
}

nus  <-  replicate(1000, {x <- rt(10, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)

> mean(nus)
[1] 45.20767
> sd(nus)
[1] 78.77813

การแสดงการประมาณค่านั้นไม่เสถียรมาก (ดูกราฟฮิสโตแกรมส่วนที่ปรับขนาดได้ของค่าประมาณนั้นอยู่ที่ขีด จำกัด สูงสุดที่กำหนดเพื่อปรับให้เหมาะสม 200)

ทำซ้ำด้วยขนาดตัวอย่างที่ใหญ่กว่า:

nus  <-  replicate(1000, {x <- rt(50, df=2.5)
    t_nu_mle(x) }, simplify=TRUE)
> mean(nus)
[1] 4.342724
> sd(nus)
[1] 14.40137

ซึ่งดีกว่ามาก แต่ค่าเฉลี่ยยังคงสูงกว่าค่าที่แท้จริง 2.5

จากนั้นโปรดจำไว้ว่านี่เป็นเวอร์ชันจริงของปัญหาจริงที่ต้องระบุพารามิเตอร์ตำแหน่งและมาตราส่วนด้วย

เสื้อν


5
ข้อสรุปของคุณว่าปัญหาของการประมาณค่า df อาจใช้งานได้จริงกับเหตุผลในการเลือกการแจกแจงแบบทีในตอนแรก (เช่นความทนทาน) เป็นความคิดที่เร้าใจ
user12719

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

8

ในความช่วยเหลือสำหรับ fitdistr เป็นตัวอย่างนี้:

fitdistr(x2, "t", df = 9)

ระบุว่าคุณต้องการเพียงค่าสำหรับ df แต่นั่นถือว่าเป็นมาตรฐาน

สำหรับการควบคุมเพิ่มเติมพวกเขายังแสดง

mydt <- function(x, m, s, df) dt((x-m)/s, df)/s
fitdistr(x2, mydt, list(m = 0, s = 1), df = 9, lower = c(-Inf, 0))

โดยที่พารามิเตอร์จะเป็น m = หมายถึง, s = ส่วนเบี่ยงเบนมาตรฐาน, df = องศาอิสระ


1
ฉันเดาว่าฉันสับสนเกี่ยวกับพารามิเตอร์ของการแจกแจงแบบ t มันมีพารามิเตอร์ 2 (หมายถึง df) หรือ 3 (หมายถึงเบี่ยงเบนมาตรฐาน, df) หรือไม่? ฉันสงสัยว่าถ้าใครสามารถพอดีกับพารามิเตอร์ 'df'
user12719

1
@ user12719 การกระจายของนักเรียนมีสามพารามิเตอร์: สถานที่ตั้งขนาดและองศาความเป็นอิสระ พวกเขาจะไม่เรียกว่าค่าเฉลี่ยเบี่ยงเบนมาตรฐานและ df เพราะค่าเฉลี่ยและความแปรปรวนของการกระจายนี้ขึ้นอยู่กับพารามิเตอร์ทั้งสาม นอกจากนี้ยังไม่มีในบางกรณี Peter Flom กำลังแก้ไข df แต่สิ่งนี้ถือได้ว่าเป็นพารามิเตอร์ที่ไม่รู้จักเช่นกัน

1
@PeterFlom ในกรณีของการแจกจ่าย Cauchyเป็นที่ชัดเจนว่า m และ s เป็นที่ตั้งและสเกล ฉันยอมรับสัญกรณ์ m และ s แสดงให้เห็นว่าพวกเขาเป็นตัวแทนของค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานตามลำดับ แต่นี่อาจเป็นการทำให้เข้าใจง่าย\muและ\sigmaเช่นกัน +1 นานมาแล้ว

1
@PeterFlom การอ้างอิงนี้จากไฟล์ความช่วยเหลือของ R บ่งบอกว่า df มีค่าเสมอ 9 สำหรับการแจกแจงนักเรียน คุณไม่คิดว่าควรจะประมาณ df เช่นกัน? ที่จริงแล้วการขาดงานdfเป็นสาเหตุของข้อผิดพลาดและคำตอบที่ถูกต้องควรจัดทำสูตรในการค้นหา
Sergey Bushmanov

1
@PeterFlom BTW ถ้าคุณอ่านไฟล์ช่วยเหลือสองบรรทัดเหนือการอ้างอิงของคุณคุณจะพบว่าทำไมdf=9ตัวอย่างที่ดีถึงออกมาและไม่เกี่ยวข้องเลย
Sergey Bushmanov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.