标签: quantile

qqline 没有给出我期望的线路

如果我根据卡方分布绘制我的多元数据的马氏距离的多元 qqplot,我希望伴随的 qqline 是截距为 0 和斜率为 1 的线。但是如果我运行以下代码:

scores<-matrix(rnorm(100*3),nc=3)
mah_scores = mahalanobis(scores,center=colMeans(scores),cov=cov(scores))
chi_scores = qchisq(ppoints(nrow(scores)),df=3)
qqplot(x=chi_scores,y=mah_scores,asp=1)
abline(a=0,b=1)
qqline(mah_scores, distribution = function(p) qchisq(p,df = 3),col="red")
Run Code Online (Sandbox Code Playgroud)

我得到下图:

带有 abline 和 qqline 的 qqplot

我希望 qqline(红色)与截距 0 和斜率 1(黑色)的线相同。谁能向我解释为什么这两行不匹配?

(我正在运行 R 版本 2.15.3 (2013-03-01))

plot r quantile multivariate-testing

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

有效计算数据框列的百分位

此问题是此处提出和回答的 StackOverflow 问题的扩展。

我的情况有所不同,因为我想计算 50,000 个(或更多!)值的向量内每个值的百分位数。例如 -

df <- data.frame(val = rnorm(n = 50000, mean = 50, sd = 20))
df$val.percentile <- sapply(X = df$val, function(x) ecdf(df$val)(x))
head(df)
Run Code Online (Sandbox Code Playgroud)

有没有一种好方法来优化计算每个值的百分位数的过程?本质上,我希望使其尽可能高效,以便运行时间尽可能短。

r quantile dataframe ecdf

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

R:将数据框中的组值保持在 99 分位数以下

我有一个包含组和值的数据框。首先,我计算每组的 99% 分位数。现在,我想删除每个组中高于 99% 分位数的值。

df<-data.frame(group = rep(c("A", "B"), each = 4),
               value = c(c(6,5,80,4,60)*10,3,5,4))

# data
  group value
1     A    60
2     A    50
3     A   800
4     A    40
5     B   600
6     B     3
7     B     5
8     B     4
Run Code Online (Sandbox Code Playgroud)

计算各个组的分位数

quant<-aggregate(df$value, by = list(df$group), FUN = quantile, probs  = 0.99)

> quant
  Group.1      x
1       A 777.80
2       B 582.15
Run Code Online (Sandbox Code Playgroud)

我尝试应用分位数向量来选择较低的值。然而,它错过了组规范。

df[df$value < quant$x,]
Run Code Online (Sandbox Code Playgroud)

预期结果:

  group value
1     A    60
2     A    50
4     A    40 …
Run Code Online (Sandbox Code Playgroud)

select r quantile

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

如何从频率数据中找到分位数?

假设我有一个数据表,其中客户购买了这样的东西:

Customer|Price|Quantity Sold  
a       | 200 |   3.3  
b       | 120 |   4.1  
c       | 040 |   12.0  
d       | 030 |   16.76
Run Code Online (Sandbox Code Playgroud)

这应该是数据表的粗略表示,其中包含同一产品的客户、价格和销售数量。

我想弄清楚如何计算此信息的购买价格中位数。

我对方法有点困惑,因为我知道在 pandas 中获取分位数很容易data[row].quantile(x)

但由于每一行实际上代表多个观察结果,我不确定如何获取分位数。

编辑:最重要的是,主要问题是销售数量不离散。这是一个连续变量。(我们就像谈论米、公斤等,因此不能选择创建更多行。)

python statistics quantile pandas

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

R计算分位数错误或不同?

我发现一篇文章提供了计算分位数的算法,而 R 显然没有遵循该文章。

文章为: https://www-users.york.ac.uk/~mb55/intro/quantile.htm

在 R 中,我有以下代码:

nv<-c(10,20,30,40)
quantile(nv)
  0%  25%  50%  75% 100% 
10.0 17.5 25.0 32.5 40.0
Run Code Online (Sandbox Code Playgroud)

然而,75%结果的分位数似乎是错误的,根据文章,公式是:

i = q(n+1) 
Run Code Online (Sandbox Code Playgroud)

在我的例子中(75%)q=0.75 且 n=4(我的组合中有 4 个观察值)

X_j + (X_j+1 - X_j) times (i - j) 
Run Code Online (Sandbox Code Playgroud)

这意味着它应该是:

30 + (40-30)*(3.75-3) = 37.5而不是32.5

我很难认为 R 犯了一个错误。

我在这里缺少什么?

谢谢。

r quantile

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

如何在 Postgres 中使用具有多个分位数的percentile_conts

我目前有一个查询,其工作方式如下:

select AVG(t2 - t1) as delay,
       percentile_cont(0.25) within group (order by (t2 - t1)) as q25,
       percentile_cont(0.5) within group (order by (t2 - t1)) as median,
       percentile_cont(0.75) within group (order by (t2 - t1)) as q75,
       p.bool1,
       p.cat1
