标签: quantile

是否有更好的方法在R中创建分位数"假人"/因子?

我想分配代表分位数的因子.因此我需要它们是数字.这就是我编写以下函数的原因,这基本上是我的问题的答案:

qdum <- function(v,q){

qd = quantile(v,1:(q)/q)
v = as.data.frame(v)
v$b = 0
names(v) <- c("a","b")
i=1
for (i in 1:q){

    if(i == 1)
        v$b[ v$a < qd[1]] = 1
    else
        v$b[v$a > qd[i-1] & v$a <= qd[i]] = i
}

all = list(qd,v)
return(all)

    }
Run Code Online (Sandbox Code Playgroud)

你现在可能会笑:) 返回的列表包含一个变量,可用于将每个观察值分配给其对应的分位数.我现在的问题是:有更好的方法(更"本土"或"核心")吗?我知道quantcut(来自gtools包),但至少我得到的参数,我最终只有那些不方便(? - 至少对我来说)的阈值.

任何有助于变得更好的反馈都值得赞赏!

r quantile

8
推荐指数
1
解决办法
2754
查看次数

寻找四分位数

我编写了一个程序,用户可以在向量中输入任意数量的值,它应该返回四分位数,但我不断得到"向量下标超出范围"错误:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <algorithm>
#include <iomanip>
#include <ios>
#include <vector>

int main () {
    using namespace std;

    cout << "Enter a list of numbers: ";

    vector<double> quantile;
    double x;
    //invariant: homework contains all the homework grades so far
    while (cin >> x)
        quantile.push_back(x);

    //check that the student entered some homework grades
    //typedef vector<double>::size_type vec_sz;
    int size = quantile.size();

    if (size == 0) {
        cout << endl << "You must enter your numbers . "
                        "Please …
Run Code Online (Sandbox Code Playgroud)

c++ sorting vector quantile nth-element

8
推荐指数
2
解决办法
1万
查看次数

如何通过data.table中的十分位数组计算统计数据

我有一个data.table,并希望按组计算统计数据.

R) set.seed(1)
R) DT=data.table(a=rnorm(100),b=rnorm(100))
Run Code Online (Sandbox Code Playgroud)

这些群体应该由

R) quantile(DT$a,probs=seq(.1,.9,.1))
           10%            20%            30%            40%            50%            60%            70%            80%            90% 
-1.05265747329 -0.61386923071 -0.37534201964 -0.07670312896  0.11390916079  0.37707993057  0.58121734252  0.77125359976  1.18106507751 
Run Code Online (Sandbox Code Playgroud)

我如何计算出每箱的平均值b,比如b=-.5我是否[-0.61386923071,-0.37534201964]在bin中3

r quantile data.table

8
推荐指数
1
解决办法
3171
查看次数

R中分位数的定义

主要问题:假设您有一个离散的有限数据集$ d $.然后命令摘要(d)返回Min,1st quartile,Median,mean,3rd quartile和max.我的问题是:R使用什么公式来计算第一个四分位数?

背景:我的数据集是:d=c(1,2,3,3,4,9).summary(d)返回2.25第一个四分位数.现在,计算第一个四分位数的一种方法是选择值q1,使得25%的数据集小于等于q1.显然,这不是R正在使用的.所以,我想知道,R使用什么公式来计算第一个四分位数?

谷歌搜索这个话题甚至更加困惑,我找不到R使用的公式.输入help(summary)R对我也没有帮助.

r quantile

8
推荐指数
1
解决办法
1448
查看次数

用Pandas数据帧中的列分位数替换异常值

我有一个数据帧:

df = pd.DataFrame(np.random.randint(0,100,size=(5, 2)), columns=list('AB'))
    A   B
0  92  65
1  61  97
2  17  39
3  70  47
4  56   6
Run Code Online (Sandbox Code Playgroud)

这是5%的分位数:

down_quantiles = df.quantile(0.05)
A    24.8
B    12.6
Run Code Online (Sandbox Code Playgroud)

这里是低于分位数的值的掩码:

outliers_low = (df < down_quantiles)
       A      B
0  False  False
1  False  False
2   True  False
3  False  False
4  False   True
Run Code Online (Sandbox Code Playgroud)

我想将df低于分位数的值设置为其列分位数.我可以这样做:

df[outliers_low] = np.nan
df.fillna(down_quantiles, inplace=True)

    A   B
0  92.0  65.0
1  61.0  97.0
2  24.8  39.0
3  70.0  47.0
4  56.0  12.6
Run Code Online (Sandbox Code Playgroud)

但肯定应该有一种更优雅的方式.我怎么能不这样做 …

python quantile dataframe pandas

8
推荐指数
1
解决办法
4800
查看次数

在data.table中按组分割的分位数

