我的数据集非常大,所以我只是使用10行数据作为示例(我已经在excel中找到答案,但无法在R中复制它,因为我需要代码的帮助):< / p>
constant<-c(6.10,5.12,5.04,4.97,4.89,4.89,4.87,4.87,4.88,4.99)
years.star<-c(219.87,153.69,146.19,139.35,127.27,127.27,121.91,121.91,112.28,99.98)
years.sq.star<-c(7915.41,4610.71,4239.78,3901.93,3309.27,3309.27,3047.95,3047.95,2582.58,1999.62)
ln.salary<-c(28.43,23.12,21.59,21.44,22.71,23.33,20.29,21.76,21.48,22.92)
try<-data.frame(constant,years.star,years.sq.star,ln.salary)
Ln.salary是因变量。你应该得到的答案是:
intercept- 6.474922
beta1- -0.15026
beta2- 0.002769
我的问题是在R中,如果我使用lm函数,它不知道我的拦截具有上面的值。它只使用1,1,1,1,1,1,1,1,1,1而不是6.10,5.12等
所以test<-lm(ln.salary~years.star+years.sq.star,data=try,weights=constant)
不起作用,因为它只会产生这个答案:
intercept- 207.1706
beta1- -3.13214
beta2- 0.064416
从本质上讲,我已经采集了数据并试图调整异方差性。在最后一步,我有恒星和我变换的x变量。最后一步是在常量和x变量上回归ln.salary,给出我应该得到的答案。
我可以在excel中完成,但不能在R中完成,我知道我没有得到正确的代码。我知道生成拦截(1,1,1 ...)的lm函数是问题所在。请你帮忙。
亲切的问候 d
答案 0 :(得分:1)
如果要在特定常量处“固定”截距,则应从响应中减去该常量的值,然后拟合无截距模型。例如
test <- lm( ln.salary - 6.474922 ~ years.star + years.sq.star + 0,
data=try, weights=constant)
这里我们减去截距项,然后我们将+0
添加到公式中以表示不符合截距项。有了这个模型,我得到了
Call:
lm(formula = ln.salary - 6.474922 ~ years.star + years.sq.star +
0, data = try, weights = constant)
Coefficients:
years.star years.sq.star
0.197384 -0.002842
答案 1 :(得分:0)
如果你想为每一行改变“拦截”,那么你需要使用'偏移'而不是'权重':
test<-lm(ln.salary~years.star+years.sq.star+0,data=try,offset=constant)
Call:
lm(formula = ln.salary ~ years.star + years.sq.star + 0, data = try,
offset = constant)
Coefficients:
years.star years.sq.star
0.236355 -0.003881
我对这与Excel不一致的事实印象不深。众所周知,该程序的线性回归程序相当复杂。另一方面,如果您确定需要使用权重,那么您应该澄清使用该术语的三种不同可能解释中的哪一种。 (选择:复制,采样,逆方差)。 “权重”的lm
解释是逆方差版本。 (它在帮助页面中描述为“与方差成反比”,所以如果那些“常数” - 项是方差,那么也许你想要:
> (test<-lm(ln.salary~years.star+years.sq.star+0, data=try, weights=1/constant) )
Call:
lm(formula = ln.salary ~ years.star + years.sq.star + 0, data = try,
weights = 1/constant)
Coefficients:
years.star years.sq.star
0.309391 -0.005189