2011-11-29 77 views
2

我有一個簡單的人工數據生成處理:閾值數據和計算比值比

n.site <- 150 
X <- sort(runif(n = n.site, min = -1, max =1)) 
xb <- 0.0 + 3.0*X 
occ.prob <- 1/(1+exp(-xb)) 
plot(X, occ.prob,xlab="X",ylab="occ.prob") 
Y <- rbinom(n = n.site, size = 1, prob = occ.prob) 
plot(X, Y,xlab="X",ylab="Y") 

我想倉X爲間隔,並計算比值比(給定的Y)。我如何在R中做到這一點?

回答

3

要創建垃圾箱,使用功能cut

dat <- data.frame(X, Y) 
dat$bin <- cut(X, breaks=seq(-1, 1, 0.2)) 

然後用自己喜歡的方法來概括。我說明ddply在包plyr

library(plyr) 
Z <- ddply(dat, .(bin), summarize, yy = sum(Y)/length(Y)) 

計算賠率:

Z$odds <- Z$yy/(1-Z$yy) 

情節與基地圖形結果...

plot(Z$bin, Z$odds) 

enter image description here

...或ggplot

library(ggplot2) 
ggplot(Z, aes(x=bin, y=odds)) + geom_point() 

enter image description here

+0

優秀 - 感謝! – cs0815

+1

最後一個(最右邊的)點在ggplot上可見,但不在基礎圖形圖上?它看起來像ggplot正在繪製'Inf'值,但基本圖形只是給出警告:boxplot 10中的異常值(Inf)未繪製 – Spacedman