我想为每个组进行分位数切割(切成n个具有相同点数的区间)

qcut = function(x, n) {
  quantiles = seq(0, 1, length.out = n+1)
  cutpoints = unname(quantile(x, quantiles, na.rm = TRUE))
  cut(x, cutpoints, include.lowest = TRUE)
}

library(data.table)
dt = data.table(A = 1:10, B = c(1,1,1,1,1,2,2,2,2,2))
dt[, bin := qcut(A, 3)]
dt[, bin2 := qcut(A, 3), by = B]

dt
A     B    bin        bin2
 1:  1 1  [1,4]    [6,7.33]
 2:  2 1  [1,4]    [6,7.33]
 3:  3 1  [1,4] (7.33,8.67]
 4:  4 1  [1,4]   (8.67,10]
 5:  5 1  (4,7]   (8.67,10]
 6:  6 …
Run Code Online (Sandbox Code Playgroud)

r quantile data.table

8
推荐指数
1
解决办法
2263
查看次数

pandas 在值少于分位数的系列上使用 qcut

我有数千个系列(DataFrame 的行)需要应用 qcut。定期会有一个系列(行)的值少于所需分位数(例如,1 个值与 2 个分位数):

>>> s = pd.Series([5, np.nan, np.nan])
Run Code Online (Sandbox Code Playgroud)

当我应用.quantile()它时,它可以毫无问题地分成两个分位数(具有相同的边界值)

>>> s.quantile([0.5, 1])
0.5    5.0
1.0    5.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)

但是,当我应用.qcut()整数值作为分位数时,会引发错误:

>>> pd.qcut(s, 2)
...
ValueError: Bin edges must be unique: array([ 5.,  5.,  5.]).
You can drop duplicate edges by setting the 'duplicates' kwarg
Run Code Online (Sandbox Code Playgroud)

即使我设置了duplicates参数,它仍然失败:

>>> pd.qcut(s, 2, duplicates='drop')
....
IndexError: index 0 is out of bounds for axis 0 with size 0
Run Code Online (Sandbox Code Playgroud)

我该如何进行这项工作?(同样,pd.qcut(s, [0, 0.5, 1], duplicates='drop')也不起作用。)

所需的输出是将分配 …

quantile pandas

8
推荐指数
1
解决办法
3万
查看次数

一种有效的分位数算法/数据结构,允许样本随着时间的推移而增加?

我正在寻找一种有效的分位数算法,该算法允许样本值随着时间的推移而“更新”或替换。

假设我有 items 的值1-n。我想将这些放入一个可以有效存储它们的分位数算法中。但是然后说在将来的某个时候, for 的值item-i会增加。我想删除原始值item-i并将其替换为更新后的值。特定用例适用于样本值随时间增加的流系统。

我见过的最接近这样的东西是t-Digest 数据结构。它有效地存储样本值。它唯一缺乏的是删除和替换样本值的能力。

我还查看了Apache Quantiles Datasketch - 它遇到了同样的问题 - 无法删除和替换样本。

编辑:更多地考虑这一点,不一定需要删除旧值并插入增加的值。如果存在只能更新值的约束,则可能有一种方法可以更轻松地重新计算内部状态。

java statistics quantile data-science

8
推荐指数
2
解决办法
266
查看次数

熊猫分位数因NaN存在而失败

在计算四分位数范围时,我遇到了一个有趣的情况.假设我们有一个数据帧,例如:

import pandas as pd
index=pd.date_range('2014 01 01',periods=10,freq='D')
data=pd.np.random.randint(0,100,(10,5))
data = pd.DataFrame(index=index,data=data)

data
Out[90]: 
             0   1   2   3   4
2014-01-01  33  31  82   3  26
2014-01-02  46  59   0  34  48
2014-01-03  71   2  56  67  54
2014-01-04  90  18  71  12   2
2014-01-05  71  53   5  56  65
2014-01-06  42  78  34  54  40
2014-01-07  80   5  76  12  90
2014-01-08  60  90  84  55  78
2014-01-09  33  11  66  90   8
2014-01-10  40   8  35  36  98

# …
Run Code Online (Sandbox Code Playgroud)

quantile python-2.7 pandas

7
推荐指数
1
解决办法
5693
查看次数

摘要 quantreg backsolve 中的错误

当我在 R 中运行分位数回归时,使用quantreg包,然后运行summary(quantregObject),我收到此错误消息:

base::backsolve(r, x, k = k, upper.tri = upper.tri, transpose = transpose, : 'backsolve' 中的奇异矩阵中的错误。对角线 [1] 中的第一个零

任何建议我怎么能解决这个问题?

regression r package quantile quantreg

7
推荐指数
1
解决办法
2672
查看次数