- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个示例,以图形方式展示最小二乘法的工作原理。我正在应用一种数值方法,我向 R 提供截距 (a) 和斜率 (b) 的多种可能值组合,然后计算所有可能组合的平方和 (SSE)。 a 和 b 与最低 SSE 的组合应该是最好的组合,但不知何故,我对 a 的估计与由 lm() 计算的实际值。最重要的是,我对 a 的估计对给定 R 的可能值范围很敏感 - 范围越宽,对 a 的估计就越偏离.
这是我的例子。我正在使用 R 中内置的数据集“longley”:
data(longley)
plot(GNP ~ Employed, data = longley,
xlab="% employed adults",
ylab="Gross National Product (million $?)",
main="Money money money"
)
# ranges of a and be where we think their true value lies:
possible.a.vals <- seq(-1431,-1430, by=0.01)
possible.b.vals <- seq(27,28.5, by=0.01)
# all possible combinations of a and b:
possible.ab <- expand.grid(possible.a.vals = possible.a.vals,
possible.b.vals = possible.b.vals
)
possible.ab.SSE <- as.data.frame(possible.ab)
head(possible.ab.SSE); tail(possible.ab.SSE)
possible.ab.SSE$SSE <- rep(NA, length.out = length(possible.ab.SSE[,1]))
for (i in 1:length(possible.ab.SSE[,1])){
predicted.GNP <- possible.ab.SSE$possible.a.vals[i] + possible.ab.SSE$possible.b.vals[i] * longley$Employed
possible.ab.SSE$SSE[i] <- sum((longley$GNP - predicted.GNP)^2)
}
possible.ab.SSE$possible.a.vals[which(possible.ab.SSE$SSE == min(possible.ab.SSE$SSE))]
possible.ab.SSE$possible.b.vals[which(possible.ab.SSE$SSE == min(possible.ab.SSE$SSE))]
# Estimate of a = -1430.73
# estimate of b = 27.84
# True values of a and b:
# a = -1430.48
# b = 27.84
我对 b 的估计正确,但 a 略有偏差。此外,扩展 a 和 b 的可能值范围会产生与实际值更远的 a 估计值,给我一个估计值a 大约在 -1428 - 除了让我的循环永远工作之外,如果我不是一个懒惰的 SCSS ,我可以通过使用 apply() 来解决这个问题。
# plot in 3d:
require(akima) # this helps interpolating the values of a,b, and SSE to create a surface
x= possible.ab.SSE$possible.a.vals
y= possible.ab.SSE$possible.b.vals
z=possible.ab.SSE$SSE
s=interp(x,y,z)
persp(x = s$x,
y = s$y,
z = s$z,
theta =50, phi = 10,
xlab="a", ylab="b", zlab="SSE",
box=T
)
这表明平方和与可能的 a 值之间的相关性大致平坦,这解释了为什么 a 的估计值往往偏离目标。这仍然让我感到困惑:如果最小二乘法的分析方法确定了参数值的估计值,那么数值方法也应该如此。
不应该吗?
提前感谢您的反馈。
编辑
有人指出该问题是一个解决方案。我忽略了与 a 的每个值关联的 SSE 值并不独立于 b;最重要的是,SSE 的变化受 b 变化的影响比受 a 变化的影响更大(或者至少这是我的理解)。结果是斜率 b 的估计值的近似值可以覆盖截距 a 的估计值。
以下三个图表显示了 a、b 和 SSE 之间更广泛和更稀疏值范围的相关性:
possible.a.vals <- seq(-3000,1000, by=10)
possible.b.vals <- seq(-30,60, by=2)
最佳答案
@ben-bolker 是对的。说您的“对 b 的估计准确无误”并不完全正确。在您的示例中最小化 SSE 的值 27.84
与 OLS 估计值 27.83626
之间的差异结果显着影响截距估计值。
data(longley)
# ranges of a and be where we think their true value lies:
possible.a.vals <- seq(-1431,-1430, by = 0.005)
possible.b.vals <- seq(27.5,28, by = 0.00001)
# all possible combinations of a and b:
possible.ab.SSE <- expand.grid(possible.a.vals = possible.a.vals,
possible.b.vals = possible.b.vals)
possible.ab.SSE <- as.matrix(possible.ab.SSE)
out <- tcrossprod(cbind(1, longley$Employed), possible.ab.SSE)
possible.ab.SSE <- as.data.frame(possible.ab.SSE)
possible.ab.SSE$SSE <- colSums((out - longley$GNP)^2)
possible.ab.SSE[order(possible.ab.SSE$SSE), ][1, ]
# possible.a.vals possible.b.vals SSE
# 6758127 -1430.48 27.83622 4834.891
coef(lm(GNP ~ Employed, data = longley))
# (Intercept) Employed
# -1430.48231 27.83626
关于r - R 中最小二乘法的自制实现显示意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50508425/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
当我尝试在 db2 中创建表时,它抛出以下错误 $ db2 CREATE TABLE employee(emp_id INT NOT NULL, emp_name VARCHAR(100)) sh:
我有: while (i < l) { if (one === two) { continue; } i++; } 但是 JSLint 说: Problem at line 1 chara
所以我有这个代码: char inputs[10] = ""; int numInputs = 0; while (numInputs < 10){ char c; printf("E
var ninja = { name: 'Ninja', say: function () { return 'I am a ' + this.name; }
我收到一个我不明白的错误,请注意,我是编码新手,所以这可能是一个简单的错误。 #include using namespace std; int main() { //Initialise Fahr
我正在使用 javascript 和 react,由于某种原因,我收到了一个奇怪的 token 错误。 这是发生错误的代码: renderNavBar() { if (!this.us
Closed. This question is off-topic。它当前不接受答案。
由于某种我无法解释的原因,编译器正在输出一个错误,指出它发现了一个意外的#else 标记。 这发生在文件的开头: #if defined( _USING_MFC ) #include "stda
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
这个问题在这里已经有了答案: Difference between sh and Bash (11 个答案) 关闭 2 年前。 我正在编写一个简单的 bash 脚本,我在 XX `(' unexpe
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 此问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-topic
我在 Windows 7 上编写了一个脚本,它不断给我一个错误“(此时出乎意料。”对于以下代码 if %vardns%=="NODNS" ( netsh interface ipv4 set ad
我正在尝试使用xmlstarlet(使用xpath)解析XML文件,但是出现语法错误,并且我不知道如何更正我的代码。 这是我的脚本: #!/bin/bash if [ $1=="author" ];
以下脚本旨在在目录中的所有文件上运行程序“senna”,并将每个文件的输出(保留输入文件名)写入另一个目录 for file in ./Data/in/*; do ./senna -iobta
我从 challengers.coffee 运行此代码,并收到错误 ActionView::Template::Error (SyntaxError: [stdin]:3:31:unexpected
我在 config.db.database; 行中有语法错误(意外的标记“.”)。这是我在文件中的代码 const config = require('../config/config') const
这一定很明显,但是我无法使它正常工作。我正在尝试传输应该用于构建$ classKey的对象,这反过来又导致删除所需的软件(amd64或i386)。好吧,这里的代码: $name = @("softwa
我正在使用 1.3.7 版学习 Grails,但我一直无缘无故地遇到以下语法错误: unexpected token: mapping @ line x, column y. 有一次,我通过运行“gr
我正在尝试找出这段Pascal代码的问题 function Factorial(n: integer): integer; begin if n = 0 then Result := 1
我是一名优秀的程序员,十分优秀!