0

我的数据集非常大,所以我只是以 10 行数据为例(我已经在 excel 中找到了答案,但无法在 R 中复制它——因为我需要代码方面的帮助):

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

4

2 回答 2

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  
于 2014-06-04T19:20:09.547 回答
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  
于 2014-06-04T19:48:54.980 回答