今天和大家分享一下用R语言做相关分析。

首先我们需要知道做线性回归的前提:1,数据样本存在正态分布,2,因变量和自变量存在线性关系;

如果两个不满足之一,做出来的模型效果就会大打折扣。

一元线性回归分析

举个简单的例子:

采用鸢尾花案例进行分析,求变量之间的相关系数。

注意⚠️:相关系数是否显著,不能只根据系数值的大小判断是否需要进行假设检验。

R语言案例如下:

> iris
    Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
1            5.1         3.5          1.4         0.2     setosa
2            4.9         3.0          1.4         0.2     setosa
3            4.7         3.2          1.3         0.2     setosa
4            4.6         3.1          1.5         0.2     setosa
5            5.0         3.6          1.4         0.2     setosa
6            5.4         3.9          1.7         0.4     setosa
7            4.6         3.4          1.4         0.3     setosa
8            5.0         3.4          1.5         0.2     setosa
9            4.4         2.9          1.4         0.2     setosa
10           4.9         3.1          1.5         0.1     setosa
11           5.4         3.7          1.5         0.2     setosa
12           4.8         3.4          1.6         0.2     setosa
13           4.8         3.0          1.4         0.1     setosa
14           4.3         3.0          1.1         0.1     setosa
15           5.8         4.0          1.2         0.2     setosa
16           5.7         4.4          1.5         0.4     setosa
17           5.4         3.9          1.3         0.4     setosa
18           5.1         3.5          1.4         0.3     setosa
19           5.7         3.8          1.7         0.3     setosa
20           5.1         3.8          1.5         0.3     setosa
21           5.4         3.4          1.7         0.2     setosa
22           5.1         3.7          1.5         0.4     setosa
23           4.6         3.6          1.0         0.2     setosa
24           5.1         3.3          1.7         0.5     setosa
25           4.8         3.4          1.9         0.2     setosa
26           5.0         3.0          1.6         0.2     setosa
27           5.0         3.4          1.6         0.4     setosa
28           5.2         3.5          1.5         0.2     setosa
29           5.2         3.4          1.4         0.2     setosa
30           4.7         3.2          1.6         0.2     setosa
31           4.8         3.1          1.6         0.2     setosa
32           5.4         3.4          1.5         0.4     setosa
33           5.2         4.1          1.5         0.1     setosa
34           5.5         4.2          1.4         0.2     setosa
35           4.9         3.1          1.5         0.2     setosa
36           5.0         3.2          1.2         0.2     setosa
37           5.5         3.5          1.3         0.2     setosa
38           4.9         3.6          1.4         0.1     setosa
39           4.4         3.0          1.3         0.2     setosa
40           5.1         3.4          1.5         0.2     setosa
41           5.0         3.5          1.3         0.3     setosa
42           4.5         2.3          1.3         0.3     setosa
43           4.4         3.2          1.3         0.2     setosa
44           5.0         3.5          1.6         0.6     setosa
45           5.1         3.8          1.9         0.4     setosa
46           4.8         3.0          1.4         0.3     setosa
47           5.1         3.8          1.6         0.2     setosa
48           4.6         3.2          1.4         0.2     setosa
49           5.3         3.7          1.5         0.2     setosa
50           5.0         3.3          1.4         0.2     setosa
51           7.0         3.2          4.7         1.4 versicolor
52           6.4         3.2          4.5         1.5 versicolor
53           6.9         3.1          4.9         1.5 versicolor
54           5.5         2.3          4.0         1.3 versicolor
55           6.5         2.8          4.6         1.5 versicolor
56           5.7         2.8          4.5         1.3 versicolor
57           6.3         3.3          4.7         1.6 versicolor
58           4.9         2.4          3.3         1.0 versicolor
59           6.6         2.9          4.6         1.3 versicolor
60           5.2         2.7          3.9         1.4 versicolor
61           5.0         2.0          3.5         1.0 versicolor
62           5.9         3.0          4.2         1.5 versicolor
63           6.0         2.2          4.0         1.0 versicolor
64           6.1         2.9          4.7         1.4 versicolor
65           5.6         2.9          3.6         1.3 versicolor
66           6.7         3.1          4.4         1.4 versicolor
67           5.6         3.0          4.5         1.5 versicolor
68           5.8         2.7          4.1         1.0 versicolor
69           6.2         2.2          4.5         1.5 versicolor
70           5.6         2.5          3.9         1.1 versicolor
71           5.9         3.2          4.8         1.8 versicolor
72           6.1         2.8          4.0         1.3 versicolor
73           6.3         2.5          4.9         1.5 versicolor
74           6.1         2.8          4.7         1.2 versicolor
75           6.4         2.9          4.3         1.3 versicolor
76           6.6         3.0          4.4         1.4 versicolor
77           6.8         2.8          4.8         1.4 versicolor
78           6.7         3.0          5.0         1.7 versicolor
79           6.0         2.9          4.5         1.5 versicolor
80           5.7         2.6          3.5         1.0 versicolor
81           5.5         2.4          3.8         1.1 versicolor
82           5.5         2.4          3.7         1.0 versicolor
83           5.8         2.7          3.9         1.2 versicolor
84           6.0         2.7          5.1         1.6 versicolor
85           5.4         3.0          4.5         1.5 versicolor
86           6.0         3.4          4.5         1.6 versicolor
87           6.7         3.1          4.7         1.5 versicolor
88           6.3         2.3          4.4         1.3 versicolor
89           5.6         3.0          4.1         1.3 versicolor
90           5.5         2.5          4.0         1.3 versicolor
91           5.5         2.6          4.4         1.2 versicolor
92           6.1         3.0          4.6         1.4 versicolor
93           5.8         2.6          4.0         1.2 versicolor
94           5.0         2.3          3.3         1.0 versicolor
95           5.6         2.7          4.2         1.3 versicolor
96           5.7         3.0          4.2         1.2 versicolor
97           5.7         2.9          4.2         1.3 versicolor
98           6.2         2.9          4.3         1.3 versicolor
99           5.1         2.5          3.0         1.1 versicolor
100          5.7         2.8          4.1         1.3 versicolor
101          6.3         3.3          6.0         2.5  virginica
102          5.8         2.7          5.1         1.9  virginica
103          7.1         3.0          5.9         2.1  virginica
104          6.3         2.9          5.6         1.8  virginica
105          6.5         3.0          5.8         2.2  virginica
106          7.6         3.0          6.6         2.1  virginica
107          4.9         2.5          4.5         1.7  virginica
108          7.3         2.9          6.3         1.8  virginica
109          6.7         2.5          5.8         1.8  virginica
110          7.2         3.6          6.1         2.5  virginica
111          6.5         3.2          5.1         2.0  virginica
112          6.4         2.7          5.3         1.9  virginica
113          6.8         3.0          5.5         2.1  virginica
114          5.7         2.5          5.0         2.0  virginica
115          5.8         2.8          5.1         2.4  virginica
116          6.4         3.2          5.3         2.3  virginica
117          6.5         3.0          5.5         1.8  virginica
118          7.7         3.8          6.7         2.2  virginica
119          7.7         2.6          6.9         2.3  virginica
120          6.0         2.2          5.0         1.5  virginica
121          6.9         3.2          5.7         2.3  virginica
122          5.6         2.8          4.9         2.0  virginica
123          7.7         2.8          6.7         2.0  virginica
124          6.3         2.7          4.9         1.8  virginica
125          6.7         3.3          5.7         2.1  virginica
126          7.2         3.2          6.0         1.8  virginica
127          6.2         2.8          4.8         1.8  virginica
128          6.1         3.0          4.9         1.8  virginica
129          6.4         2.8          5.6         2.1  virginica
130          7.2         3.0          5.8         1.6  virginica
131          7.4         2.8          6.1         1.9  virginica
132          7.9         3.8          6.4         2.0  virginica
133          6.4         2.8          5.6         2.2  virginica
134          6.3         2.8          5.1         1.5  virginica
135          6.1         2.6          5.6         1.4  virginica
136          7.7         3.0          6.1         2.3  virginica
137          6.3         3.4          5.6         2.4  virginica
138          6.4         3.1          5.5         1.8  virginica
139          6.0         3.0          4.8         1.8  virginica
140          6.9         3.1          5.4         2.1  virginica
141          6.7         3.1          5.6         2.4  virginica
142          6.9         3.1          5.1         2.3  virginica
143          5.8         2.7          5.1         1.9  virginica
144          6.8         3.2          5.9         2.3  virginica
145          6.7         3.3          5.7         2.5  virginica
146          6.7         3.0          5.2         2.3  virginica
147          6.3         2.5          5.0         1.9  virginica
148          6.5         3.0          5.2         2.0  virginica
149          6.2         3.4          5.4         2.3  virginica
150          5.9         3.0          5.1         1.8  virginica
> cor(iris[1],iris[4])
             Petal.Width
