很抱歉问这个...这肯定是一个FAQ,这是一个愚蠢的问题,但它一直在困扰我.假设我想获得数据帧中每个数字列的方差,例如
df <- data.frame(x=1:5,y=seq(1,50,10))
Run Code Online (Sandbox Code Playgroud)
当然,我试试
var(df)
Run Code Online (Sandbox Code Playgroud)
而不是给我我希望的东西,这将是类似的东西
x y
2.5 250
Run Code Online (Sandbox Code Playgroud)
我明白了
x y
x 2.5 25
y 25.0 250
Run Code Online (Sandbox Code Playgroud)
它具有对角线的变化,以及其他位置的协方差.当我查找help(var)并读取"var只是cov的另一个接口"时,这是有意义的.当然,方差是变量与其自身之间的协方差.输出是稍显混乱,但我可以沿对角线阅读,或者使用只产生变化diag(var(df)),sapply(df, var)或lapply(df, var),或致电var上反复df$x和df$y.
但为什么?方差是一种常规的,基本的描述性统计,仅次于均值.将它应用于数据帧的列不应该完全和完全无关紧要吗?当我只询问差异时,为什么要给我协方差?只是好奇.感谢您对此提出任何意见.
mne*_*nel 10
惯用的方法是
sapply(df, var)
Run Code Online (Sandbox Code Playgroud)
var 具有用于方法与涉及data.frames,其data.frames通过强迫到matrix.
Variance是一个常规的基本描述性统计,协方差和相关性也是如此.它们都是相互关联和有趣的,特别是如果您的目标是使用线性模型.
您可以随时创建自己的功能来执行
Var <- function(x,...){
if(is.data.frame(x)) {
return(sapply(x, var,...))} else { return(var(x,...))}
}
Run Code Online (Sandbox Code Playgroud)
这记录在?var,即:
Description:
‘var’, ‘cov’ and ‘cor’ compute the variance of ‘x’ and the
covariance or correlation of ‘x’ and ‘y’ if these are vectors. If
‘x’ and ‘y’ are matrices then the covariances (or correlations)
between the columns of ‘x’ and the columns of ‘y’ are computed.
Run Code Online (Sandbox Code Playgroud)
在"矩阵"中,文本表示类"matrix"和对象的对象"data.frame".
var没有传统意义上的数据帧方法.var简单地将输入数据帧强制转换为矩阵as.matrix,然后调用cov该矩阵.
在回答问题的原因时,我认为方差与协方差的概念密切相关并保持代码简单R Core为类矩阵对象的协方差编写了单个实现,并将其用于方差,因为它是你最希望从矩阵中得到的东西.
或者更简洁; 这就是R Core如何实现这一点.学会与之共存.:-)
还要注意的是,R是远离具有移动功能等mean和sd上一个数据帧的部件(列)操作.如果您想应用任何这些功能,包括var,您需要调用以下内容:
apply(foo, 2, mean) ## for matrices
sapply(foo, mean) ## for data frames
Run Code Online (Sandbox Code Playgroud)
或更快的特定替代品
colMeans(foo)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我怀疑这 diag(var(df))将是获得差异的最有效方式,而不是var通过apply一系列函数重复调用.diag(var(df))不可能sapply(df, var)比前者计算所有协方差和方差更快.
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |