簡體   English   中英

function 從 r 中的 X 和 y 生成值 beta 的向量

[英]function that generates a vector of values beta from X and y in r

我想寫一個 function 從 X 和 y 生成一個 beta 值向量,我們得到

貝塔 = [(X^T)*X]^-1 * (X^T) * y

我這樣寫了一個代碼,但它在 t(X) * X: non-conformable arrays 中變成了錯誤

請幫我解決一下這個。

代碼:

set.seed(143)
X <- cbind(rep(1,50), rnorm(50,0,1), rnorm(50,0,1))
y <- 3 + -4*X[,2] + 2*X[,3] + rnorm(50,0,1)

BetaEstimator <- function(X, y){
Beta <- solve(t(X)*X) * t(X) * y
  return(Beta)}
BetaEstimator(X,y)

您應該使用矩陣乘法的符號,即使用%*%而不是*

嘗試:

BetaEstimator <- function(X, y) {
  solve(t(X) %*% X) %*% t(X) * y
}

您應該使用矩陣產品%*% ,而不是元素產品* 此外, crossprod可用於簡化您的表達式,如下所示

BetaEstimator <- function(X, y) {
  solve(crossprod(X)) %*% crossprod(X, y)
}

這是一種使用 QR 分解的方法。

BetaEstimator <- function(X, y) solve.qr(qr(X), y)

set.seed(143)
X <- cbind(rep(1,50), rnorm(50,0,1), rnorm(50,0,1))
y <- 3 + -4*X[,2] + 2*X[,3] + rnorm(50,0,1)

# compare with R's linear model    
fit <- lm.fit(X, y)

coef(fit)
#       x1        x2        x3 
# 3.101107 -3.976275  1.966437 

BetaEstimator(X, y)
#[1]  3.101107 -3.976275  1.966437

系數等於 R。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM