我的第一个问题在这里。这个问题从我一生中就被偷走了。我知道,这并不重要,但同时:我需要知道!我知道有很多好的回归公式。但是,当我尝试使用古老的算法来解决这个问题时,我在beta上得到了荒谬的答案。
假定贝塔向量为(X'X)^(-1)X'y(其中X是回归矩阵,而y是答案向量)。我举一个例子(它不适用于OLS是不相关的-我只想在这里b:s):
X <- matrix(1:10)
y <- matrix(2:11)
b <- (t(X) %*% X)^(-1) %*% t(X) %*% y
哪个给定b = 1.142857,而summary(lm(y〜X))给定beta = 1和1的截距。我在X上添加一个常数以获得截距:X <-cbind(X,1)和我得到的结果是b =(2.324675,14.5),这根本没有意义。我在这里做什么错了?
答案 0 :(得分:2)
这里有两个问题。首先是符号问题。公式中的-1的幂实际上表示矩阵逆。用R中的solve
计算而不是用^-1
计算,这表示元素的倒数。
然后,您需要创建一个实际上包含截距的设计矩阵。
X <- matrix(1:10)
y <- matrix(2:11)^2
coef(lm(y~X))
#(Intercept) X
# -21 13
X <- cbind(1, X)
solve(t(X) %*% X) %*% t(X) %*% y
# [,1]
#[1,] -21
#[2,] 13
显然,您不应该在现实世界的应用程序中真正进行此矩阵求逆(而R的lm
则不这样做)。
答案 1 :(得分:1)
问题在于将^(-1)
用于反函数。它不适用于矩阵。 solve
用于获取矩阵的逆:https://www.statmethods.net/advstats/matrix.html
# use solve
b <- solve(t(X) %*% X) %*% t(X) %*% y
# fit model without intercept
m <- lm(y~-1+X)
summary(m)
# same coefficients
b
m$coefficients
# with intercept
X2 <- cbind(rep(1, 10), X)
b2 <- solve(t(X2) %*% X2) %*% t(X2) %*% y
m2 <- lm(y~+X)
summary(m2)
b2
m2$coefficients
答案 2 :(得分:0)
header("HTTP/1.0 200 OK");
header("Content-Type: image/png"); // Or /jpg, /gif, etc
header("Content-Length: " . (string) filesize($filename));
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: inline");
header("Location: /" . $filename);
// Then:
$fileHandle = fopen($filename, 'rb');
fpassthru($fileHandle);
https://www.rdocumentation.org/packages/Matrix/versions/0.3-26/topics/solve.Matrix