lm 中的均值居中协变量和显示实际平均值的摘要打印
Mean centered covariate in lm and summary printing showing actual mean value
我正在使用 r-exams 编写一些练习,然后我开始解决这个问题:我正在使用均值中心协变量进行一些简单的线性模型拟合,代码如下:
## DATA GENERATION
set.seed(123)
n<-rpois(1,120)
age<-runif(n,0,25)
m_age<-round(mean(age),4)
wght<-100+.8*age+rnorm(n,0,4)
z0_aw<-data.frame(age,weight=wght)
m0<-lm(weight~I(age-m_age),data=z0_aw)
summary(m0)
#>
#> Call:
#> lm(formula = weight ~ I(age - m_age), data = z0_aw)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -9.2226 -2.4603 -0.2445 2.3565 13.0428
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
#> I(age - m_age) 0.78432 0.05069 15.47 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.888 on 111 degrees of freedom
#> Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
#> F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16
m1<-lm(weight~I(age-12.679),data=z0_aw)
summary(m1)
#>
#> Call:
#> lm(formula = weight ~ I(age - 12.679), data = z0_aw)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -9.2226 -2.4603 -0.2445 2.3565 13.0428
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
#> I(age - 12.679) 0.78432 0.05069 15.47 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.888 on 111 degrees of freedom
#> Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
#> F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16
由 reprex package (v0.3.0)
于 2021 年 2 月 14 日创建
如您所见,模型 m0
摘要中调用的输出是
lm(formula = weight ~ I(age - m_age), data = z0_aw)
我想获得与模型 m1
相同的输出,即
lm(formula = weight ~ I(age - 12.679), data = z0_aw)
但是,绝对需要使用对象 m_age,因为练习是随机生成的,以避免考试作弊。我只是尝试了 lm(weight~I(age-eval(m_age)),data=z0_aw)
之类的东西,但是摘要调用的输出是 lm(formula = weight ~ I(age - eval(m_age)), data = z0_aw)
对我来说实现输出lm(formula = weight ~ I(age - 12.679), data = z0_aw)
非常重要,因为它会在一些问题中使用。
而不是 eval(m_age)
我会建立整个 lm()
的调用,然后只用它的值替换 m_age
。您可以通过以下方式进行:
cl <- call("lm", formula = weight ~ I(age - m_age), data = as.name("z0_aw"))
cl$formula[[3]][[2]][[3]] <- m_age
cl
## lm(formula = weight ~ I(age - 12.679), data = z0_aw)
作为简要说明:
- 名为
"lm"
的函数的 call()
是用两个参数 formula =
和 data =
构造的。该公式无论如何都是符号的,因此可以被评估,数据名称 "z0_aw"
被强制转换为“符号”或“名称”,而不是被评估为 data.frame
.
- 在
cl$formula
中,我们将 symbol/name m_age
替换为数值 12.679
。这是在公式的右侧(第 3 个元素),在 I()
的参数中(第 2 个元素),在差值的右侧(第 3 个元素)。
最后,评估该调用会产生所需的 lm
对象:
m <- eval(cl)
summary(m)
## Call:
## lm(formula = weight ~ I(age - 12.679), data = z0_aw)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.2226 -2.4603 -0.2445 2.3565 13.0428
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
## I(age - 12.679) 0.78432 0.05069 15.47 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.888 on 111 degrees of freedom
## Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
## F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16
我正在使用 r-exams 编写一些练习,然后我开始解决这个问题:我正在使用均值中心协变量进行一些简单的线性模型拟合,代码如下:
## DATA GENERATION
set.seed(123)
n<-rpois(1,120)
age<-runif(n,0,25)
m_age<-round(mean(age),4)
wght<-100+.8*age+rnorm(n,0,4)
z0_aw<-data.frame(age,weight=wght)
m0<-lm(weight~I(age-m_age),data=z0_aw)
summary(m0)
#>
#> Call:
#> lm(formula = weight ~ I(age - m_age), data = z0_aw)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -9.2226 -2.4603 -0.2445 2.3565 13.0428
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
#> I(age - m_age) 0.78432 0.05069 15.47 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.888 on 111 degrees of freedom
#> Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
#> F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16
m1<-lm(weight~I(age-12.679),data=z0_aw)
summary(m1)
#>
#> Call:
#> lm(formula = weight ~ I(age - 12.679), data = z0_aw)
#>
#> Residuals:
#> Min 1Q Median 3Q Max
#> -9.2226 -2.4603 -0.2445 2.3565 13.0428
#>
#> Coefficients:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
#> I(age - 12.679) 0.78432 0.05069 15.47 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> Residual standard error: 3.888 on 111 degrees of freedom
#> Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
#> F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16
由 reprex package (v0.3.0)
于 2021 年 2 月 14 日创建如您所见,模型 m0
摘要中调用的输出是
lm(formula = weight ~ I(age - m_age), data = z0_aw)
我想获得与模型 m1
相同的输出,即
lm(formula = weight ~ I(age - 12.679), data = z0_aw)
但是,绝对需要使用对象 m_age,因为练习是随机生成的,以避免考试作弊。我只是尝试了 lm(weight~I(age-eval(m_age)),data=z0_aw)
之类的东西,但是摘要调用的输出是 lm(formula = weight ~ I(age - eval(m_age)), data = z0_aw)
对我来说实现输出lm(formula = weight ~ I(age - 12.679), data = z0_aw)
非常重要,因为它会在一些问题中使用。
而不是 eval(m_age)
我会建立整个 lm()
的调用,然后只用它的值替换 m_age
。您可以通过以下方式进行:
cl <- call("lm", formula = weight ~ I(age - m_age), data = as.name("z0_aw"))
cl$formula[[3]][[2]][[3]] <- m_age
cl
## lm(formula = weight ~ I(age - 12.679), data = z0_aw)
作为简要说明:
- 名为
"lm"
的函数的call()
是用两个参数formula =
和data =
构造的。该公式无论如何都是符号的,因此可以被评估,数据名称"z0_aw"
被强制转换为“符号”或“名称”,而不是被评估为data.frame
. - 在
cl$formula
中,我们将 symbol/namem_age
替换为数值12.679
。这是在公式的右侧(第 3 个元素),在I()
的参数中(第 2 个元素),在差值的右侧(第 3 个元素)。
最后,评估该调用会产生所需的 lm
对象:
m <- eval(cl)
summary(m)
## Call:
## lm(formula = weight ~ I(age - 12.679), data = z0_aw)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.2226 -2.4603 -0.2445 2.3565 13.0428
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 110.02678 0.36571 300.86 <2e-16 ***
## I(age - 12.679) 0.78432 0.05069 15.47 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.888 on 111 degrees of freedom
## Multiple R-squared: 0.6832, Adjusted R-squared: 0.6804
## F-statistic: 239.4 on 1 and 111 DF, p-value: < 2.2e-16