首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >lm.beta用自己计算的标准化系数得出不同的结果

lm.beta用自己计算的标准化系数得出不同的结果
EN

Stack Overflow用户
提问于 2017-11-05 16:24:50
回答 1查看 2.4K关注 0票数 1

我试图使用以下代码来计算标准化系数:

代码语言:javascript
运行
复制
rm(list=ls())
#install.packages("AER")
library(AER)
data("CASchools",package="AER")
CASchools$score=with(CASchools,(math+read)/2)
attach(CASchools)
#regular regressopm
lm1<-lm(score~income)
#standardized regression
stdscore<-(score-mean(score)/sd(score))
stdincome<-(income-mean(income))/sd(income)
lm1e<-lm(stdscore~stdincome)

#standardized regression provided by different package
#install.packages("QuantPsyc")
library(QuantPsyc)
lm.beta(lm1)

#but lm.beta is different from the coefficients I calculated with standardized regression
lm1e$coef

但是,QuantPsyc包的输出似乎与我标准化回归者和依赖变量的结果不同。

这两项产出是:

代码语言:javascript
运行
复制
> lm.beta(lm1)
   income 
0.7124308 

> lm1e$coef
(Intercept)   stdincome 
  619.82365    13.57419 

正如你所看到的,其中一个结果是0.7124308,另一个结果是13.57419,根据我的理解,它们应该是等价的。

知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-05 17:01:01

您在缩放变量的方式上犯了错误。lm.beta将非标准化系数转换为标准化系数,因此公式不同.但是,对变量进行正确的预回归标准化会产生相同的结果。

您的错误:(score-mean(score)/sd(score))应该是(score-mean(score))/sd(score)。行动的顺序很重要!

检查一下:

代码语言:javascript
运行
复制
> (score[1]-mean(score))/sd(score)
[1] 1.923202 #Clearly standardized
> (score[1]-mean(score)/sd(score))
[1] 656.4671 #Clearly NOT standardized!

所以:

代码语言:javascript
运行
复制
stdscore<-(score-mean(score))/sd(score)
stdincome<-(income-mean(income))/sd(income)
lm1e<-lm(stdscore~stdincome)

lm.beta(lm1)
 income 
0.7124308 

lm1e$coef[2]
stdincome 
0.7124308 

round(lm.beta(lm1),5) == round(lm1e$coef[2],5)
income 
  TRUE 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47123863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档