如何在 R 中创建线性和逻辑回归模型?

Posted

技术标签:

【中文标题】如何在 R 中创建线性和逻辑回归模型?【英文标题】:How to create a Linear and Logistic Regression Model in R? 【发布时间】:2022-01-12 14:58:16 【问题描述】:

我有以下数据集

data <- data.frame(height=c(184,163,170,161,162,167,180,175,182,176,180,164,178,155,187,176,176,152,160,190),
                   weight=c(83,51,80,53,64,70,75,74,86,78,90,66,60,44,81,75,68,63,51,88),
                   shoe_size=c(44,37,42,35,38,40,43,42,44,43,45,40,40,35,44,40,42,39,36,45),
                   age=c(26,24,26,26,25,28,28,24,31,25,29,24,38,27,28,32,26,33,26,26))

hoodie = with(data, 
              ifelse(weight<=45, "XXS",
               ifelse(weight>45 & weight<=52, "XS",
                ifelse(weight>52 & weight<=57, "S",
                 ifelse(weight>57 & weight<=64, "M",
                  ifelse(weight>64 & weight<=75, "L", "XL"))))))

hoodie_data = cbind(hoodie, data)

我必须根据我的鞋子尺码和重量来预测连帽衫尺码,即 S、M、L 等 我尝试这样做

linear_model <- lm(hoodie ~ weight + shoe_size,data = hoodie_data)

它给出了错误:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  NA/NaN/Inf in 'y'
In addition: Warning message:
In storage.mode(v) <- "double" : NAs introduced by coercion

在连帽衫上使用as.factor()as.numeric() 时,返回NA

如何进行?

【问题讨论】:

问题是您的连帽衫栏完全可以从重量栏预测。将两者都添加到您的节点会导致奇点。决定两者之一并将另一个从模型中删除应该可以解决问题。 您正在寻找分类模型 - 尝试多项逻辑回归(而不是线性回归;其中响应是数字)。即multinom 形式nnet 【参考方案1】:

有两个问题。一个是deschen提到的奇点。即data中的变量之间存在完美的线性关系。请参阅下面的cor()。另一个问题是您不能直接使用分类变量(例如,“S”、“M”、“L”)作为因变量。在这种情况下,您可以使用虚拟编码或使用数字(例如,0 ~ 5)来表示帽衫尺寸。

data <- data.frame(height=c(184,163,170,161,162,167,180,175,182,176,180,164,178,155,187,176,176,152,160,190),
                   weight=c(83,51,80,53,64,70,75,74,86,78,90,66,60,44,81,75,68,63,51,88),
                   shoe_size=c(44,37,42,35,38,40,43,42,44,43,45,40,40,35,44,40,42,39,36,45),
                   age=c(26,24,26,26,25,28,28,24,31,25,29,24,38,27,28,32,26,33,26,26))

hoodie = with(data, 
              ifelse(weight<=45, 0,
                     ifelse(weight>45 & weight<=52, 1,
                            ifelse(weight>52 & weight<=57, 2,
                                   ifelse(weight>57 & weight<=64, 3,
                                          ifelse(weight>64 & weight<=75, 4, 5))))))

hoodie_data = cbind(hoodie, data)

cor(hoodie_data[, c(2:4)])
#              height    weight shoe_size
# height    1.0000000 0.8126724 0.8707172
# weight    0.8126724 1.0000000 0.9512942
# shoe_size 0.8707172 0.9512942 1.0000000

# use one of the independent variables
linear_model <- lm(hoodie ~ weight,data = hoodie_data)

summary(linear_model)
# ...
# Coefficients:
#              Estimate Std. Error t value Pr(>|t|)    
# (Intercept) -4.056250   0.592073  -6.851 2.07e-06 ***
# weight       0.109375   0.008316  13.153 1.14e-10 ***
# ...

【讨论】:

以上是关于如何在 R 中创建线性和逻辑回归模型?的主要内容,如果未能解决你的问题,请参考以下文章

在 pymc3 中创建三级逻辑回归模型

R语言广义线性模型函数GLMglm函数构建逻辑回归模型(Logistic regression)使用卡方检验验证两个逻辑回归模型是否具有显著性(即删除无用特征后的模型和原始模型是否具有明显差异)

R语言广义线性模型函数GLM广义线性模型(Generalized linear models)glm函数构建逻辑回归模型(Logistic regression)

R语言广义线性模型函数GLMglm函数构建逻辑回归模型(Logistic regression)去除初步验证不具有显著性的特征再次构建逻辑回归模型简化模型(reduced model)

R语言使用broom包将回归模型(线性回归逻辑回归比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集

R语言广义线性模型函数GLMR中有几种logistic回归扩展和变异robust包中的glmRob函数鲁棒logistic回归ms包中的lrm函数拟合序数逻辑回归