我使用此命令为中值创建一列:
data$median<-apply(data[,2:181],1, median, na.rm=TRUE)
然后,我想计算每种表型有多少个病例和对照,但看起来它计算的中位数不正确。我的命令如下:
table(data$anyMI, data$median)
输出显示:
1 1.5 2 2.5 3 3.5 4 4.5 5
0 2044 62 7470 221 11163 248 8389 74 1659
1 102 3 357 11 557 21 404 2 85
我不确定为什么我会得到一半的值,而该值只能是1-5的整数。 这里出了什么问题,为什么显示半值?
答案 0 :(得分:1)
通过定义,中位数是一个值,例如样本的一半较高,而另一半较低。
如phiver所说,如果您有偶数个值,那么假设您上半部分的上限为x
,下半部分的下限为y
,任何< / strong> x
和y
之间的值可以是中位数。
在默认情况下,R会在这种情况下声明median = (x+y)/2
。
如果要从数据集中获取一个值,则可以使用奇数个观测值(例如,删除一个观测值)或对结果取整。
答案 1 :(得分:1)
根据标准定义,中位数
是中间值
median(1:5)
#[1] 3
是两个中间两个数的(算术平均值)
median(1:4)
#[1] 2.5
例如参见the definition of the statistical median on Wolfram MathWorld。
在更数学(也许有趣)的旁注中:
N 个观测值的中位数的不同定义是通过
其中 x 的中位数定义为 y ,它使与所有观测值的L2距离之和最小。
我们可以验证这确实为我们提供了与median
相同的中位数:
x <- c(1, 1:4)
x[which.min(sapply(x, function(y) sum(x - y)^2))]
#[1] 2
median(x)
#[1] 2
关于替代定义的有趣之处在于,它允许将单变量中值扩展到高维空间中一组点的geometric median。思考:3维欧几里得空间中三点的中位数是多少?