【问题标题】:Weighted Average notation - Adjusting weights in R加权平均符号 - 在 R 中调整权重
【发布时间】:2014-03-11 15:40:58
【问题描述】:

我正在尝试使用以下形式计算 R 中统计样本(向量)的加权平均值:

该函数接受一个向量,并根据第二个参数(1 - 3)调整权重,它们是:

其中s 是标准差。

如果参数为 1 或 3,我已使用 else-if's 相应地调整了权重,但我在使用第二个时遇到了问题,因为需要满足一些标准...

我一直在计算 X - xBar 作为向量:m = x-mean(x)

我一直在用 R 函数计算ss = sd(x)

我的问题是关于第二个标准中的“条件的满足应该如何编程”。到目前为止,每种情况我都有一个if,但是...

在计算加权平均值时,(以上面的一个为例),x 向量 (m/s) 的每个元素是否需要小于 1?还是我需要测试每个元素并相应地从 3 个条件中分配权重?

例如。如果第一个元素的答案小于 1,则分配权重或 1,但第二个元素的答案介于 1 和 2 之间,则为其分配权重 0.5?

我希望这是有道理的。在 R 中,它会抛出一条警告消息,说逻辑只是比较向量的第一个元素......所以这就是引发问题的原因。

提前致谢。

【问题讨论】:

    标签: r conditional-statements definition


    【解决方案1】:

    为了在保持合理效率的同时避免出现警告消息,您可能希望使用 ifelse 而不是 ifelse,可能类似于

    m <- mean(x)
    s <- sd(x)
    absstandardx <- abs( (x - m) / s )
    w2 <- ifelse( absstandardx < 1, 1, ifelse( absstandardx < 2, 0.5, 0 ) ) 
    weightedmean2 <- sum(w2 * x) / sum(w2)
    

    【讨论】:

    • 啊,ifelse 的很酷的实现。我总是忘记那个功能。优秀的答案。感谢您发布。只是为了澄清,每个元素都在这里测试并分配1, 0.5, 0 权重?再次感谢。
    • 是的。拿一个小的测试集,比如x &lt;- c(0,1,25,3,16,5,2,4),看看你得到了什么absstandardxw2
    • 是的,我刚刚做到了。效果很好。只是检查我看到的东西是否正确。再次感谢您的发帖。
    猜你喜欢
    • 2020-08-26
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多