Sepal.Length   0.8179411
> cor(iris[1],iris[3])
             Petal.Length
Sepal.Length    0.8717538
> cor(iris[1],iris[2])              
Sepal.Width Sepal.Length  -0.1175698

> cor(iris[2],iris[3])             
Petal.Length Sepal.Width   -0.4284401

> cor(iris[2],iris[4])             
Petal.Width Sepal.Width  -0.3661259

> cor(iris[3],iris[4])              
Petal.Width Petal.Length   0.9628654

为什么要做显著性检验

我们在计算过程中并不一定要知道X和Y之间是存在线性相关关系,但如果不存在这种关系,那么求的回归方程毫无意义,因此,需要对回归方程进行检验。检验通常采用三种方法:t检验,f检验法,相关系数检验法。其对应的值为T值,F值,R方。具体公式看图:

相关系数显著性的假设检验,假设r0为总体相关系数,建设假设H0:r0=0,H1:r0=!0(alpha=0.05)

计算相关系数r的t值和P值。

>  cor.test(iris$Sepal.Length,iris$Petal.Length)

        Pearson's product-moment correlation

data:  iris$Sepal.Length and iris$Petal.Length
t = 21.646, df = 148, p-value < 2.2e-16
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
 0.8270363 0.9055080
sample estimates:
      cor 
0.8717538 

举个列子,身高数据和体重数据中找出线性关系。如下图所示:

> h=c(172,176,190,189,145,156,180)
> w=c(57,78,90,80,67,45,80)
> plot(w~h+1) #构建一元线性公式

 很明显这样的图看不出来数据之间的线性关系,下面我们构建一个直线。

第一种R实现方法:

> lxy<-function(x,y){n=length(x);sum(x*y)-sum(x)*sum(y)/n}
> b=lxy(h,w)/lxy(h,h)
> a=mean(w)-b*mean(h)
> a
[1] -44.23887
> b
[1] 0.6677749
> lines(h,a+b*h)

很明显,这种方式太过繁琐。 

第二种R实现方法:

回归系数的假设检验,建立线性模型。

假设w和h存在线性相关,计算出来的截距和斜率。此种方法适合我们对数据有一个基础的认识。

<lines(h,a+b*h)


> a=lm(w~1+h)
> a

Call:
lm(formula = w ~ 1 + h)

Coefficients:
(Intercept)            h  
   -44.2389       0.6678  

​​
> summary(a)

Call:
lm(formula = w ~ 1 + h)

Residuals:
      1       2       3       4       5       6       7 
-13.618   4.710   7.362  -1.971  14.412 -14.934   4.039 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept) -44.2389    50.5352  -0.875   0.4214  
h             0.6678     0.2917   2.290   0.0707 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11.94 on 5 degrees of freedom
Multiple R-squared:  0.5118,    Adjusted R-squared:  0.4142 
F-statistic: 5.242 on 1 and 5 DF,  p-value: 0.07069

lm()线性模型函数

适应于多元线性模型的基本函数是lm(),其调用形式是fitted.model<-lm(formula,data=data.frame)

其中formula为模型公式,data.frame为数据框,返回值为线性模型结果的对象存放在fitted.model中。例如:

 fm2 <-lm(y~x1+x2,data=production) 适应与Y关于x1和x2的多元回归模型(隐含着截距项)。

y~1+x或y~x均表示y=a+bx有截距形式的线性模型。

通过原点的线性模型可以表达为:y~x-1或y~x+0或y~0+x 参见help(formula) 

采用summary()进行T检验和显著性分析。

解析上述数据,p显著性越接近0则表示效果越好;***表示模型建立的很好。

用Multiple R-squared(相关系数平方)来检验模型构建是否良好,越接近1表示建模效果越好。

注,本次数据因为是自己随意编写的,所以模型不是理想的状态。仅供大家参考具体分析方法。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