![](/img/trans.png)
[英]Using sum(x:y) to create a new variable/vector from existing values in R
[英]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.