数学建模社区-数学中国
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]
作者: 1047521767 时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析
7 G' i9 U& A% C7 m9 `2 w3 T这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
3 c2 t. n) Y! U# Z6 i7 C这里将连续型变量也加进来,进行协方差分析,建立完整的模型。
首先对房价进行对数变换,解决异方差问题:
: S3 S3 H/ v, A
行描述性统计分析,各连续型变量之间的相关关系如下:
8 G& {: h+ J. ]$ q. @! k' G+ f
2 N: f& L2 G% D( {
名义变量的EDA一般做箱型图。
模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
- s1 Y' b1 c/ F

7 |" n! F' L' }7 h$ |2 G
$ v8 ]# [+ h$ B% r/ C
最终模型残差图:
" K$ G. s( h: t; X8 L; h
1 U1 Y. i3 J" S! J# ^通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
6 ^: P) L# S) o" a8 b' Z: O属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比- W2 ~* B0 I9 `! g) b# {" v
属性变量的具体影响在此处分析略去。; q7 v2 H& ~3 w7 j- ~7 _& p
连续型变量的影响主要为:( S6 c' A) j+ D- M
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;; t; }5 T6 H7 `" d! n
停车位住户比:有较显著的影响,停车位住户比越高,价格越高; r- |2 U1 W# i, R, E9 ^
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
5 B# S+ {; Q- e/ [' w; n 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
: p* P& b9 t* l! F) Q; G8 W 容积率与环线之间存在着交互效应。
" {0 k: z: j; j8 brm(list=ls()) #清空当前工作空间
1 M# @6 t; g1 asetwd("D:/回归分析")8 P6 W: R# W% R; }
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
) o; a% R7 B9 j$ h) bView(a)
1 C7 O( o- e3 @1 H% `attach(a)
( N$ S- \. _% x: ], I3 v( Unames(a)
( n% k! v, F' g7 ]; ~ s6 L
6 n; \9 P: [9 O6 l5 C: B5 g& D' K" Z+ R+ T/ G
##描述性统计9 ~0 ^, P0 K2 t. B2 }5 k
; b1 O+ g$ x; x! V
1 T6 D4 ?$ B% A#未做处理的响应变量分布情况
5 [3 r' D$ m7 _par(mfrow=c(1,1))& l4 D4 Q2 ~' o- f
hist(price)
5 r# C5 c/ S8 V7 n6 ?1 I; W) ssummary(price) #查看响应变量的描述统计量
+ @2 i2 W! ?' E- E* k#连续型变量描述性统计
% E- h% R H# j# Y* i! X% g7 }+ Ywindows()8 o8 b+ b% W- o
pairs(a[,c(6:10)]) #所有连续型变量间的散点图# L H0 R* o) x4 u, c1 y0 y) a$ f: V( [
par(mfrow=c(2,2))
3 c' U+ {% T9 f9 b6 u4 `% ?plot(rong,price) #每个连续型因变量与响应变量间的散点图
0 r/ Y5 L4 T4 P- H. k! y: Iplot(lv,price)7 G2 U7 `( q1 V+ g" [
plot(area,price)
" n) T3 [! Y# A% e' E: D! X# Nplot(ratio,price)
0 K9 C% @; E# Y* u# F- dsummary(a[,c(6:10)]) #查看连续型变量的描述统计量
~9 K" E$ m! U P( D/ Acor(a[,c(6:10)]) #查看连续型变量的相关系数/ l9 w( t) k( A8 C
#属性变量描述性统计
0 C _& j5 x0 Y( Mwindows()
1 T/ r m0 O3 C. A$ N8 wpar(mfrow=c(2,3)) . J) m9 c3 w+ H+ F( E3 \6 v+ f
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
) t* N G+ p$ R9 {5 q- nboxplot(price~wuye) + q" b# W2 F8 o
boxplot(price~fitment) ( u! W/ T7 `9 V% N
boxplot(price~ring)
/ a1 I: {3 y; M+ K& Qboxplot(price~contype)
$ r, f- D7 \: }
/ U& S2 i) J3 n9 t6 N
; ]. F- A: l$ I
: ]" p4 k' Y% j. r$ s1 x& _1 b$ a
. d/ l q0 p* p, g5 r4 Y% [##模型建立
# v6 S; O3 B. C1 j/ l- R- _
7 n$ B/ D4 P: i" a( R& A' p$ H# b& M/ G6 n% q. U) K& \4 P
#在方差分析模型基础上加入连续型变量! t' ^4 s0 f1 c2 c! @% s L; i
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)% ~" h: \) y* m
anova(lm1) #方差分析1 u" \6 [ S1 q6 x8 ^; U
summary(lm1) #模型参数估计等详细结果
* s. D0 `- N$ q# Z% vwindows()' e1 D: |; i5 O9 Q o4 \
par(mfrow=c(2,2))5 q+ p+ n- U0 `
plot(lm1,which=c(1:4)) #回归诊断做残差图" R( O) f: [! N- T1 A3 {
2 W4 s% z7 |% E5 t# P7 J
1 Q3 o8 g4 r5 }, R7 k* C
3 t+ b2 I/ n/ M7 [
; g( t5 \5 `! t) n# b( i
##变量处理1 s1 l( f. h- k
1 X" T" a8 h. v) u" ]/ ?' E7 f6 I# z& s1 ^# X
###对不显著的变量采用分组的方式希望能达到显著的效果5 {1 \$ x3 j q, ?2 @& c
##对容积率的处理
3 ]5 b4 x) E" G" K; p" dwindows()) y2 }4 c8 L W" w5 T4 n( F5 v( h6 y
n = 4
t% q( K6 ~1 m: C5 Y$ C( pboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 2 z# @* E/ o' \# c. O0 e/ n
table(ceiling(rong/n)) #容积率各分组下的样本数# \6 }" _5 V7 P3 E, C7 k- I
ronggrp=1*(rong>n) #进行二分类
* W+ X( y: D+ W1 e#ronggrp=ceiling(rong/n) 6 c7 r9 W* J* @3 R$ i
table(ceiling(ronggrp)) #容积率二分类下的样本数( u/ p) |/ u6 M9 y. c& ?# ]
windows()
X$ `& A2 J0 C. h* Aboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
+ g" ]1 k# ] O$ awindows()
$ x9 @; I9 F( Ipar(mfrow=c(1,2))
" b% A8 y0 N) Mboxplot(rong~ring) #容积率与环线箱型图8 c: U* V- s" p% _7 l- D
boxplot(price~ring) #房价与环线箱型图 & h; R- h1 s5 d7 G
#加入容积率分组和容积率分组*所在环线交互因子的模型: p* B2 N( `2 v3 u
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)
! T K8 C) V# S% panova(lm2) #方差分析
# O+ w: Z5 p; V6 {5 |& `1 T5 nsummary(lm2) #模型参数估计等详细结果6 ~2 p; z5 I6 i3 J* [
windows()
. e. P( g: V j# _par(mfrow=c(2,2))
6 \ l# g9 l2 S6 O' f z* rplot(lm1,which=c(1:4)) #回归诊断
$ v* D- c7 L" U7 V" @# c2 B& y+ Q1 U2 ~; _' e4 A# g) E* A: A
- m. q1 n8 f% G" ~( T9 k##对小区面积的处理
l6 |3 N% e( N' M7 @summary(area)
: b( L5 {2 S: c* x9 Z6 V: _, mplot(area,price)9 \' s( j4 F1 a6 ?9 g, Q1 b" Y9 \% J
windows()
5 ?4 m* B% ]. H% [n = 150000
8 @* V; ~7 T" l. U, Nboxplot(price~ceiling(area/n))
4 y' L- `2 h6 Wtable(ceiling(area/n)) 8 V( d6 b5 L* K: f! ?; ~
areagrp=1*(area>n)8 [9 o% M! j0 R% ^) O0 E
table(ceiling(areagrp))+ F3 j) J* S. w* f
boxplot(price~ceiling(areagrp)): W9 y3 l' W9 h/ v9 L' Q9 f( [
#加入小区面积分组的模型) S" n5 A9 c- ]
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)6 ]$ y" W# ]' I& P
anova(lm3) #方差分析4 C, t5 }/ S+ E& P4 F Z- \, d
summary(lm3) #模型参数估计等详细结果2 }5 r* {5 a, [- }. J
windows()3 I) f. o: z% h1 Y2 g3 P% k
par(mfrow=c(2,2))
4 T4 q9 @* D- r5 Oplot(lm3,which=c(1:4)) #回归诊断* \9 E4 j4 B) g# Z8 a- P6 }
/ y w) A" [9 s
: k. M( ^5 q7 C w. V+ d. z; n##变量选择
' @0 _$ H: L+ _9 _/ M( A% v! ]2 y/ d$ [/ h& a9 z# G) g$ s! J" O4 Y
5 J" {* K4 W. p
##AIC准则下的变量选择
% U0 J. E7 I7 Llm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic+ b0 S/ v4 w8 ~# n- O3 f' ]# i
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节! k7 q& S2 ^2 N
##BIC准则下的变量选择" A' \ X$ V6 J0 M2 b- s7 B/ R! }
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic$ b; e3 Z% w$ z7 r
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节$ P7 z7 D5 @( }3 l9 f, ]
/ A+ M/ s2 G" J7 p# g3 J' A% C* h( C8 Y7 v( A
#选用AIC准则下的模型进行回归诊断
$ n& Q. K c8 b" p+ qwindows()' @, M) f. O) T
par(mfrow=c(2,2))
~( G8 d, n% B) e4 A9 f, Iplot(lm4.aic,which=c(1:4))
) L% |: _5 y9 N: e4 @
. ~8 E9 o8 i) b: v& G$ ^
% w; I- R5 X3 \' C, g* A5 \! n' q2 P, [/ K, Y8 Z2 G, g7 h( n
2 |4 P0 j( g) D; z4 G: B
##数据变换# s, D5 f9 `' Z. W# v1 T
; z& A* k0 ~) m$ h7 J# C6 ?6 V0 |: |3 C6 E. A. a
#box-cox变换
$ e p3 {0 c! Y; zlibrary(MASS)
$ Q1 c1 l* s% j% g. q2 eb=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))8 n" ~/ P( e+ {- ?! h+ L
I=which(b$y==max(b$y)) #定位似然函数最大的位置" r2 z2 ~& j& ]* d0 k: @$ D7 A, @" I
lambda = b$x[I] #精确的λ值
* I. \5 s' x8 B9 G: X#λ接近于0,为模型简洁性,可以直接进行对数变换; g% ~2 @- T" R
logprice <- log(price)
/ u9 z9 ]; m1 Khist(logprice): `1 i! \3 L3 Z% S+ @
c( W5 v( F% l$ N
1 S9 q2 K* G( J% G+ D ~: p##最终模型与诊断
, ^$ n0 A! K4 @1 }9 [, E
* w1 W4 j6 Z% v0 h! l2 k2 E0 t$ c- b2 x* D$ T
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
/ a, t4 A/ _6 g6 cwindows()
& ]( m3 a# I- f0 Y* Upar(mfrow=c(2,2))- n& y: f+ E& m4 Q' Q
plot(lm6,which=c(1:4))" U( A: U) \0 ^
anova(lm6)7 ], P t% `- N7 N8 g3 j. t
summary(lm6)" A4 ^ H4 e% q( \0 X
" f( a8 B! e& v% \3 E
+ A: O' o# n' }1 _; J
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560 p0 c4 u# J7 w* l, u
x! W, e0 _3 ~5 }& {# o/ r
4 m" D2 k6 E3 @" `+ ]2 O- v1 ~: [0 j
( M0 n C) `! u& Z$ f3 U2 D9 i
: q' ]5 i# Y* N6 Q4 u
作者: fgfroom214 时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有
1 n0 h5 m$ D6 @5 o8 W/ Z, f
" z4 Z" t* s, T. p0 a
作者: sjlxdn 时间: 2021-10-27 19:55
1111111111111113 O7 {5 z8 a8 P0 y
作者: fgfroom214 时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
7 [" K: H. P( K0 e% _; n) k' z: _" i% h6 B+ P% X0 ?
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
& f, I& J( M2 e( A1 t% q
太好了,又认真的看了一次,发现自已差太多了
4 ?/ g8 a, |( r8 I. e9 W6 f我每天会发一些好资源的) ]$ j& K9 y6 o' S6 p# S; E
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 
4 C7 J/ t- P( x* }" W7 J- R: F. I+ r一定会认真的看看,发现这是R的,有python的分析没有
" |, c/ A; m/ H0 m
有啊
0 A! R+ p, T* Z q; C5 ?# W* C5 S8 s
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |