การประมาณการแจกแจงโดยพิจารณาจากเปอร์เซนต์ไทล์


23

ฉันสามารถใช้วิธีการใดในการอนุมานการกระจายหากฉันรู้ว่ามีเปอร์เซนต์สามเปอร์เซ็นต์เท่านั้น

ตัวอย่างเช่นฉันรู้ว่าในชุดข้อมูลหนึ่งเปอร์เซนต์ไทล์ที่ห้าคือ 8,135 เปอร์เซ็นไทล์ที่ 50 คือ 11,259 และเปอร์เซ็นไทล์ 95 ที่ 23,611 ฉันต้องการที่จะไปจากจำนวนอื่นใดที่จะเป็นเปอร์เซ็นต์ของมัน

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

ฉันรู้เพียงพอเกี่ยวกับสถิติที่จะรู้ว่าปัญหานี้ไม่มีวิธีการแก้ปัญหาที่ชัดเจน แต่ไม่เพียงพอที่จะรู้ว่าจะค้นหาการคาดเดาที่ดีได้อย่างไร

การแจกแจงแบบบันทึกปกติจะเหมาะสมหรือไม่? เครื่องมือใดที่ฉันสามารถใช้เพื่อทำการถดถอย (หรือฉันต้องทำเอง)


ฉันได้เพิ่มแท็ก r ดังนั้นรหัส R จะถูกเน้นในความคิดเห็นของฉัน
mpiktas

สำหรับตัวอย่างรายละเอียดของคำถามเดียวกัน (และวิธีการแก้ปัญหาของมัน) ดูกระทู้ที่ซ้ำกันที่stats.stackexchange.com/questions/133129
whuber

คำตอบ:


17

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

ท่านต้องการข้อมูลเพิ่มเติม

สิ่งนี้ง่ายต่อการใช้งาน: ใช้ข้อมูลจากปีก่อน ๆ จากเขตที่เทียบเคียงได้ ยกตัวอย่างเช่นการใช้จ่ายของรัฐบาลกลางใน 14,866 โรงเรียนในปี 2008 ได้จากเว็บไซต์การสำรวจสำมะโนประชากร มันแสดงให้เห็นว่าทั่วประเทศรายได้รวมต่อหัว (ลงทะเบียน) ของรัฐบาลกลางมีการกระจายโดยประมาณ lognormally แต่การทำลายมันลงโดยรัฐแสดงให้เห็นถึงการเปลี่ยนแปลงที่สำคัญ ( เช่นการใช้จ่ายในอลาสก้ามีความเบ้เชิงลบ . ใช้ข้อมูลเหล่านั้นเพื่อระบุลักษณะการกระจายที่เป็นไปได้แล้วปรับขนาดของคุณให้เข้ากับแบบฟอร์มนั้น

หากคุณอยู่ใกล้กับรูปแบบการแจกแจงที่ถูกต้องคุณควรจะสามารถทำซ้ำปริมาณได้อย่างแม่นยำโดยการปรับพารามิเตอร์หนึ่งหรือสองพารามิเตอร์ให้มากที่สุด เทคนิคที่ดีที่สุดสำหรับการค้นหาความพอดีจะขึ้นอยู่กับรูปแบบการกระจายตัวที่คุณใช้ แต่ที่สำคัญกว่านั้นขึ้นอยู่กับสิ่งที่คุณตั้งใจจะใช้ผลลัพธ์. คุณจำเป็นต้องประเมินจำนวนค่าใช้จ่ายเฉลี่ยหรือไม่ ขีด จำกัด บนและล่างของการใช้จ่าย? ไม่ว่าคุณจะเป็นแบบไหนก็ตามคุณต้องการที่จะใช้ความดีที่เหมาะสมที่จะให้โอกาสที่ดีที่สุดในการตัดสินใจที่ดีกับผลลัพธ์ของคุณ ตัวอย่างเช่นหากความสนใจของคุณมุ่งเน้นที่ 10% ของการใช้จ่ายทั้งหมดคุณจะต้องการเปอร์เซ็นต์ไทล์ 95 ที่ถูกต้องและคุณอาจสนใจเพียงเล็กน้อยในการเลือกเปอร์เซ็นไทล์ที่ 5 ไม่มีเทคนิคการกระชับที่ซับซ้อนจะทำให้การพิจารณาเหล่านี้สำหรับคุณ

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


2
+1 คุณต้องการข้อมูลเพิ่มเติมและสิ่งที่คุณตั้งใจจะใช้ผลลัพธ์เพื่อให้ได้รับการเน้นเป็นพิเศษ
vqv

2
ดูเหมือนว่ามีคำตอบมากมายในภูมิปัญญาของคุณ ฉันจะต้องปรึกษากับคนที่ทำให้ฉันมีปัญหาเกี่ยวกับสิ่งที่พวกเขาต้องการ ขอบคุณสำหรับลิงค์และคำแนะนำ
Mark Eichenlaub

1
@ Mark โชคดีที่สุด!
whuber

23

@whuber ชี้ให้เห็นว่าวิธีการทางสถิติไม่ได้ทำงานที่นี่อย่างแน่นอน คุณต้องสรุปการกระจายจากแหล่งอื่น ๆ เมื่อคุณรู้ว่าการกระจายคุณมีแบบฝึกหัดการแก้สมการไม่เชิงเส้น แสดงว่าโดยฟังก์ชัน quantile ของการกระจายความน่าจะเป็นของคุณเลือกด้วยพารามิเตอร์เวกเตอร์\สิ่งที่คุณมีคือระบบสมการไม่เชิงเส้นต่อไปนี้:θθ

q0.05=f(0.05,θ)q0.5=f(0.5,θ)q0.95=f(0.95,θ)

โดยที่คือปริมาณของคุณ คุณต้องแก้ระบบนี้เพื่อหา\ทีนี้สำหรับการแจกแจง 3 พารามิเตอร์คุณจะพบว่าค่าของพารามิเตอร์เป็นไปตามสมการนี้ สำหรับการแจกแจงแบบ 2 พารามิเตอร์และ 1 พารามิเตอร์ระบบนี้มีการกำหนดค่าเกินพิกัดดังนั้นจึงไม่มีวิธีแก้ไขปัญหาที่แน่นอน ในกรณีนี้คุณสามารถค้นหาชุดของพารามิเตอร์ที่ช่วยลดความคลาดเคลื่อน:θqθ

(q0.05f(0.05,θ))2+(q0.5f(0.5,θ))2+(q0.95f(0.95,θ))2

ที่นี่ฉันเลือกฟังก์ชั่นสมการกำลังสอง แต่คุณสามารถเลือกสิ่งที่คุณต้องการ จากความคิดเห็นของ @whuber คุณสามารถกำหนดน้ำหนักเพื่อให้สามารถติดตั้ง quantiles ที่สำคัญกว่าได้อย่างถูกต้องมากขึ้น

สำหรับพารามิเตอร์สี่ตัวขึ้นไประบบจะถูกกำหนดค่าต่ำสุดดังนั้นจึงมีคำตอบจำนวนไม่ จำกัด

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

 q <- qsinmad(c(0.05,0.5,0.95),2,1,4)
 plot(x<-seq(0,2,by=0.01), dsinmad(x, 2, 1, 4),type="l")
 points(p<-c(0.05, 0.5, 0.95), dsinmad(p, 2, 1, 4))

ข้อความแสดงแทน

ตอนนี้รูปแบบฟังก์ชั่นที่ประเมินระบบที่ไม่ใช่เชิงเส้นของสมการ:

 fn <- function(x,q) q-qsinmad(c(0.05, 0.5, 0.95), x[1], x[2], x[3])

ตรวจสอบว่าค่าจริงตรงตามสมการหรือไม่:

 > fn(c(2,1,4),q)
   [1] 0 0 0

สำหรับการแก้ระบบสมการไม่เชิงเส้นผมใช้ฟังก์ชั่นnleqslvจากแพคเกจnlqeslv

 > sol <- nleqslv(c(2.4,1.5,4.3),fn,q=q)
 > sol$x       
  [1] 2.000000 1.000000 4.000001

อย่างที่เราเห็นเราได้ทางออกที่ถูกต้อง ทีนี้ให้เราลองหาการกระจายของ log-normal กับ quantiles เหล่านี้ สำหรับสิ่งนี้เราจะใช้optimฟังก์ชั่น

 > ofn <- function(x,q)sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)
 > osol <- optim(c(1,1),ofn)
 > osol$par
   [1] -0.905049  0.586334

ตอนนี้พล็อตผล

  plot(x,dlnorm(x,osol$par[1],osol$par[2]),type="l",col=2)
  lines(x,dsinmad(x,2,1,4))
  points(p,dsinmad(p,2,1,4))

ข้อความแสดงแทน

จากนี้เราจะเห็นได้ทันทีว่าฟังก์ชันกำลังสองไม่ดีนัก

หวังว่านี่จะช่วยได้


1
ที่ดี! ขอบคุณสำหรับความพยายามทั้งหมดที่เกิดขึ้นในที่นี้ mpiktas ฉันไม่คุ้นเคยกับ R แต่รหัสของคุณได้รับการอธิบายอย่างดีพอที่ฉันจะยังสามารถบอกได้ว่าคุณกำลังทำอะไรอยู่
Mark Eichenlaub

ขอบคุณมากสำหรับตัวอย่างนี้ ฉันคิดว่ามีข้อผิดพลาด 2 ofn <- function(x,q) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2]))^2)อย่าง ฉันเสนอofn <- function(x) sum(abs(q-qlnorm(c(0.05,0.5,0.95),x[1],x[2],x[3]))^2)เพราะqไม่ใช่อินพุตสำหรับofnและX[3]ขาดหายไป ขอแสดงความนับถือ

9

ลองใช้แพ็กเกจrriskDistributionและ - ถ้าคุณแน่ใจเกี่ยวกับตระกูลการกระจาย lognormal - ให้ใช้คำสั่ง

get.lnorm.par(p=c(0.05,0.5,0.95),q=c(8.135,11.259,23.611))

ซึ่งควรแก้ปัญหาของคุณ ใช้fit.percแทนหากคุณไม่ต้องการ จำกัด หนึ่ง PDF ที่รู้จัก


ทางออกที่ง่ายสุด ๆ !
luchonacho

6

สำหรับ lognormal อัตราส่วนของเปอร์เซนต์ไทล์ 95 ต่อค่ามัธยฐานนั้นเท่ากับอัตราส่วนของมีเดียนต่อไทล์ 5 นั่นไม่ได้เป็นจริงเกือบที่นี่ดังนั้น logn ปกติจะไม่เหมาะสม

คุณมีข้อมูลเพียงพอที่จะพอดีกับการกระจายด้วยสามพารามิเตอร์และคุณต้องการการแจกแจงแบบเบ้อย่างชัดเจน เพื่อความง่ายในการวิเคราะห์ฉันขอแนะนำให้การกระจาย log-logisticเป็นฟังก์ชั่นควอไทล์ (เช่นค่าผกผันของฟังก์ชันการแจกแจงสะสม) สามารถเขียนในรูปแบบปิดที่เรียบง่ายพอสมควรดังนั้นคุณควรจะได้สำนวนปิด พารามิเตอร์สามตัวในแง่ของสามควอไทล์ของคุณกับพีชคณิตบิต (ฉันจะปล่อยให้เป็นแบบฝึกหัด!) การกระจายนี้ใช้ในการวิเคราะห์ความถี่ของน้ำท่วม

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


1
ขอบคุณสำหรับคำแนะนำ. Re: lognormal - ฉันสามารถทำให้อัตราส่วนของเปอร์เซ็นไทล์เป็นค่ามัธยฐานได้โดยการลบ 7077 จากทุกอย่างจากนั้นเพิ่มมันกลับเข้าไปในตอนท้าย ความคิดนั้นแย่ขนาดไหน?
Mark Eichenlaub

1
จุดดีที่จะให้ 'การกระจายปกติเข้าสู่ระบบเลื่อน' บันทึกปกติและ logistic นั้นค่อนข้างคล้ายคลึงกันนอกเหนือจากหางที่หนักกว่าของหลังดังนั้นคุณสามารถลองทั้งคู่และเปรียบเทียบผลลัพธ์
onestop

เปรียบเทียบได้อย่างไร lognormal ที่ถูกเลื่อนรับประกันว่าจะพอดีกับควอนไทล์อย่างสมบูรณ์ เกือบทุกตระกูลพารามิเตอร์สามตัวจะลงตัวอย่างสมบูรณ์แบบ คุณจะเปรียบเทียบความลงตัวที่ลงตัวได้อย่างไร
whuber

@whuber ฉันหมายถึงการเปรียบเทียบการคาดการณ์ผลลัพธ์สำหรับเปอร์เซนต์ที่สอดคล้องกับค่าอื่น ๆ
onestop

ฉันไม่มีอะไร: มีค่าอื่นอีกไหม OP ระบุว่ามีเพียงสามเปอร์เซนต์เท่านั้นไม่มีอย่างอื่น
whuber

2

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

หากพวกเขามาจากการกระจายที่เหมาะสมคุณสามารถลองการแจกแจงทั้งหมดที่คุณสามารถคิดถึงและดูว่าการแข่งขันใด ๆ ถ้าไม่มีข้อมูลไม่เพียงพอ คุณสามารถแก้ไขพหุนามดีกรีอันดับ 2 หรือเส้นโค้งระดับที่ 3 สำหรับฟังก์ชันควอนไทล์และใช้มันหรือคิดทฤษฎีที่เกี่ยวกับตระกูลการแจกแจงและจับคู่ควอไทล์ แต่การอนุมานใด ๆ ที่คุณทำด้วยวิธีการเหล่านี้


1
พหุนามและเส้นโค้งไม่น่าจะเป็น CDF ที่ถูกต้อง
whuber

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

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

2

การใช้ quantiles การประมาณค่าพารามิเตอร์ของการแจกแจงเบื้องต้นจะกล่าวถึงในหนังสือที่เกี่ยวกับการวัดเวลาตอบสนองของมนุษย์เป็น "การประมาณค่าความน่าจะเป็นสูงสุด quantile" (การ QMPE แต่เดิมขนานนามว่าไม่สมควร "quantile สูงสุดประมาณค่าความน่าจะเป็น" QMLE) กล่าวถึงที่มีความยาวโดยHeathcote และเพื่อนร่วมงาน คุณสามารถใส่การแจกแจงแบบต่าง ๆ จำนวนมาก (แบบเกาส์เซียน, เปลี่ยนแบบ Lognormal, Wald และ Weibull) จากนั้นเปรียบเทียบโอกาสในการบันทึกผลรวมของผลลัพธ์ที่เหมาะที่สุดสำหรับการแจกแจงแต่ละครั้งเพื่อค้นหารสชาติการกระจายที่ดูเหมือนว่าเหมาะสมที่สุด


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

@whuber อีกครั้ง: "การกระจายสามพารามิเตอร์ใด ๆ รับประกันว่าจะพอดีกับสาม quantiles อย่างสมบูรณ์แบบ" ฉันไม่ได้ตระหนักถึงสิ่งนั้นดีมากที่จะรู้! Re: "มันไม่มีความหมายใด ๆ ที่จะเปรียบเทียบพอดีหนึ่งพารามิเตอร์กับพอดีสองพารามิเตอร์ (กับตระกูลอื่น) ตามความน่าจะเป็นเพียงอย่างเดียว" ใช่แล้ว ฉันไม่ได้พูดถึงว่าจะต้องใช้การแก้ไขความซับซ้อน (AIC, BIC, ... ) หากเปรียบเทียบกันพอดีกับการกระจายรสชาติด้วยพารามิเตอร์ที่แตกต่างกัน ขอบคุณสำหรับการชี้ให้เห็นว่า
Mike Lawrence

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

1

คุณสามารถใช้ข้อมูลเปอร์เซ็นไทล์ของคุณเพื่อจำลองข้อมูลในบางวิธีและใช้แพ็คเกจ "logspline" เพื่อประเมินการกระจายแบบไม่อิงพารามิเตอร์ ด้านล่างเป็นฟังก์ชั่นของฉันที่ใช้วิธีการเช่นนี้

calc.dist.from.median.and.range <- function(m, r) 
{
    ## PURPOSE: Return a Log-Logspline Distribution given (m, r).
    ##          It may be necessary to call this function multiple times in order to get a satisfying distribution (from the plot). 
    ## ----------------------------------------------------------------------
    ## ARGUMENT:
    ##   m: Median
    ##   r: Range (a vector of two numbers)
    ## ----------------------------------------------------------------------
    ## RETURN: A log-logspline distribution object.
    ## ----------------------------------------------------------------------
    ## AUTHOR: Feiming Chen,  Date: 10 Feb 2016, 10:35

    if (m < r[1] || m > r[2] || r[1] > r[2]) stop("Misspecified Median and Range")

    mu <- log10(m)
    log.r <- log10(r)

    ## Simulate data that will have median of "mu" and range of "log.r"
    ## Distribution on the Left/Right: Simulate a Normal Distribution centered at "mu" and truncate the part above/below the "mu".
    ## May keep sample size intentionaly small so as to introduce uncertainty about the distribution. 
    d1 <- rnorm(n=200, mean=mu, sd=(mu - log.r[1])/3) # Assums 3*SD informs the bound
    d2 <- d1[d1 < mu]                   # Simulated Data to the Left of "mu"
    d3 <- rnorm(n=200, mean=mu, sd=(log.r[2] - mu)/3)
    d4 <- d3[d3 > mu]                   # Simulated Data to the Right of "mu"
    d5 <- c(d2, d4)                     # Combined Simulated Data for the unknown distribution

    require(logspline)
    ans <- logspline(x=d5)
    plot(ans)
    return(ans)
}
if (F) {                                # Unit Test 
    calc.dist.from.median.and.range(m=1e10, r=c(3.6e5, 3.1e12))
    my.dist <- calc.dist.from.median.and.range(m=1e7, r=c(7e2, 3e11))
    dlogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Density
    plogspline(log10(c(7e2, 1e7, 3e11)), my.dist) # Probability
    10^qlogspline(c(0.05, 0.5, 0.95), my.dist) # Quantiles 
    10^rlogspline(10, my.dist) # Random Sample 
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.