【问题标题】:Regression in R with categorical variablesR中的回归与分类变量
【发布时间】:2017-03-31 02:36:36
【问题描述】:

我正在尝试理解 R 中的回归。我正在尝试解决一个包含 100 个随机男女数据集的练习,如下所示:

sex     sbp      bmi
male     130     40.0
female   126     29.0
female   115     25.0
male     120     33.0
female   128     34.0
...

我想得到一个数值摘要 (0) 绘制 sbp 和 bmi (1) 之间的关系,并用 R^2 (2) 估计 beta1、beta2 和 sigma 参数。然后,检查模型的优度(3)并得到置信区间(4)..

我认为性别是一个分类变量,所以这是我的代码:

as.numeric(framingham$sex) - 1
apply(framingham, 2, class)

#0
framingham$sex <- factor (framingham$sex)
levels (framingham$sex) <- c("female", "male")
resultadoNumerico <- compareGroups(~., data = framingham)
resumenNumerico <- createTable(resultadoNumerico)
resumenNumerico

# 1
framinghamMatrix <- data.matrix(framingham)
pairs(framinghamMatrix)
cor(framinghamMatrix)

#2
regre <- lm(sbp ~ bmi+sex, data = framingham)
regreSum <- summary(regre)
regreSum
# Sigma
regreSum$sigma
# Betas
regreSum$coefficients

#3
plot(framingham$bmi, framingham$sbp, xlab = "SBP", ylab = "BMI")
abline (regre)

但我认为我做事不对...你能帮帮我吗?提前谢谢...

【问题讨论】:

  • 我还没有运行代码,但你能说说为什么你认为你做错了吗?
  • 因为我需要比较男性和女性回归直线,模型的总结只给出一个:系数:估计标准。误差 t 值 Pr(>|t|)(截距)79.0624 11.0716 7.141 1.71e-10 *** bmi 1.9338 0.3965 4.877 4.21e-06 *** sexfemale 3.0395 3.7731 0.806 0.422
  • 您只能得到 2 水平因子的一个水平的估计值,因为另一个水平是参考水平。如果两者兼而有之,您将陷入“虚拟变量陷阱”,结果将毫无意义。 algosome.com/articles/dummy-variable-trap-regression.html
  • 嗯嗯,我想我不明白......正如我所说,这是我第一次看到这个......:/
  • 这确实是一个关于统计建模的问题。如果您不了解回归如何处理分类变量,最好在Cross Validated 提问。这不是一个编程问题,当然也不是 R 独有的。

标签: r regression categorical-data


【解决方案1】:

要检查变量之间的关系,请尝试使用心理库中名为 pairs.panels 的图。它给出了分布、散点图和相关系数。

library(psych)
pairs.panels(framingham)

这里的性别变量是分类变量,因此将其转换为因子,然后作为输入提供给您的线性回归模型。按字母顺序,因子中的第一级成为您的参考水平,因此在模型摘要中您只能看到参考水平以外的水平(在这种情况下,女性是基本参考水平)

framingham$sex<-as.factor(framingham$sex)

现在创建您的线性模型。

model <- lm(sbp ~ bmi+sex, data = framingham)
model
summary(model)

总结给出了系数、截距、标准误差(95% 置信度)、t 值和 p 值(表示变量的显着性)、Multiple R-squared(拟合优度)、Adjusted R-squared (根据模型复杂性调整的拟合优度)等。

【讨论】:

  • 是的,但是...我如何比较男性和女性之间的直线?和预测?和 beta1=1.75 的对比假设?我一团糟:(
【解决方案2】:

我已经为分类变量设置了 sex-1:

regre <- lm(sbp ~ bmi+sex***-1***, data = framingham)
regreSum <- summary(regre)
regreSum

现在我得到了

Call:
lm(formula = sbp ~ bmi + sex - 1, data = framingham)

Residuals:
    Min      1Q  Median      3Q     Max 
-28.684 -13.025  -1.314   8.711  73.476 

Coefficients:
          Estimate Std. Error t value Pr(>|t|)    
bmi         1.9338     0.3965   4.877 4.21e-06 ***
sexhombre  79.0624    11.0716   7.141 1.71e-10 ***
sexmujer   82.1020    10.5184   7.806 6.93e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 18.48 on 97 degrees of freedom
Multiple R-squared:  0.9813,    Adjusted R-squared:  0.9808 
F-statistic:  1700 on 3 and 97 DF,  p-value: < 2.2e-16

也许我走对了?

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2013-02-21
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2014-03-28
    相关资源
    最近更新 更多