from people p
group by p.bool1, p.cat1
order by p.cat1,p.bool1
Run Code Online (Sandbox Code Playgroud)

但是,我在 postgres 函数聚合页面上阅读: https://www.postgresql.org/docs/9.4/functions-aggregate.html

我应该能够指定多个分位数:

percentile_cont(fractions) WITHIN GROUP (ORDER BY sort_expression)  double precision[]  double precision or interval    array of sort expression's type     multiple continuous percentile: returns an array of results matching …
Run Code Online (Sandbox Code Playgroud)

postgresql quantile percentile-cont

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

如何在R中使用另一个变量的分位数创建一个变量?

我正在尝试使用“dplyr”命令 mutate 创建一个变量,该变量必须指示另一个变量的分位数。

例如:

# 1.  Fake data:
data <- data.frame(
  "id" = seq(1:20),
  "score" = round(rnorm(20,30,20)))

# 2. Creating varaible 'Quantile_5'
data <-data %>% 
  mutate(Quntile_5 = ????)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经创建了一个函数,该函数可以识别并返回分位数作为一个因子,并且该函数实际上有效

# 3. Create a function:
quantile5 <- function(x){
  x = ifelse(
    x < quantile(x,0.2),1,
    ifelse(x >= quantile(x,0.2) & x < quantile(x,0.4),2,
           ifelse(x >= quantile(x,0.4) & x < quantile(x,0.6),3,
                  ifelse(x >= quantile(x,0.6) & x < quantile(x,0.8),4,5
                         ))))
  return(as.factor(x))
}

# 4. Running the code:
data <-data %>% 
  mutate(Quntile_5 = quantile5(score))

# 5. …
Run Code Online (Sandbox Code Playgroud)

r quantile dataframe dplyr

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

分位数回归和p值

我正在为我的数据集应用guantile回归(使用R).使用不同的分位数回归线(taus < - c(0.05,0.25,0.75,0.95))很容易产生漂亮的散点图.

当我想为这些分位数中的每一个产生p值(为了查看每个回归线的统计显着性)时出现问题.对于中值分位数(tau = 0.5),这不是问题,但是当涉及例如tau = 0.25时,我得到以下错误消息:

>QRmodel<-rq(y~x,tau=0.25,model=T)
>summary(QRmodel,se="nid")
Error in summary.rq(QRmodel, se = "nid") : tau - h < 0:  error in summary.rq
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?

另外:建议提及有关分位数回归模型结果的p值和系数,或者仅仅显示情节图片并根据该图片讨论结果是否足够?

最好的问候,沮丧的人

regression r quantile

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

在R中执行逐列操作

乡亲

我有一个建筑物区域的温度数据,如下所示:

Lines <- "Date,Zone01,Zone02
 01/01  01:00:00,24.5,21.3
 01/01  02:00:00,24.3,21.1
 01/01  03:00:00,24.1,21.1
 01/01  04:00:00,24.1,20.9
 01/01  05:00:00,25.,21.
 01/01  06:00:00,26.,21.
 01/01  07:00:00,26.6,22.3
 01/01  08:00:00,28.,24.
 01/01  09:00:00,28.9,26.5
 01/01  10:00:00,29.4,29
 01/01  11:00:00,30.,32.
 01/01  12:00:00,33.,35.
 01/01  13:00:00,33.4,36
 01/01  14:00:00,35.8,38
 01/01  15:00:00,32.3,37
 01/01  16:00:00,30.,34.
 01/01  17:00:00,29.,33.
 01/01  18:00:00,28.,32.
 01/01  19:00:00,26.3,30
 01/01  20:00:00,26.,28.
 01/01  21:00:00,25.9,25
 01/01  22:00:00,25.8,21.3
 01/01  23:00:00,25.6,21.4
 01/01  24:00:00,25.5,21.5
 01/02  01:00:00,25.4,21.6
 01/02  02:00:00,25.3,21.8"
Run Code Online (Sandbox Code Playgroud)

我想要做的是计算每个区域的第99百分位的温度.我会做这个命令:

Q=quantile(Lines$Zone01,0.99)
Run Code Online (Sandbox Code Playgroud)

但是,我必须手动为数据集中的每一列执行此操作.有没有办法让这个命令遍历所有列(从第二列开始)?

非常感谢.

loops r quantile

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

获取每个值的分位数

R中是否有一个实现的(!)函数,它为每个值提供经验分位数?我找不到任何......

假设我们有x

x = c(1,3,4,2)
Run Code Online (Sandbox Code Playgroud)

我想要每个元素的分位数.

[1] 0.25, 0.75, 1, 0.5 
Run Code Online (Sandbox Code Playgroud)

非常感谢你!

r quantile

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