R语言使用 LOWESS技术图分析逻辑回归中的函数形式

简介: R语言使用 LOWESS技术图分析逻辑回归中的函数形式

当我们在回归模型中包含连续变量作为协变量时,重要的是我们使用正确的(或近似正确的)函数形式。例如,对于连续结果Y和连续协变量X,可能是Y的期望值是X和X ^ 2的线性函数,而不是X的线性函数。一种简单但通常有效的方法是简单地查看Y对X的散点图,以直观地评估。


对于我们通常使用逻辑回归建模的二元结果,事情并不那么容易(至少在尝试使用图形方法时)。首先,Y对X的散点图现在完全没有关于Y和X之间关联的形状的信息,因此在逻辑回归模型中应该如何包含X. 为了说明,使用R let模拟一些(X,Y)数据,其中Y遵循逻辑回归,其中X在模型中线性进入:

set.seed(1234)
n < -  1000
x < -  rnorm(n)
xb < -  -2 + x
pr < -  exp(xb)/(1 + exp(xb))
y < -  1 *(runif(n)<pr)

现在,如果我们将Y映射到X,我们得到以下结果

由于Y的二元性质,这完全没有关于Y如何依赖X的信息。


LOWESS技术图

解决这个问题的一种方法是绘制单个(Y,X)值,而不是绘制Y的平均值随X变化的平滑线。最简单的平滑类型是运行平均值,其中在给定值X = x的情况下,该线等于Y值的平均值(可能以某种方式加权)。然后将每个X值的平均值连接起来以得到平滑的线。

所述LOWESS技术是稍微更复杂的版本,其中,代替在X = x的邻域计算Y值的一个(可能加权的)平均值,我们拟合回归线(例如,线性)到数据围绕X = X 。通过这样做,我们假设局部YX关联是线性的,但不假设它是全局线性的。这个优于简单均值的一个优点是我们需要更少的数据来获得Y依赖于X的良好估计。


检查逻辑回归的函数形式

这给出了 该图表明Y的平均值在X中不是线性的,但可能是二次的。我们如何将这与我们从X线性进入的模型生成数据的事实相协调?解释是在逻辑回归中,我们将Y = 1的概率的logit建模为预测变量的函数,而不是概率本身。对于不接近零或一的概率,logit函数实际上非常接近线性,而在概率不接近零或一的数据集中,这不是问题。


我们可以通过绘制为我们计算的估计概率(Y的平均值)的logit来克服这个问题。在Stata中,lowess命令有一个logit选项,它给出了一个平滑的logit对X的图。在R中我们可以写一个简短的函数来做同样的事情:

logitloess < -  function(x,y,s){

logit < -  function(pr){
 }

if(missing(s)){
  locspan < -  0.7
} else {
  locspan < -  s
}

 pi < -  pmax(pmin(loessfit,0.9999),0.0001)
logitfitted < -  logit(pi)

plot(x,logitfitted,ylab =“logit”)

}

为了生成平滑的logit图,我们现在只需用X和Y调用我们的函数:


logitloess(X,Y)

还需要注意的是,在X值很少的区域,估计的logit会更加不精确。这里我们从正态分布生成X,我们可以从图中看到只有少数X值小于-2或大于+2(正如我们所期望的那样!)。因此,我们不应过分关注X空间的这些区域中的估计logit值。


测试具有二次X效应的情况

作为另一个例子,我们现在重新模拟我们的数据,但是这次指定Y = 1的概率的logit是协变量X的二次函数,而不是线性的:

set.seed(12345)
n < -  1000
x < -  rnorm(n)
xb < -  -2 + x ^ 2
pr < -  exp(xb)/(1 + exp(xb))
y < -  1 *(runif(n)<pr)
logitloess(X,Y)


注意事项

我们在这里看到的方法显然并不完美,在不同情况下或多或少会有用。对于小数据集(例如n = 50),实际上没有足够的数据来非参数地估计Y的平均值如何依赖于X,因此并不是真正有用。即使有大型数据集,黄土图中建议的功能形式也可能看起来很奇怪,纯粹是因为不精确,因为X空间/分布的某些部分没有太多数据。

相关文章
|
4月前
|
存储 数据挖掘 数据处理
R语言中的数据类型转换:解决常见问题的技术指南
【8月更文挑战第28天】数据类型转换是R语言编程中的一项基本技能,对于确保数据处理的准确性和效率至关重要。本文介绍了R中的基本数据类型及其转换方法,并探讨了解决常见问题的一些技巧。掌握这些知识和技巧,将有助于你更加高效地利用R语言进行数据分析和统计建模。
|
4月前
|
数据挖掘 数据处理 数据格式
R语言中使用readr与data.table导入数据的技术探索
【8月更文挑战第29天】`readr`和`data.table`都是R语言中非常优秀的数据导入工具,它们各有优势。`readr`提供了丰富的函数来读取各种格式的数据文件,并且支持在读取时指定列名和类型,非常适合处理小型到中型的数据集。而`data.table`的`fread`函数则以其高效的数据读取能力著称,尤其适合处理大型数据集。此外,`data.table`还提供了强大的数据处理功能,能够极大地提高数据分析的效率。 在实际应用中,我们可以根据数据的规模和格式选择合适的工具来导入数据,以便更好地进行后续的数据分析和建模工作。
|
2月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
55 3
|
7月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
4月前
|
机器学习/深度学习 资源调度 算法
R语言逻辑回归与分类模型的深度探索与应用
【8月更文挑战第31天】逻辑回归作为一种经典的分类算法,在R语言中通过`glm()`函数可以轻松实现。其简单、高效且易于解释的特点,使得它在处理二分类问题时具有广泛的应用价值。然而,值得注意的是,逻辑回归在处理非线性关系或复杂交互作用时可能表现不佳,此时可能需要考虑其他更复杂的分类模型。
|
4月前
|
数据可视化 数据挖掘 数据处理
R语言函数与自定义函数:提高代码的复用性
【8月更文挑战第27天】 自定义函数是R语言编程中不可或缺的一部分,它们通过封装复杂的逻辑和提供灵活的参数化设计,极大地提高了代码的复用性和可维护性。通过掌握自定义函数的基本语法和高级技巧,我们可以编写出更加高效、可读的R语言代码,从而更好地应对复杂的数据分析和统计建模任务。
|
4月前
|
机器学习/深度学习 数据采集
R语言逻辑回归、GAM、LDA、KNN、PCA主成分分类分析预测房价及交叉验证
上述介绍仅为简要概述,每个模型在实施时都需要仔细调整与优化。为了实现高度精确的预测,模型选择与调参是至关重要的步骤,并且交叉验证是提升模型稳健性的有效途径。在真实世界的房价预测问题中,可能还需要结合地域经济、市场趋势等宏观因素进行综合分析。
89 3
|
7月前
|
机器学习/深度学习 数据可视化 算法
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为1
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
7月前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
R语言逻辑回归logistic对ST股票风险建模分类分析混淆矩阵、ROC曲线可视化
|
7月前
|
图形学
R语言其他相关函数(各函数解析含实例,可供查询)
R语言其他相关函数(各函数解析含实例,可供查询)
218 0
下一篇
DataWorks