数学建模社区-数学中国
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]
作者: 1047521767 时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析0 G; s3 r" p) n* z& C* w8 a
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。# y0 p0 i2 S! [, _7 E; O
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。
首先对房价进行对数变换,解决异方差问题:

5 {6 F" @! w U! j! ]行描述性统计分析,各连续型变量之间的相关关系如下:7 b- A8 B0 K: Z5 P, s/ l
1 \( P' p8 q2 X; h* S; [2 R
名义变量的EDA一般做箱型图。
模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
2 G7 G8 d/ y) d& `4 }
* @+ t( ~: ?4 K" [

8 J. P' p7 l$ \# u* t6 U最终模型残差图:
7 u6 C7 \5 d# ?2 k0 N/ Y
& ?* @! `" b9 C' [0 q5 Q% [
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:4 m8 r6 Z0 ^# |3 a
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比6 i2 \" r. j$ e% ~- L {& Q* k
属性变量的具体影响在此处分析略去。& u% i* v1 T; Z
连续型变量的影响主要为:* N7 ?9 I! F5 h; W0 N
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
6 D |1 i, F; n: P8 v8 R# C 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;2 I2 {2 w+ R1 g. @4 R
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
/ b- |3 P3 {2 ^ 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;4 p8 r: o! H5 ]! S& g- o' r
容积率与环线之间存在着交互效应。# V0 W5 T5 `7 E( q7 K9 q5 Q, Q8 w% T
rm(list=ls()) #清空当前工作空间
5 X1 | D9 M! d5 _% gsetwd("D:/回归分析")8 G$ O: L, m3 Z$ O
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a! i2 O- o4 a: S
View(a)6 e# ~" z* R4 ]" p$ [8 n
attach(a)8 {* A: W0 g; k6 B$ s
names(a)( b( y; _, R' }: z5 N: O4 i0 @# ?9 N
( d. c+ b7 S4 N2 V. [
0 l, t2 \5 k- ^- o##描述性统计& b/ B- _* Z& j8 s y% Q: z
- H& b- }% l$ a9 F" G6 j8 P
8 D! Y% D# U" F$ q' Z- }* Q#未做处理的响应变量分布情况* \2 v* p1 Y$ ?. d7 P* u0 @
par(mfrow=c(1,1))* {. m, v" F6 u" D
hist(price)
& g9 f7 g2 t$ _; ^' S, c [. osummary(price) #查看响应变量的描述统计量4 ~$ I k5 Q2 C1 t
#连续型变量描述性统计; N+ W6 q! {$ ]4 Z
windows()
: h1 a3 a6 q1 x* Hpairs(a[,c(6:10)]) #所有连续型变量间的散点图1 B3 J2 [- K* Y* O2 }) f/ d
par(mfrow=c(2,2)) " K* u- p* G4 B9 l
plot(rong,price) #每个连续型因变量与响应变量间的散点图
) [ _1 \' d3 f& G7 x3 ]5 ^: i- vplot(lv,price)
8 D9 D7 h7 {3 C# g: Iplot(area,price): z p8 K8 g* |* T
plot(ratio,price)$ z( e) H8 [6 e
summary(a[,c(6:10)]) #查看连续型变量的描述统计量- S$ T$ j* k a
cor(a[,c(6:10)]) #查看连续型变量的相关系数6 U. n( s6 j6 W0 k; g) o/ P
#属性变量描述性统计. P1 c1 S3 l k8 G6 w
windows()+ ]- T1 O! N1 ?" C4 S; b3 `7 o
par(mfrow=c(2,3))
$ T- i6 Y+ N6 Q3 s4 c' x2 oboxplot(price~dis) #每个属性变量关于响应变量的箱型图- O+ J3 \6 _3 x4 c; F' y
boxplot(price~wuye) . ]/ ~* ?, ^7 d: b1 W
boxplot(price~fitment)
4 R) V) O7 o1 l+ oboxplot(price~ring)
9 e0 {5 V3 b8 g8 \+ z# z4 {, Uboxplot(price~contype)1 P4 B0 H( Q* z& o% ^ n
/ L1 F9 n, L3 N0 q; k: Z: T' J M9 S9 M! `. h0 h- _( D" I: D3 t
7 r; s) O# d4 A& O
) o! v3 Y4 w+ h8 r" [##模型建立
; n0 [6 Q0 P }6 T5 q( e* ~, A( }& c; d9 W0 x4 z- d, V
3 _1 M% d0 Z. P5 _
#在方差分析模型基础上加入连续型变量
; ^- a. u7 ~) x& o) rlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio), O& ~& c" ?0 G4 s) C, I) y0 {
anova(lm1) #方差分析4 ?' S9 d# [* h S- e
summary(lm1) #模型参数估计等详细结果
' i* z# `5 P0 L& Fwindows()
4 j. {) U% P- l2 u( i4 fpar(mfrow=c(2,2))
& ~4 r$ ?1 @" Lplot(lm1,which=c(1:4)) #回归诊断做残差图
- C) f3 H" B5 Q% {1 d9 ~! l$ T: r' k! t* S- @5 d% G. |2 Y8 w
j* W4 J: F& b2 u2 F2 B- R9 ~- B& Y
" ~0 @/ v6 n$ `# j) ^ u# a b
##变量处理 B" z9 N, C: V+ Z& {, O
! U# V( B8 k3 f0 S! ?% b
6 I0 a0 ]2 ]/ S2 i6 m% J' e###对不显著的变量采用分组的方式希望能达到显著的效果. b. N& M: H6 A* J4 A) K
##对容积率的处理" m# _9 ]" N; S- p
windows()
* X; B# C7 l' B/ S$ pn = 44 M+ g5 J! t7 c+ j' L) e( V4 x
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
; h# {# K6 Z/ J1 O+ N* v' wtable(ceiling(rong/n)) #容积率各分组下的样本数
0 W1 t! {5 A. e8 ^ronggrp=1*(rong>n) #进行二分类
4 s7 ]3 P {0 r( g#ronggrp=ceiling(rong/n)
: m8 u. c3 C5 M. rtable(ceiling(ronggrp)) #容积率二分类下的样本数1 @( J" T1 e( T) W
windows()+ X4 n" v! Z" x4 ~) K7 a
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图, E) g' T# N' p# g1 H1 X4 S& Q
windows()' b1 I" x! V* Z' l! e
par(mfrow=c(1,2))& e+ c8 B! V1 u! N8 P
boxplot(rong~ring) #容积率与环线箱型图
2 K; c4 |- `9 T% X+ _boxplot(price~ring) #房价与环线箱型图
; G T+ c& u% m, y- Z2 W: B#加入容积率分组和容积率分组*所在环线交互因子的模型 o) R0 }3 f+ W/ t1 Y( J, ?
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)
D p" i* W: m; \anova(lm2) #方差分析: p q0 a# x$ D, u0 P$ C
summary(lm2) #模型参数估计等详细结果
y) G8 O9 Z/ v V) vwindows()
* ~( x0 a& e9 j6 ?par(mfrow=c(2,2))
0 W5 U9 ~5 c% k" yplot(lm1,which=c(1:4)) #回归诊断
3 N% a. p% C0 u( N) I) P. ?( a8 V) w6 {7 I& ^3 V1 U5 [
; A$ D$ L. i/ r7 ?# N8 z##对小区面积的处理& b( f8 Y' L0 D5 C# q
summary(area)
6 J% m# B( w5 b+ n7 G& C: ?: Z- Jplot(area,price)
& \/ C* O* {" Q9 Y8 C" R! wwindows()
) y" Q7 |' V; W9 wn = 150000
0 }: R8 Y2 ~8 h% J) E7 p' |boxplot(price~ceiling(area/n)) , y6 \# N1 I: G& d1 I
table(ceiling(area/n))
' {1 B' x0 G/ Z6 G( b- W6 Y& Yareagrp=1*(area>n)
: [4 P5 S/ ? ptable(ceiling(areagrp))
4 P/ f6 ]* C5 j- mboxplot(price~ceiling(areagrp))% i$ \7 i) q9 V5 ~
#加入小区面积分组的模型) T9 k4 ]+ J1 c+ j4 j5 `$ f
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)
7 G: y6 u. p. Nanova(lm3) #方差分析
9 b3 n! L5 C" L( R \3 Z4 F! {; Usummary(lm3) #模型参数估计等详细结果8 F+ G O3 K$ ~; }5 U8 G% f$ @9 Q
windows()- M- |) m: Y4 h6 P4 c4 U. t4 J" @
par(mfrow=c(2,2))7 n+ @6 y, Y. C) t7 V: m% R) G
plot(lm3,which=c(1:4)) #回归诊断) K$ E& W. k0 r/ u/ ]4 o
2 q' w6 G2 z# s; N
/ V0 ~2 T7 J8 [9 J: _
##变量选择) i2 Z1 ~8 H1 u. w! g
2 Y: w ?8 K% _5 r3 j( }; Z
; S" Q! I2 x, b+ u9 G+ b8 [% T##AIC准则下的变量选择2 n$ x3 `' h: k. G1 x: I
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
+ P* O W$ B m; X( t$ Gsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
& w! p& r# @! Z* O0 E6 R c##BIC准则下的变量选择" B7 j* P% g' w) Y. b
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
9 r" _, V( M! L% e1 T. x& Zsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
8 K2 u# V) T( m4 \
+ I% g; c& o) q: e' G& Z" h
7 Y8 d& f4 o+ k#选用AIC准则下的模型进行回归诊断3 J/ B+ ~ t1 Q" m- s& ~
windows()
1 e1 p& e4 A7 K+ Ppar(mfrow=c(2,2))
4 I# ?8 ~; P- D' \plot(lm4.aic,which=c(1:4)) 5 V$ |. l1 Y, J
2 f" V5 O3 @# }' w
" `2 P M, `- T- d+ v6 ~6 j, D6 y y' t1 N( n3 E
( R+ a# @* Q3 a# ~* v! ~##数据变换
( ^1 x P7 ]2 f' ]4 H* A4 M, r9 S2 a3 c& P
/ Z0 F: d/ D3 R+ F4 \/ v
#box-cox变换
3 A- ]) ~/ a+ x: J+ xlibrary(MASS)6 m2 v3 a3 P a8 d
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))
( N5 y! s, f. UI=which(b$y==max(b$y)) #定位似然函数最大的位置
. _7 {" H0 j: A. x( _, Xlambda = b$x[I] #精确的λ值7 b9 U' J( g# J3 E# L) y( ~8 R7 J* \
#λ接近于0,为模型简洁性,可以直接进行对数变换" v8 a0 W5 h; B3 K/ N
logprice <- log(price)
: M; J/ D+ w; x+ L9 R0 Lhist(logprice)0 o+ h; w6 F3 u2 `4 h
$ E- m+ Z9 T+ O% b6 W( A- m; _: ]
! h) D) K7 U" L6 g+ D$ L/ a##最终模型与诊断
% |& w; g }4 h8 _
$ ~2 Y k \# c/ H
0 o' b* G, G a. E: i+ Tlm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
* ?4 m: i; n# W4 Bwindows()" B/ i8 m0 _+ W. P5 x7 o
par(mfrow=c(2,2))
9 S' ?& g { xplot(lm6,which=c(1:4))) @1 b' x7 W8 E- }# X U( J
anova(lm6)6 C k* f2 j5 z3 q* U. D0 e1 ]
summary(lm6)
* Q1 Y# o# x1 T4 K9 j+ d q$ P# Y
! J) y. @* g( X' j3 c6 u- ?' X8 j: F+ F
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
+ S9 t1 V9 ?0 x5 b; e
# ]; D8 H1 U7 s$ Q5 S7 d: p7 @+ \, [& q% D6 ^/ ^
3 l9 L1 E, N/ ]9 y' e% P
, v9 b: c( b+ U6 q; }
作者: fgfroom214 时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有: u! a2 a. Q7 ?9 B6 N% K6 L
+ Z0 K! O& x) B8 G. q- f6 \
作者: sjlxdn 时间: 2021-10-27 19:55
111111111111111, Q1 L B2 R% q& ? M& v
作者: fgfroom214 时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
* t" S$ I9 G( e) K7 |5 k
0 ]: ]" G5 [: n, S. R3 S+ E+ G" R
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
4 ]* ]) H/ K8 q5 X
太好了,又认真的看了一次,发现自已差太多了
1 C* f4 Z- K" F
我每天会发一些好资源的
& v# b0 Q4 J$ m' @9 @
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32
: J5 A- u: C h( `
一定会认真的看看,发现这是R的,有python的分析没有
6 s. H& ^ Z. G
有啊# Q7 M! v5 m) O4 t+ E
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |