การคำนวณข้อผิดพลาดมาตรฐานหลังจากการแปลงบันทึก


19

พิจารณาชุดของตัวเลขสุ่มที่กระจายตามปกติ:

x <- rnorm(n=1000, mean=10)

เราต้องการทราบค่าเฉลี่ยและข้อผิดพลาดมาตรฐานในค่าเฉลี่ยดังนั้นเราจึงทำสิ่งต่อไปนี้:

se <- function(x) { sd(x)/sqrt(length(x)) }
mean(x) # something near 10.0 units
se(x)   # something near 0.03 units

ที่ดี!

อย่างไรก็ตามสมมติว่าเราไม่จำเป็นต้องรู้ว่าการแจกแจงเริ่มต้นของเราเป็นไปตามการแจกแจงแบบปกติ เราบันทึกการแปลงข้อมูลและทำการคำนวณข้อผิดพลาดมาตรฐานเดียวกัน

z <- log(x, base=10)
mean(z) # something near 1 log units
se(z)   # something near 0.001 log units

เยี่ยมยอด แต่ตอนนี้เราจำเป็นต้องแปลงกลับเพื่อให้ได้คำตอบในหน่วยที่ไม่ใช่หน่วยบันทึก

10^mean(z) # something near 10.0 units
10^se(z)   # something near 1.00 units

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

แก้ไข # 1: ในที่สุดฉันสนใจในการคำนวณค่าเฉลี่ยและช่วงความเชื่อมั่นสำหรับข้อมูลที่ไม่ได้กระจายตามปกติดังนั้นหากคุณสามารถให้คำแนะนำเกี่ยวกับวิธีการคำนวณ 95% CI ของข้อมูลที่แปลงแล้วรวมถึงวิธีการแปลงกลับเป็นหน่วยดั้งเดิม , ฉันอยากจะขอบคุณมัน!
สิ้นสุดการแก้ไข # 1

แก้ไข # 2: ฉันพยายามใช้ฟังก์ชัน quantile เพื่อรับช่วงความมั่นใจ 95%:

quantile(x, probs = c(0.05, 0.95))     # around [8.3, 11.6]
10^quantile(z, probs = c(0.05, 0.95))  # around [8.3, 11.6]

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

t <- rlnorm(10)
mean(t)                            # around 1.46 units
10^mean(log(t, base=10))           # around 0.92 units
quantile(t, probs = c(0.05, 0.95))                     # around [0.211, 4.79]
10^(quantile(log(t, base=10), probs = c(0.05, 0.95)))  # around [0.209, 4.28]

วิธีใดที่จะถูกพิจารณาว่า "ถูกต้องมากกว่า" ฉันคิดว่าใครจะเลือกประมาณการที่อนุรักษ์นิยมมากที่สุด?

ตัวอย่างเช่นคุณจะรายงานผลลัพธ์นี้สำหรับข้อมูลที่ไม่ปกติ (t) ว่ามีค่าเฉลี่ย 0.92 หน่วยที่มีช่วงความมั่นใจ 95% ที่ [0.211, 4.79] หรือไม่
สิ้นสุดการแก้ไข # 2

ขอบคุณที่สละเวลา!


1
SE คือ SD หารด้วยสแควร์รูทของ N ไม่ใช่แค่ N.
Penguin_Knight

3
ขอบคุณ! ฉันแก้ไขปัญหานั้นแล้ว ปัญหาที่ฉันยังมีอยู่
งงงวย

คำตอบ:


12

esd(log(Y))sd(Y) )โดยทั่วไปแล้วมันค่อนข้างแตกต่างกัน

sd(Y)sd(log(Y))

Var(g(X))(g(μX))2σX2.

Xg(X)=exp(X)

Var(exp(X))exp(μX)2σX2

sd(exp(X))exp(μX)σX

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

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

> mean(y)
[1] 10
> sd(y)
[1] 0.03
> lm=mean(log(y))
> ls=sd(log(y))
> exp(lm)*ls
[1] 0.0300104 

หากคุณต้องการแปลง CI สำหรับพารามิเตอร์นั่นใช้งานได้โดยเปลี่ยนจุดปลาย

E(exp(X))exp(μX)(1+σX2/2)(c.exp(L),c.exp(U))L,Uc1+σX2/2 2

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


1
ขอบคุณ Glen_b ฉันไม่เคยเรียนรู้ว่าในชั้นเรียนสถิติ
งงงัน

2
E[f(X)]f(μX)+f(μX)2σX2=exp(μX)(1+σX22)
exp(μx)σX2E[exp(X)]

ขอบคุณ @Dezmond ใช่ที่ถูกต้อง. ฉันจะเพิ่มการแก้ไขคำตอบของฉันส่วนหนึ่งของมันที่อยู่ใกล้กับจุดสิ้นสุดนั้นค่อนข้างสับสน
Glen_b -Reinstate Monica

0

exp(mean(log(x)))ดูเหมือนคุณได้อย่างมีประสิทธิภาพต้องการข้อผิดพลาดมาตรฐานเรขาคณิตคล้ายกับค่าเฉลี่ยเรขาคณิต

ในขณะที่มันอาจดูเหมือนสมเหตุสมผลในการคำนวณว่าเป็น:

exp(sd(log(x)/sqrt(n-1)))

คุณและคนอื่น ๆ ได้ชี้ให้เห็นแล้วว่ามันไม่ถูกต้องด้วยเหตุผลบางประการ ให้ใช้:

exp(mean(log(x))) * (sd(log(x))/sqrt(n-1))

ซึ่งเป็นค่าเฉลี่ยทางเรขาคณิตคูณด้วยข้อผิดพลาดมาตรฐานบันทึก สิ่งนี้ควรจะประมาณข้อผิดพลาดมาตรฐาน "ธรรมชาติ" ค่อนข้างดี

ที่มา: https://www.jstor.org/stable/pdf/2235723.pdf

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