R语言怎么做多因变量的多元线性回归

Python023

R语言怎么做多因变量的多元线性回归,第1张

举个例子:

一般人在身高相等的情况下,血压收缩压Y与体重X1和年龄X2有关,抽取13组成年人数据(如下图),构建Y与X1、X2的线性回归关系。

1.先创建一个数据框blood:

  blood<-data.frame(

     X1=c(76,91.5,85.5,82.5,79,80.5,74.5,79,85,76.5,82,95,92.5),

    X2=c(50,20,20,30,30,50,60,50,40,55,40,40,20),

     Y=c(120,141,124,126,117,125,123,125,132,123,132,155,147)

                                )

2.拟合线性回归:

  lm.sol<-lm(Y~X1+X2,data=blood)

  提取模型计算结果

  summary(lm.sol)

这里说一下含义:

1、在计算结果的第一部分(call)列出了相应的回归模型公式;

2、第二部分(Residuals)列出了残差的最小值点、1/4分位点、3/4分位点、最大值点;

3、第三方部分(Coefficients)Estimate表示回归方程参数的估计,std.Error表示回归参数的标准差,t value 为t值,Pr(>|t|)表示p值

说明一下:***表示极为显著,**表示高度显著,*表示显著,.表示不太显著,没有记号表示不显著

4、第四部分(Residual standard error)表示残差的标准差,(F-statistic)表示F的统计量

通过上面的结果可以看出回归模型:Y=2.13656X1+0.40022X2-62.96336

我们根据得出的回归模型进行预测

例如:预测体重X1=100,年龄X2=40的血压值Y

newdata<-data.frame(X1=100,X2=40)

pre<-predict(lm.sol,newdata,interval="prediction",level=0.95)

pre

从结果可以预测值Y166.7011和预测值Y的区间[157.2417,176,1605]

在日常学习或工作中经常会使用线性回归模型对某一事物进行预测,例如预测房价、身高、GDP、学生成绩等,发现这些被预测的变量都属于连续型变量。然而有些情况下,被预测变量可能是二元变量,即成功或失败、流失或不流失、涨或跌等,对于这类问题,线性回归将束手无策。这个时候就需要另一种回归方法进行预测,即Logistic回归。

在实际应用中,Logistic模型主要有三大用途:

1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素;

2)用于预测,可以预测某种情况发生的概率或可能性大小;

3)用于判别,判断某个新样本所属的类别。

Logistic模型实际上是一种回归模型,但这种模型又与普通的线性回归模型又有一定的区别:

1)Logistic回归模型的因变量为二分类变量;

2)该模型的因变量和自变量之间不存在线性关系;

3)一般线性回归模型中需要假设独立同分布、方差齐性等,而Logistic回归模型不需要;

4)Logistic回归没有关于自变量分布的假设条件,可以是连续变量、离散变量和虚拟变量;

5)由于因变量和自变量之间不存在线性关系,所以参数(偏回归系数)使用最大似然估计法计算。

logistic回归模型概述

广义线性回归是探索“响应变量的期望”与“自变量”的关系,以实现对非线性关系的某种拟合。这里面涉及到一个“连接函数”和一个“误差函数”,“响应变量的期望”经过连接函数作用后,与“自变量”存在线性关系。选取不同的“连接函数”与“误差函数”可以构造不同的广义回归模型。当误差函数取“二项分布”而连接函数取“logit函数”时,就是常见的“logistic回归模型”,在0-1响应的问题中得到了大量的应用。

Logistic回归主要通过构造一个重要的指标:发生比来判定因变量的类别。在这里我们引入概率的概念,把事件发生定义为Y=1,事件未发生定义为Y=0,那么事件发生的概率为p,事件未发生的概率为1-p,把p看成x的线性函数;

回归中,最常用的估计是最小二乘估计,因为使得p在[0,1]之间变换,最小二乘估计不太合适,有木有一种估计法能让p在趋近与0和1的时候变换缓慢一些(不敏感),这种变换是我们想要的,于是引入Logit变换,对p/(1-p)也就是发生与不发生的比值取对数,也称对数差异比。经过变换后,p对x就不是线性关系了。

用predict就能做到。

predict的用法:

predict(object, newdata, se.fit = FALSE, scale = NULL, df = Inf,

interval = c("none", "confidence", "prediction"),

level = 0.95, type = c("response", "terms"),

terms = NULL, na.action = na.pass,

pred.var = res.var/weights, weights = 1, ...)

只要注意其中的object,newdata,interval,level,type就行。

object是你的回归模型。

newdata是使用的数据。

interval选confidence或者"c"。

level是置信水平。

type在计算响应变量时使用response,对变量计算使用terms。如果是terms,需要用后面的terms参数指定变量名(character类型向量形式)。

response的话返回一个数据框,三列,分别是预测值,区间下限和上限。

terms返回一个list。