5

これら2つのベクトル間のサンプル共分散を計算しようとしています。2つの入力変数を使用して関数を定義しました。正しいかわかりませんか?また、サンプル共分散の式は実行されません。誰かが私がRでそれを書き出すのを手伝ってもらえますか?

  xv = c(1., 5.5, 7.8, 4.2, -2.7, -5.4, 8.9)
  yv = c(0.1, 1.5, 0.8, -4.2, 2.7, -9.4, -1.9)
  sampleCov= function(x,y){ 
    cov(xv,yv) = frac{sum_{i=1}^{n}(x_i-\mu_x)(y_i-\mu_y)}{n-1}].
    return (Cov(xv,yv)
  }
4

3 に答える 3

6

Rcovには、まさにあなたが望むことを行う基本関数が呼び出されていますが、関数を書きたい場合は(それを行う必要はありません)、次のことを試すことができます:

COV<- function(x,y) {
  if(length(x)!=length(y)) {stop('x must have the same length as y ')}
  x.bar <- mean(x)
  y.bar <- mean(y)
  N <- length(x)

  Cov <- (sum((x-x.bar)*(y-y.bar))) / (N-1)
  return(Cov)
}

COV(xv, yv)
[1] 8.697381

cov(xv, yv)
[1] 8.697381

ご覧のとおりCOV、 と同じ結果が得られるcovため、そのための関数を作成する必要はありません。

さらに、関数の本体には R 構文がありません。代わりに、同じではない LaTex 構文を記述しました。

于 2012-10-17T19:45:06.100 に答える
5

内部cov()関数を使用するだけです:

xv <- c(1., 5.5, 7.8, 4.2, -2.7, -5.4, 8.9)
yv <- c(0.1, 1.5, 0.8, -4.2, 2.7, -9.4, -1.9)
cov(xv, yv)

R> cov(xv, yv)
[1] 8.697381

本当に車輪を再発明したい場合:

sampleCov <- function(x,y){
    stopifnot(identical(length(x), length(y)))
    sum((x - mean(x)) * (y - mean(y))) / (length(x) - 1)
}

R> sampleCov(xv, yv)
[1] 8.697381
于 2012-10-17T19:45:41.820 に答える