- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40293 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12799
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
$ @/ ` W9 M7 e* L8 M$ [. t2 v& @5 `7 M这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。6 j8 j- p! }* k: f) A% E6 C
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: $ S. ~) H# e9 e) I! N+ F A
行描述性统计分析,各连续型变量之间的相关关系如下:
$ ^$ ]$ E; f# C$ I( z0 E# S 1 C0 [, N2 y* F* j( g
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
9 z' U. G6 o' a% E; L. z4 p![]()
0 @, U# c7 j8 R6 z![]()
% p. @/ @5 o8 k, \7 e3 A" c |最终模型残差图:# l' B$ \# s, h* k ~9 J
![]()
- I% V. F4 G0 Y/ l, v通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
( V8 {8 Z% V& L2 g3 [属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
: L- m+ }- L. ]3 i8 B% z& Q8 \属性变量的具体影响在此处分析略去。
6 B5 [0 Q$ ?7 r! \. a: X$ h连续型变量的影响主要为:8 Y0 N2 C0 ]' U: Z
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
S0 o* O. j0 F% A 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;5 i( U+ }5 R4 M4 M
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
; F# y6 r6 _% P( Y' h7 @5 J 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
1 `, t+ u2 F; j1 y 容积率与环线之间存在着交互效应。
# @ f' w/ M* a& W& C- l; Yrm(list=ls()) #清空当前工作空间 S1 f+ C ^4 r. C' e
setwd("D:/回归分析")
C* n% @: ?: e1 o! P+ Ma=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a& R, C& y; g: }1 i. T2 ?# A
View(a)0 [" m) a9 }8 R9 _ [5 ?
attach(a)3 T3 b/ }6 P' P! P% b6 q+ D
names(a)
0 J0 a) ^4 A$ K3 `9 }; W+ d2 g. s' ]
+ m' S( g# w6 G( f2 k
, H& B" k4 x& H##描述性统计
" X! N% w, [/ ?# |, M& ~; o
^1 I5 X; M& k M6 _2 }( a# d/ @/ U& r1 i/ k, F5 M {
#未做处理的响应变量分布情况
- d7 J. t3 x1 ?' \% Q/ ypar(mfrow=c(1,1))
0 f* s; g; {, M+ T! z. M: Ihist(price)
0 G3 N: M& d* v9 Y) g1 H! M$ `summary(price) #查看响应变量的描述统计量
8 h2 A. } B( ]9 N& y. t, t#连续型变量描述性统计& Q) j4 I" H' E9 i7 \% u
windows()
5 X9 F0 Z A; p, e6 l) D5 k" f+ Wpairs(a[,c(6:10)]) #所有连续型变量间的散点图; c4 z$ V/ X5 r6 U2 @
par(mfrow=c(2,2))
1 F" b1 L/ d! d# t8 ^0 S' oplot(rong,price) #每个连续型因变量与响应变量间的散点图 L, v/ {2 `& ^7 L& Z
plot(lv,price): S; T3 O! C0 ~7 J+ G" ~
plot(area,price)
( i, k0 X: q0 h# U2 g1 J0 Xplot(ratio,price)
* b6 k( }/ N- y7 Q2 q) e" qsummary(a[,c(6:10)]) #查看连续型变量的描述统计量
7 a# F% S5 ]$ {9 U, |cor(a[,c(6:10)]) #查看连续型变量的相关系数! k5 o2 l* X: |
#属性变量描述性统计' Y. l" n. k9 X
windows()
- A o3 ~" L% ~; g& N* M6 @par(mfrow=c(2,3))
2 M0 B( d: X/ f' `0 `. F9 Sboxplot(price~dis) #每个属性变量关于响应变量的箱型图
2 }; J' ~. j K% a$ M& @- cboxplot(price~wuye) , w. p5 J3 y) [" a
boxplot(price~fitment)
- d2 L2 F2 L0 O0 mboxplot(price~ring) $ P0 b+ k9 u5 C% y8 i
boxplot(price~contype)
# t7 L6 L3 b: f/ s
! D; R) Q; J5 o2 I4 M `2 k# s+ g, O& p" {3 ]3 d! j
2 @# p: ?4 m; j
# p* s* Y3 q: x) f##模型建立5 z6 x! A+ U9 ?! L! `
3 D e" c. N/ k% P9 L* r
7 ]" u: p* S0 e& \3 m( r
#在方差分析模型基础上加入连续型变量' q( B2 Y/ o0 l$ I
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
4 G- g$ A1 f8 ?0 e) sanova(lm1) #方差分析1 C7 ~- |1 g& {* x* k
summary(lm1) #模型参数估计等详细结果
6 Z& M4 s0 B4 t5 |: _9 y2 u# ]windows()7 E" l# {9 [7 s4 |6 I2 }& ^4 ~
par(mfrow=c(2,2))8 {! D g0 t' D/ n
plot(lm1,which=c(1:4)) #回归诊断做残差图. q/ P3 z* D7 L) J% S
9 C, n1 g6 p9 k- n9 O) c0 R$ u6 I; T* f( N; g- s
: Q' e+ M; q+ ^; v+ Q" m
4 k, l) o+ t. c. @9 h+ u##变量处理4 t) s u- l- N% S" `0 _
, T, q/ k# H( y6 ~: x, T0 x/ Z) i$ l' N! n- D" l
###对不显著的变量采用分组的方式希望能达到显著的效果) V. I1 r& n q- A& R) X! L
##对容积率的处理' }+ j4 ~* z) S' x3 n
windows(); V0 n! H! v; y2 j7 z B
n = 4
1 n2 n0 @, N) x$ Nboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
$ M- @/ O! A. J( Z" stable(ceiling(rong/n)) #容积率各分组下的样本数 S9 K1 R p9 W5 t
ronggrp=1*(rong>n) #进行二分类 q# A7 e# Z& Y5 o: g! E1 b! B4 D
#ronggrp=ceiling(rong/n) & F& g0 ?& s J' P
table(ceiling(ronggrp)) #容积率二分类下的样本数% U0 Y% E0 ?1 m5 y; y, A N
windows(); a. p! o4 v: v( s. [' {( Z8 }# E
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
$ I- F% L- k2 Wwindows()4 i* i( {0 v6 d$ L! P |
par(mfrow=c(1,2))
) S8 y+ u) x. p7 ?boxplot(rong~ring) #容积率与环线箱型图$ m: n! t$ c0 @6 f; w5 d3 S7 a% V! g* ^
boxplot(price~ring) #房价与环线箱型图
# H( M! M f( i4 m- _! Y6 r" Z0 R#加入容积率分组和容积率分组*所在环线交互因子的模型8 O- p- q; F( l; ^; q f. R) X
lm2=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+area+ratio)& r% K* Y( y! C
anova(lm2) #方差分析3 O& s: v2 D4 p8 e/ r
summary(lm2) #模型参数估计等详细结果
. E7 S: E# p8 gwindows()
* |/ _0 V# U# q$ b! Ypar(mfrow=c(2,2))
9 R, F9 t0 y/ |; Z4 `plot(lm1,which=c(1:4)) #回归诊断% O% i7 G. a+ D3 [$ k. j
6 f# Q$ H) D- p
) w' T2 P% q; a" V* q% b2 @: e4 n##对小区面积的处理6 x3 r# b" H2 h' G
summary(area)4 f% n5 ^5 i0 M
plot(area,price)& n9 ?6 o; {/ s+ M8 a( b
windows()
5 T5 C" C' G1 f* @. xn = 150000$ U2 T& V3 Y) Z; e$ K2 r6 m/ n6 `# e
boxplot(price~ceiling(area/n)) 0 y# U P9 J) F. W9 g* m
table(ceiling(area/n))
: z+ M: ~$ S5 S( t7 i/ W. {0 z% f! }+ Bareagrp=1*(area>n)
% H V* \: v+ ?, ?. f/ ]table(ceiling(areagrp))) `3 Q4 }: f8 q' F
boxplot(price~ceiling(areagrp)), W- D5 P/ h( v3 P0 }
#加入小区面积分组的模型/ t% L& V7 p( Y8 U1 U
lm3=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+as.factor(ring)*as.factor(ronggrp)+lv+as.factor(areagrp)+ratio)) D5 w" l8 ]* F2 Q# {
anova(lm3) #方差分析
6 s4 J G1 k5 T1 ?1 d6 dsummary(lm3) #模型参数估计等详细结果; m( g( P- j/ t% q* V$ v
windows()
6 _6 A! D# _7 r3 H1 Wpar(mfrow=c(2,2))
0 r( ]- p- [# P) Qplot(lm3,which=c(1:4)) #回归诊断, T8 T6 O; u: W8 G
( ~$ z! Y3 Q' W/ r( Y4 t) R. c1 a, C
##变量选择
6 L3 \1 j. x K
5 e; e" m3 @. J. T
( n; L$ E! |+ U' h3 Q##AIC准则下的变量选择
. Z" ?( S2 u; b1 L- Flm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
$ z# y( }5 l1 _+ K: \; D: m) Ssummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
* g* `8 ]/ M u##BIC准则下的变量选择
+ _% D3 ~+ H4 U) w4 {( Blm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
9 q) D; p/ |8 l1 g* k, z. ~2 dsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
; Z& [5 u% F; R0 t6 M" f) i# `( _( C( z
* S; M' w8 L& T
#选用AIC准则下的模型进行回归诊断& M. L" O5 H; L0 |+ Z# Z
windows()
# m" O( ~3 H+ Xpar(mfrow=c(2,2))8 u7 b" I6 o( w; X* a$ L6 D/ W4 c
plot(lm4.aic,which=c(1:4))
& M" u# Y' g5 ^" |, J4 \6 C$ O
$ @, Z+ H2 Q; p- i$ Z0 K$ K* q8 X( \: _, ?( M- X2 ?6 @5 S
1 Z& ]% V4 x @4 W4 e5 V8 {* w
; Y1 ?# N, l, J* i9 c6 P5 F
##数据变换6 w) w4 R8 U: c, \
4 J9 k6 e0 U# \2 n; a! a) c' n3 K# B, e; }* H! L! ?5 M
#box-cox变换+ o. r+ M& D' ]5 F+ E7 w! X
library(MASS)
[2 Q; Y1 g l$ V+ |. `b=boxcox(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio, data=a,lambda=seq(-3, 3, by=0.1))
7 |( w$ p0 | w6 B" @5 V: z5 |( C7 oI=which(b$y==max(b$y)) #定位似然函数最大的位置
2 I4 k* F3 b1 G3 `) D2 y5 |1 llambda = b$x[I] #精确的λ值8 k2 P) S* a, p* i" L$ |8 ^
#λ接近于0,为模型简洁性,可以直接进行对数变换* T: t1 d- ~6 j" _9 T
logprice <- log(price), J+ ~! J; W9 I- N4 _) U _
hist(logprice); ?0 d2 g; q0 s# O
: W% y3 ?" M0 W6 r1 ]
6 e, J. X) n* \' O* C
##最终模型与诊断
2 D* |; \; [. P9 N. G, I5 N* U# V, e
! G8 X5 f9 z9 V+ G' j9 r9 H; m( }) t8 j0 E- s
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)! p( Y6 t8 |, e$ r
windows()
/ I; W/ W5 [. ypar(mfrow=c(2,2))
0 x, Z( e* z# kplot(lm6,which=c(1:4))3 e% R- X% @7 J9 o
anova(lm6)
6 ~/ X! }$ u# T9 `( Z) |3 c) ssummary(lm6)
4 U4 M9 p N. D1 H! f# I6 d5 d% l
' M# b: C8 C' J/ ?* k g. V. H! H7 s- P
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560+ O# h M; d0 O, u0 r, i- G* z
5 o7 f: r& Y8 z, p
9 F; \# t1 F) g/ \& y) N$ g( w
9 r8 Z, E: o& [8 q6 A O$ s8 }! A
/ V; k7 Y: p! |' R* F" { |
zan
|