我試圖模擬一羣人的暴露數據,然後對數據有一個布爾條件。所以說這是我的模擬曝光數據:繪製依賴於個體變量和預定義組風險的隨機binom
x <- rlnorm(2000)
然後,我想爲每個人生成1或0依賴於x的值。我可以簡單地定義`MAX(X)」爲P == 1和更小的值作爲其比例爲:
prob <- x/max(x)
y <- rbinom(n=length(x), 1, prob=prob)
> table(y)
y
0 1
1900 100
然而,這並不是我真正想要的東西。我還希望能夠爲該羣體設置總體人口風險,例如30%(所以風險= 0.3),這樣個人風險取決於x,但總體風險等於0.3。最後,我希望30%的人口擁有y == 1,但個人概率取決於x的值。我不知道如何實現這一點 - 任何幫助表示讚賞。
更新: 以暗示從@B威廉姆斯回答以下,我寫了一個短的優化器功能:
df1 <- data.frame(x = rlnorm(2000))
df1$prob <- df1$x/max(df1$x)
risk = 0.3
optimize_prob <- function(prob, risk, delta = 0.01, tol = 0.02, max_iter = 400, mult=1){
prob1 <- prob
for(i in 1: max_iter){
y <- rbinom(n=length(prob1), 1, prob=prob1)
meas_risk <- sum(y==1)/length(y)
if(abs(risk - meas_risk) > tol) {
sign <- as.numeric((risk - meas_risk) >= 0)
prob1 <- prob1 + (sign * delta) + (prob1 *delta * mult)
# prob1's must lie between 0 & 1
prob1 <- ifelse(prob1 > 1, 1, prob1)
prob1 <- ifelse(prob1 < 0, 0, prob1)
} else {
break
}
}
msg <- paste0("Iterations: ", i)
print(msg)
out <- cbind(prob1, y)
return(out)
}
df1 <- data.frame(df1, optimize_prob(df1$prob, risk, mult=3))
df1$y <- as.factor(df1$y)
table(df1$y)
這或多或少達到我想要的結果。但是,如果有人知道這樣做的更好的方式,我很欣賞建議。此外,任何效率改善上述讚賞,因爲我會運行它很多,如果一切按計劃進行。
「個體概率依賴於x的值」 - y應該如何與x相關? – arvi1000
是的,這裏的問題的一部分是我不知道如何把這個話。基本上我想要的是P(Y)與x成比例,但我也想控制y == 1的總數。這更清楚嗎? – user2498193
我想你必須更明確地定義'比例'。嚴格地說,我認爲'y < - as.numeric(x
arvi1000