首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算Tukey中位数

计算Tukey中位数
EN

Stack Overflow用户
提问于 2020-11-23 03:41:36
回答 1查看 54关注 0票数 0

我尝试使用以下函数计算两个变量的数据深度:

代码语言:javascript
复制
library(depth)
x <- data.frame(data$`math score`, data$`reading score`)


depth(1000, x, method = "Tukey", approx = FALSE, eps = 1e-8, ndir = 1000)

深度之后的第一个变量是u,它代表要计算其深度的数值向量。维度必须与观察值的维度相同。我有1000个观察结果,但是我得到了以下错误消息:

代码语言:javascript
复制
Error in depth(1000, x, method = "Tukey", approx = FALSE, eps = 1e-08,  : 
  Dimension mismatch between the data and the point u.

有人知道如何解决这个问题吗?提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2020-11-23 06:00:48

如果您查看函数depth的文档,它会显示:

u是要计算深度的数值向量。维度必须与观察值的维度相同。

因此,u必须是由n个分量的向量表示的多维空间中的一个点,而x必须是m×n个分量的矩阵或数据帧(m行对应m个点)。您正在将u与集合x中的所有其他多维点进行比较,以找到可以与u共享半空间的最小点数。

让我们在二维空间中创建一个非常好的例子:

代码语言:javascript
复制
library(depth)

set.seed(100)

x <- data.frame(x = c(rnorm(10, -5, 2), rnorm(10, 5, 2)), y = rnorm(20, 0, 2))

plot(x)

depth函数计算特定点相对于数据的深度。所以让我们使用原点:

代码语言:javascript
复制
u <- data.frame(x = 0, y = 0)
points(u, col = "red", pch = 16)

天真地,我们可能认为这里的原点具有10/20点的深度(即,划分此数据集的最明显的方法是通过原点的垂直线,每边有10个点,但我们发现:

代码语言:javascript
复制
depth(u, x) 
#> [1] 0.35

这表明有一个包含原点的半空间,它只包含0.35个点,即20个点中的7个点:

代码语言:javascript
复制
depth(u, x) * nrow(x)
#> [1] 7

我们可以像这样在视觉上看到:

代码语言:javascript
复制
abline(0, -0.07)
points(x[x$y < (-0.07 * x$x),], col = "blue", pch = 16)

我们把这7个点涂成了蓝色。

所以不清楚您期望从depth函数得到什么结果,但是您需要给它一个值c(math_score, reading_score),其中math_scorereading_score是您想要知道深度的测试值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64958721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档