我需要一个像xtileStata 中的函数,给定一个向量,它返回每个 obs 属于哪个分位数。所以如果函数定义为
function xtile(vector; q= 4) #q = 4 by default returns quartiles
*** returns a vector with the same size as "vector", indicating which quantile each obs belongs to.
end
Run Code Online (Sandbox Code Playgroud)
我想在以下方面使用它:
@pipe df |> transform(:height => xtile => :quantiles)
Run Code Online (Sandbox Code Playgroud)
我知道Stella.jl提供了这样的功能。但是我无法安装该软件包,现在我想知道是否还有其他软件包。或者我可以自己实现它。
使用 R 和包quantreg,我正在对我的数据执行分位数回归分析。
我可以使用汇总函数中的 se(标准误差)估计器来访问 p 值,如下所示,但是我只能得到 5 位小数,并且想要更多。
model <- rq(outcome ~ predictor)
summary(model, se="ker")
Call: rq(formula = outcome ~ predictor)
tau: [1] 0.5
Coefficients:
Value Std. Error t value Pr(>|t|)
(Intercept) 78.68182 2.89984 27.13312 0.00000
predictor 0.22727 0.03885 5.84943 0.00000
Run Code Online (Sandbox Code Playgroud)
如何获取 p 值的更多小数位?
好的,所以我可以通过选择包含数值结果矩阵的子对象来获得更多的小数位;
> summary(model, se="ker")[[3]]
Value Std. Error t value Pr(>|t|)
(Intercept) 78.6818182 3.13897835 25.066059 0.000000e+00
predictor 0.2272727 0.04105681 5.535567 4.397638e-08
Run Code Online (Sandbox Code Playgroud)
然而,当该值 <1e-12 时,P 值仍四舍五入为 0(以上输出是简化的示例模型)。通过应用 @seancarmody 的建议,我可以得到更多;
format(summary(model, se="ker")[[3]], digits=22)
Run Code Online (Sandbox Code Playgroud)
但如果 P …
q <- quantile(faithful$eruptions)
> q
0% 25% 50% 75% 100%
1.60000 2.16275 4.00000 4.45425 5.10000
Run Code Online (Sandbox Code Playgroud)
我得到以下结果,数据集在R中提供.
head(faithful)
eruptions waiting
1 3.600 79
2 1.800 54
3 3.333 74
4 2.283 62
5 4.533 85
6 2.883 55
Run Code Online (Sandbox Code Playgroud)
我想要一个包含数据的数据帧和一个额外的列,用于指出每个观察所属的分位数.例如,最终数据集应如下所示
eruptions waiting Quartile
1 3.600 79 Q1
2 1.800 54 Q2
3 3.333 74
4 2.283 62
5 4.533 85
6 2.883 55
Run Code Online (Sandbox Code Playgroud)
如何才能做到这一点?
我想使用该quantreg包从分位数回归中提取系数以及上限和下限。这是帮助文件中的示例。
data(engel)
attach(engel)
taus <- c(.05,.1,.25,.75,.9,.95)
f <- rq((foodexp)~(income),tau=taus)
sf <- summary(f)
sf[1]
#[[1]]
#Call: rq(formula = (foodexp) ~ (income), tau = taus)
#tau: [1] 0.05
#Coefficients:
# coefficients lower bd upper bd
#(Intercept) 124.88004 98.30212 130.51695
#income 0.34336 0.34333 0.38975
Run Code Online (Sandbox Code Playgroud)
我知道我可以用来coefficients()获取系数。
cf <- t(data.frame(coefficients(f))) # transpose for better arrangement
cf
# (Intercept) income
#tau..0.05 124.88004 0.3433611
#tau..0.10 110.14157 0.4017658
#tau..0.25 95.48354 0.4741032
#tau..0.75 62.39659 0.6440141
#tau..0.90 67.35087 0.6862995
#tau..0.95 64.10396 0.7090685
Run Code Online (Sandbox Code Playgroud)
但我不知道如何获得出现在summary(). 我看了 …
我有限的理解是分位数和四分位数是某种相似但完全不同的测量方式。我用谷歌搜索但找不到易于理解的解释。这里有一个与 D3 相关的问题,但还没有答案。
我的具体问题是我们什么时候应该使用分位数而不是四分位数,反之亦然?我感谢任何非专业术语的解释或琐碎的例子。谢谢!
根据文档:
返回一组表达式值的近似边界,其中 number 表示要创建的分位数数。此函数返回一个由 number + 1 个元素组成的数组,其中第一个元素是近似最小值,最后一个元素是近似最大值。
听起来如果我想要真正的四分位数,我需要使用APPROX_QUANTILES(values, 4)which 将返回[minvalue, 1st quartile, 2nd quartile, 3rd quartile, maxvalue]
根据https://en.wikipedia.org/wiki/Quartile,四分位数集包含 3 个数据点 - 其中没有一个是数据的最小值/最大值。
我的假设正确吗?是APPROX_QUANTILES(values, 4)要返回真正的四分位?
我有一个 dfAB
import pandas as pd
import random
A = [ random.randint(0,100) for i in range(10) ]
B = [ random.randint(0,100) for i in range(10) ]
dfAB = pd.DataFrame({ 'A': A, 'B': B })
dfAB
Run Code Online (Sandbox Code Playgroud)
我们可以采用分位数函数,因为我想知道列的第 75 个百分位数:
dfAB.quantile(0.75)
Run Code Online (Sandbox Code Playgroud)
但是现在说我在 dfAB 中放入了一些 NaN 并重新执行该函数,显然它是不同的:
dfAB.loc[5:8]=np.nan
dfAB.quantile(0.75)
Run Code Online (Sandbox Code Playgroud)
基本上,当我计算dfAB的平均值时,我通过skipna忽略Na,因为我不希望它们影响我的统计数据(我的代码中有很多,故意的,obv使它们为零没有帮助)
dfAB.mean(skipna=True)
Run Code Online (Sandbox Code Playgroud)
因此,我得到的是分位数函数是否/如何解决 NaN?
我在名为 的对象的列中有很多分数example。我想将这些分数分成十分位数,并将相应的十分位数间隔分配给每一行。我尝试了以下方法:
import random
import pandas as pd
random.seed(420) #blazeit
example = pd.DataFrame({"Score":[random.randrange(350, 1000) for i in range(1000)]})
example["Decile"] = pd.qcut(example["Score"], 10, labels=False) + 1 # Deciles as integer from 1 to 10
example["Decile_interval"] = pd.qcut(example["Score"], 10) # Decile as interval
Run Code Online (Sandbox Code Playgroud)
这给了我我正在寻找的十分位数。但是,我希望其中的十分位数example["Decile_interval"]是整数,而不是浮点数。我尝试过precision=0,但它只显示.0在每个数字的末尾。
如何将区间中的浮点数转换为整数?
编辑:正如@ALollz 指出的那样,这样做将改变十分位分布。不过,我这样做是为了演示目的,所以我并不担心这一点。支持@JuanC 实现这一点并发布一个解决方案。
当dplyr用于创建按变量级别组织的汇总统计表时,我无法弄清楚计算四分位数的语法而不必重复列名。也就是说,使用调用,例如vars()andlist()与其他函数一起工作,例如mean()and median()but not withquantile()
搜索产生了过时的解决方案,这些解决方案不再有效,因为它们使用了不推荐使用的调用,例如do()和/或funs()。
data(iris)
library(tidyverse)
#This works: Notice I have not attempted to calculate quartiles yet
summary_stat <- iris %>%
group_by(Species) %>%
summarise_at(vars(Sepal.Length),
list(min=min, median=median, max=max,
mean=mean, sd=sd)
)
A tibble: 3 x 6
Species min median max mean sd
<fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 setosa 4.3 5 5.8 5.01 0.352
2 versicolor 4.9 5.9 7 5.94 0.516
3 virginica 4.9 6.5 …Run Code Online (Sandbox Code Playgroud) 我最近才发现Julia 和 Matlab 中对quantile()有不同的定义。我无法对齐这两个定义,并且总是得到不同的结果。
有谁知道为什么会出现这种情况以及如何调整他们的定义?
我尝试了以下方法:
A = [0.5377, 1.8339 , -2.2588 , 0.8622 , 0.3188, -1.3077, -0.4336];
Q = quantile(A,0.3);
Run Code Online (Sandbox Code Playgroud)
结果是Q = -0.7832。当我在 Julia 统计库中写下同样的内容时:
A = [0.5377, 1.8339 , -2.2588 , 0.8622 , 0.3188, -1.3077, -0.4336];
Q1 = quantile(A,0.3);
Q2 = quantile(A,0.3,sorted=true);
Run Code Online (Sandbox Code Playgroud)
结果是Q1=-0.60842和Q2 = -1.44026。我也尝试过使用 alpha 和 beta 参数,但这非常乏味,而且我无法知道我选择的参数是否保持在整个范围内。
quantile ×10
r ×4
statistics ×3
julia ×2
pandas ×2
python ×2
quantreg ×2
regression ×2
d3.js ×1
dataframe ×1
dplyr ×1
matlab ×1
percentile ×1
quartile ×1