Ước tính độ dốc của phần thẳng của đường cong sigmoid


11

Tôi đã được giao nhiệm vụ này và đã bị bối rối. Một đồng nghiệp yêu cầu tôi ước tính x l o w e r của biểu đồ sau:xupperxlower

nhập mô tả hình ảnh ở đây

Đường cong thực sự là một phân phối tích lũy và x là một số phép đo. Anh ta quan tâm để biết các giá trị tương ứng trên x là gì khi hàm tích lũy bắt đầu trở nên thẳng và lệch khỏi thẳng.

Tôi hiểu rằng chúng ta có thể sử dụng sự khác biệt để tìm độ dốc tại một điểm, nhưng tôi không chắc chắn làm thế nào để xác định khi nào chúng ta có thể gọi đường thẳng. Bất kỳ quan điểm nào đối với một số phương pháp / tài liệu đã có sẵn sẽ được đánh giá rất cao.

Tôi cũng biết R nếu bạn tình cờ biết bất kỳ gói hoặc ví dụ liên quan nào về loại điều tra này.

Cảm ơn rất nhiều.


CẬP NHẬT

Nhờ Flounderer tôi đã có thể mở rộng công việc hơn nữa, thiết lập một khung và sửa các thông số ở đây và đó. Đối với mục đích học tập ở đây là mã hiện tại của tôi và một đầu ra đồ họa.

library(ESPRESSO)

x <- skew.rnorm(800, 150, 5, 3)
x <- sort(x)
meanX <- mean(x)
sdX <- sd(x)
stdX <- (x-meanX)/sdX
y <- pnorm(stdX)

par(mfrow=c(2,2), mai=c(1,1,0.3,0.3))
hist(x, col="#03718750", border="white", main="")

nq <- diff(y)/diff(x)
plot.ts(nq, col="#6dc03480")

log.nq <- log(nq)
low <- lowess(log.nq)
cutoff <- .7
q <- quantile(low$y, cutoff)
plot.ts(log.nq, col="#6dc03480")
abline(h=q, col="#348d9e")

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y,pch=16,col="#03718750", axes=F)
axis(side=1)
axis(side=2)
abline(v=c(x.lower, x.upper),col="red")
text(x.lower, 1.0, round(x.lower,0))
text(x.upper, 1.0, round(x.upper,0))

nhập mô tả hình ảnh ở đây


2
Bạn có thể cố gắng xác định khi nào đạo hàm thứ hai bằng 0 hoặc gần bằng 0 không?
alex

3
Vấn đề của công thức có thể là - rất có thể - vết cắt "thẳng" không tồn tại. Nếu bạn lấy một ống kính mạnh và kiểm tra vùng đó, bạn có thể nhận thấy rằng nó vẫn có hình chữ S trơn tru.
ttnphns

@alex Cảm ơn vì mẹo này, tôi sẽ xắn tay áo lên và cho nó một vài suy nghĩ và thử.
Penguin_Knight

2
Nếu người ta phải phù hợp với một số mật độ (theo ước tính mật độ hạt nhân, ước tính mật độ log-spline hoặc thậm chí một số mô hình tham số), thì chiều cao của mật độ ở đỉnh của nó là ước tính độ dốc tối đa của CDF. 'Độ rộng' của đỉnh cho bạn biết điều gì đó về phạm vi của các giá trị x rộng đến mức nào khi nói về độ dốc đó như thể nó không đổi.
Glen_b -Reinstate Monica

2
Để theo dõi bình luận của @ Glen_b, điểm chính là những gì bạn đang yêu cầu chưa được xác định với đủ nghiêm ngặt. Chỉ cần đặt "vai" x_lower và x_upper ở dưới mức bao xa? Một số tiêu chí định lượng là cần thiết.
whuber

Câu trả lời:


9

Đây là một ý tưởng nhanh chóng và bẩn thỉu dựa trên đề xuất của @ alex.

#simulated data
set.seed(100)
x <- sort(exp(rnorm(1000, sd=0.6)))
y <- ecdf(x)(x)

Nó trông hơi giống dữ liệu của bạn. Ý tưởng bây giờ là nhìn vào đạo hàm và thử xem nó lớn nhất ở đâu. Đây phải là một phần của đường cong của bạn, nơi nó thẳng nhất, vì nó là hình chữ S.

NQ <- diff(y)/diff(x)
plot.ts(NQ)

x

log.NQ <- log(NQ)
low <- lowess(log.NQ)
cutoff <- 0.75
q <- quantile(low$y, cutoff)
plot.ts(log.NQ)
abline(h=q)

x

x.lower <- x[min(which(low$y > q))]
x.upper <- x[max(which(low$y > q))]
plot(x,y)
abline(v=c(x.lower, x.upper))

nhập mô tả hình ảnh ở đây

cutoffy


Điều này là khá tuyệt vời! Cảm ơn ví dụ và mã! Tôi đã thử nó với dữ liệu của tôi và nó dường như hoạt động khá tốt. :)
Penguin_Knight

Cảm ơn! Tôi hài lòng với nó quá. Hài hước làm thế nào để ghi nhật ký kỳ diệu làm cho nó hoạt động.
Flounderer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.