[英]How to compare one observation against the rest of the dataframe using poisson distribution in R?
我想找到一種方法來使用泊松分布比較汽車的 hp 值,看看哪一個更有可能在所有汽車中具有最低的 hp 值,例如馬自達 Rx4 的馬力為 110。我想模擬這個樣本中每輛汽車的泊松分布值。 我想創建一個表格,比較數據框中所有汽車的每輛車的概率,以在該指標中具有最低值
為了簡單起見,我使用這個例子,實際上,這些是高爾夫球手的名字,而馬力是擊球次數,這就是為什么我想要一個列表,其中包含我的樣本中每個觀察的概率該指標中的最低分
df <- mtcars
f <- function(n1, n2){
mean(rpois(100, n1) < rpois(100, n2))
}
g <- Vectorize(f, c("n1", "n2"))
res <- outer(df$hp, df$hp, g)
dimnames(res) <- list(row.names(df), row.names(df))
此代碼將所有汽車相互比較,但我想要一個列表,將每輛汽車與數據框中的所有汽車進行比較,以查看得分最低的概率。 例如,馬自達 RX4 在數據幀中具有最低值的概率:類似這樣
prob
Mazda RX4 0.03
Datsun 710 0.02
Duster 360 0.02
以此類推,直到樣品的最后一輛車。 Prob 是汽車在樣本中具有最低 hp 值的概率。
我不太確定我是否正確理解了您的問題,但這里有一個基於原始值創建泊松分布並總結這些模擬的比較結果的示例:
library(tidyverse)
df <- mtcars[1] %>% rownames_to_column("car")
df %>%
uncount(10000, .id = "run") %>%
rowwise() %>%
mutate(sim_mpg = rpois(1, lambda = mpg)) %>%
group_by(run) %>%
arrange(sim_mpg) %>%
mutate(lowest_mpg = row_number() == 1) %>%
group_by(car) %>%
summarize(chance_lowest = mean(lowest_mpg),
orig_mpg = first(mpg)) %>%
ggplot(aes(orig_mpg, chance_lowest, label = car)) +
geom_text(hjust = 0, check_overlap = TRUE) +
scale_y_continuous(trans = scales::pseudo_log_trans(sigma = 0.001),
labels = scales::percent_format(accuracy = 1),
breaks = c(0, 0.01, 0.1*(1:4)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.