多年来,我一直使用Hmisc包和基本R语言计算加权统计摘要。通常情况下,我使用双重权重,其中一个是空间影响权重,另一个是数据支撑值,例如长度、体积、物理密度等。以“mtcars”数据集为例,其中mpg是所关注的变量,双重权重由汽车“wt”和“hp”构成,Hmisc + base R的工作流程通常如下。
require(Hmisc)
mtcars$Wt2 <- mtcars$wt * mtcars$hp # double weight
mtcars$Acc <- mtcars$Wt2 * mtcars$mpg # accumulation
min(mtcars$mpg) # min
sqrt(wtd.var(mtcars$mpg, mtcars$mpg)) # wtd sd
wtd.quantile(mtcars$mpg, mtcars$mpg,0.05) # wtd 5th
wtd.quantile(mtcars$mpg, mtcars$mpg,0.50) # wtd median
wtd.quantile(mtcars$mpg, mtcars$mpg,0.95) # wtd 95th
max(mtcar$mpg) # max
使用循环,可以对数据框中每个感兴趣的区域进行加权统计和筛选。 然而,由于我想学习如何使用dplyr,我在思考如何计算这些加权统计量。虽然有加权平均选项可用,但其他选项需要更多的工作。以下是我已经从头开始计算加权平均值并通过与dplyr内置函数的比较进行了检查的代码。然而,我被卡住了,不知道如何使用dplyr继续计算加权标准差和分位数,因为我需要将每个组的平方加权均值差(for each group)放入管道链中。
mtcars %>%
mutate(Car = row.names(mtcars)) %>% # variable for car name
mutate(Wt2 = wt * hp) %>% # double weight
mutate(Acc = Wt2 * mpg) %>% # weighted consumption
group_by(Car) %>% # group by car type
summarise(n = n(),
SmWt2 = sum(Wt2), # Sum of double weight
SmAcc = sum(Acc), # Sum of accumulations
WtMn = SmAcc/SmWt2, # Weighted mean
WtMnChk = weighted.mean(mpg, Wt2) # Check weighted mean
)
Acc
是Wt2 * Wt2
,在第二部分中是Wt2 * mpg
,哪一个是想要的? - Jon Spring