我正在尝试进行简单的中位数和 IQR 计算,除了整数之外,还涉及范围和不等式中出现的数字(百分比)。我的示例数据集如下所示:
5, 10, < 1, 10 - 20, 25, > 90
关于如何在这样的数据集上执行这两个计算的任何建议?
我正在尝试进行简单的中位数和 IQR 计算,除了整数之外,还涉及范围和不等式中出现的数字(百分比)。我的示例数据集如下所示:
5, 10, < 1, 10 - 20, 25, > 90
关于如何在这样的数据集上执行这两个计算的任何建议?
在这种情况下,您可以进行非参数估计,尽管没有置信区间等重要信息。您有左删失 ( <1)、右删失 ( >90) 和区间删失 ( 10-20) 值的组合。
尽管您可能不会将您的问题视为生存问题,但生存函数只是 1 减去相应的(累积)分布函数(即 ),因此的中位数是对应于“生存”分数 0.5 的值,第一个四分位数对应于生存分数 0.75 等。因此您可以使用旨在处理任意删失数据的生存建模方法得到分位数的估计。
RicenReg包可以根据此类数据计算生存曲线的 Turnbull 非参数最大似然估计值(区间删失数据的 Kaplan-Meier 方法的推广)。这应该比需要您预先对精确值和区间值进行排序的方法更有用。
要以这种方式获得单个非参数生存曲线,请提供一个 2 列矩阵,其中包含每个数据点的下限和上限。对于已知数据点,这两个值是相同的。使用您的示例百分比数据(下限,0;上限,100):
library(icenReg)
datMat <- matrix(c(0,1,5,5,10,10,10,20,25,25,90,100),ncol=2,byrow=TRUE)
datMat
## [,1] [,2]
## [1,] 0 1
## [2,] 5 5
## [3,] 10 10
## [4,] 10 20
## [5,] 25 25
## [6,] 90 100
icTest<- ic_np(datMat)
plot(icTest,bty="n")
我没有更改默认轴标签,因此您的值对应于此处的“时间”。是数据的生存函数,尽管这些框可能看起来很奇怪。包装小插图说明:
查看这些图,我们可以看到 NPMLE 的一个独特功能,用于区间删失数据。也就是说,有两条线用来表示生存曲线。这是因为对于区间删失数据,NPMLE 并不总是唯一的;位于两条线之间的任何曲线都有相同的可能性。
根据该图,您将接受10-20对应于的范围,包括中位数。IQR 将是(对应于)。5 - 25
正如 Frank Harrell 在他的回答中所建议的那样,如果您有一个合理的数据参数形式,您可以使用这种类型的建模做更多的事情。
如果您可以对观测值的水平进行排序,则可以确定中位数、第 1 个四分位数和第 3 个四分位数。
在您的样本数据中,可以对观察结果进行排序,但您必须确定“10 - 20”是否大于“10”,或者它们在排名时是否具有相同的排名。
IRQ 本身,作为第一个和第三个四分位数之间的差异,不一定有意义。
有不同的方法来确定分位数的值。例如,R 有 9 个选项(www.rdocumentation.org/packages/stats/versions/3.6.2/topics/quantile)。有些更适合非连续数据。
对于不连续的数据,您可能会得到例如“介于‘好’和‘非常好’之间的答案。在您的样本数据中,中位数将在“10”和“10 - 20”之间,假设这两个在排名时是不同的。
以下可以在 R 中运行(或在例如rdrr.io/snippets/)。这假设“10 - 20”大于“10”。并使用 R 分位数类型 1,它不会返回跨越两个级别的答案。
.
Observed = c("5", "10", "< 1", "10 - 20", "25", "> 90")
Obs.factor = factor(Observed,
ordered = TRUE,
levels = c("< 1", "5", "10","10 - 20", "25", "> 90") )
quantile (Obs.factor, type=1, probs=0.50)
quantile (Obs.factor, type=1, probs=0.25)
quantile (Obs.factor, type=1, probs=0.75)
如果您只发生“< 1”,您可以计算中位数。通常,除非您假设平滑的参数分布并在计算似然函数时明确处理左、右和区间审查,否则您无法估计您想要的内容,以便您可以获得该分布参数的最大似然估计。然后你计算平均值和分位数,它们是这些基础参数的函数。它非常投入。