数学建模社区-数学中国

标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]

作者: 1047521767    时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析- T  }; l% A. Y8 j( {, L+ C8 Q

这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
& @  V& S9 v8 |' ?( f& p9 r这里将连续型变量也加进来,进行协方差分析,建立完整的模型。

首先对房价进行对数变换,解决异方差问题:

6 U1 z6 L9 X* Y* @% n
行描述性统计分析,各连续型变量之间的相关关系如下:; s* K, G. [+ {. `! z# s& N* m
. K: X; ~  l+ T. @- m/ m

名义变量的EDA一般做箱型图。

模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。


! G4 e% S! q, r5 h+ i
1 D5 ^4 b. `; M4 b
4 \) @) [/ E0 l最终模型残差图:+ t% G9 G" F! N4 u1 X" X$ ~  p  I

/ Y/ {5 C. S/ D: [7 @
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
; @& O( h4 J; `" x; X$ d" y4 \属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比0 e" G) Z( E( q+ d+ \& S/ C% {
属性变量的具体影响在此处分析略去。* a3 `: u0 D7 N1 X, S( _* T
连续型变量的影响主要为:
. S' t& d# h' F 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
: A2 a' T6 z9 z+ w' x/ F 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
: l, u! g' l, h; @6 g同时,原本为连续型变量的容积率经过离散化变为属性变量后:3 ]7 M' z5 V& w- F! B/ s
 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;
, w4 q9 g- c( F$ e  s 容积率与环线之间存在着交互效应。8 _/ V0 a* P: }& R% N
rm(list=ls())                                                                                #清空当前工作空间8 ~, t1 K/ @$ O; z' z
setwd("D:/回归分析")
* M/ i" [" m7 G3 u6 C$ {! }+ Ea=read.csv("real.csv",header=T)                #读入csv格式的数据,赋值为a
% R! P4 k$ q. ?: S1 d2 ?6 j* M. {View(a)/ R' e- \% r, x* V- A$ p
attach(a)
0 a; ?4 P  A6 a5 D+ \0 jnames(a)
7 |, c7 v8 D, D; B% e9 B0 P3 M" N  i$ ?% }' y2 O" x

. d& c/ p6 o* l4 ?* K) y##描述性统计; W0 l* [7 {/ H

9 f* x1 V' A2 x; d2 ]7 L% x
# I$ d( q" n# t8 g4 Y
#未做处理的响应变量分布情况
$ s& Z' ]: U' b" Hpar(mfrow=c(1,1))& ~/ q6 m% i8 ^1 a3 r! F: J" U0 _/ H
hist(price)
" B; ?( Q6 {0 k3 ysummary(price)        #查看响应变量的描述统计量1 f& H6 {! b& p! d$ L
#连续型变量描述性统计
. j2 L6 t6 B( N4 X0 P4 E2 |windows()
; I( h" o- o7 `3 }9 ]pairs(a[,c(6:10)])    #所有连续型变量间的散点图
) }( x  F2 \3 ?* F6 b+ ^8 Mpar(mfrow=c(2,2))       
0 ^; Y% k' h! D2 b3 eplot(rong,price)      #每个连续型因变量与响应变量间的散点图6 i( [$ F: L: T% y
plot(lv,price)
! e/ C; X8 r1 z6 @/ ^plot(area,price)9 |$ C) K. c( _1 z8 m+ B& M
plot(ratio,price)2 v. A4 L2 \# J, J! U2 h6 Q
summary(a[,c(6:10)])  #查看连续型变量的描述统计量
, j. y5 R+ S' f( N, m0 l. h5 Xcor(a[,c(6:10)])      #查看连续型变量的相关系数7 I8 H5 B! L% ~3 h3 N% e2 H! M, ~  Q
#属性变量描述性统计
6 _+ I' T+ x. N! l( H/ p( K1 hwindows()0 V, O6 @* b+ L
par(mfrow=c(2,3))                       
# a9 b+ c6 x8 p  jboxplot(price~dis)          #每个属性变量关于响应变量的箱型图
2 o/ r. {, d- z/ Lboxplot(price~wuye)                                                                        ( s6 S! {# y% X' W
boxplot(price~fitment)       
' l9 v# P0 k2 f; |$ ]+ j+ k$ aboxplot(price~ring)       
; v% _: `( C) |; @4 D) ~6 bboxplot(price~contype)% p4 M: m+ m9 N$ N1 u, k3 w% c

: c: L6 I! B. v9 x

8 h5 s3 D) [3 l0 M1 v* D9 h" m7 ]/ ^& J9 W

  b& {% i2 ]- A3 ]4 V( c" |##模型建立; ~9 h5 O) Y: J1 a, e/ @6 E0 Y

3 c( K. {3 K+ P0 Z' L* N0 N2 `

* w! B1 X% ]* w4 E' [9 s* U#在方差分析模型基础上加入连续型变量5 B7 }! z& X/ T3 f/ h8 _7 S
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)0 |! o* K; Q: I* |" d( O
anova(lm1)                #方差分析
2 c0 z" T% ~# f3 O! Fsummary(lm1)              #模型参数估计等详细结果  S5 R( X5 n8 V+ J
windows()
2 e; t. b+ Z8 r5 L) B" {. o, Qpar(mfrow=c(2,2))
: x+ t4 r- N+ b& b5 A* x& g# @: hplot(lm1,which=c(1:4))    #回归诊断做残差图
, Q  W$ `2 q4 B) |1 _$ O6 Y' ~$ u+ ^1 C* _5 @( A/ U9 s& T
6 {+ n+ @3 h+ d+ y6 }6 Z; @

/ J$ u6 _+ j/ Y: l/ O. N

+ ^' J$ ^  G: C$ V: [##变量处理6 N. v. L. Y" u  G) U3 ?

. K, _& N% P7 l+ C# p( D
' y1 T+ L/ ^8 Q% [% M
###对不显著的变量采用分组的方式希望能达到显著的效果5 S) W' \$ {7 {9 {, N$ g+ D* U- t
##对容积率的处理
) s4 v9 A. @7 H/ twindows()6 v" O1 T8 u: D9 ]5 F; b
n = 4
7 ?# a: ]' \& _1 }boxplot(price~ceiling(rong/n))                #容积率多分组下的箱型图                                        " @- s7 _5 S2 o! V+ a2 J7 K
table(ceiling(rong/n))                                                #容积率各分组下的样本数7 V" c+ s4 X& Q5 O
ronggrp=1*(rong>n)                #进行二分类
4 S! b' N2 \" v( |" u7 o! q* r#ronggrp=ceiling(rong/n)        + P( U- s1 y; P, C% W% V
table(ceiling(ronggrp))           #容积率二分类下的样本数
: O7 K$ k, `9 d# B7 K: a. ]$ pwindows()4 a4 o9 \2 t: t  u- y, o; G
boxplot(price~ceiling(ronggrp))   #容积率二分类下的房价箱型图
1 j/ Q1 G! h/ ?1 {0 Zwindows()+ c+ D$ C, g  w* L; ^
par(mfrow=c(1,2))
, _& S2 F9 x: R! e, yboxplot(rong~ring)                #容积率与环线箱型图! j+ `  T( A1 w: K( Y; y
boxplot(price~ring)               #房价与环线箱型图
  Q2 ]! J! n: `* E#加入容积率分组和容积率分组*所在环线交互因子的模型3 S8 P3 f! c/ M& O# [# W' {1 ]
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)( h1 \) k2 y7 v" a1 ]; L
anova(lm2)                #方差分析
/ f# Y+ [/ _- \& l6 t1 Tsummary(lm2)              #模型参数估计等详细结果! F$ e# ]& J  W9 j4 R
windows()
! s% n, y8 v; Epar(mfrow=c(2,2))& u2 s$ l6 y2 j4 M- @3 d% M) j
plot(lm1,which=c(1:4))    #回归诊断" {& j- M: X0 m$ i5 m

3 z  e# ?6 o9 h) j; P& [
1 V) v/ [4 |; V4 |. K8 ^
##对小区面积的处理
: y' }3 l5 C& d. H7 Rsummary(area)
6 e& v+ x! L. b! Cplot(area,price)
+ I2 I8 F# T8 p. e$ @3 hwindows()
* [: O& \" B; ~( B, m0 Dn = 150000
! k" g9 D8 p. g0 bboxplot(price~ceiling(area/n))                                                       
! b3 Y& p: Y5 {; dtable(ceiling(area/n))                                                                4 ]4 e* B, m4 g6 Z
areagrp=1*(area>n)) i) I6 R( s5 R/ `! L
table(ceiling(areagrp))
2 z( H8 h9 ]  t1 J3 ]( W4 Iboxplot(price~ceiling(areagrp))( e; S, U. v1 A2 Q3 f; I$ H
#加入小区面积分组的模型' e' b2 O/ h/ L0 \. G: r% [- A
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)
+ Q7 b, y* A# Hanova(lm3)                #方差分析
& C# Q  W9 G1 l+ I' ~( @8 ~- tsummary(lm3)              #模型参数估计等详细结果8 h0 s" a! k- n. N$ G1 D" |, v- @' W
windows()% H* X4 F! |! Q6 U7 F+ ^+ a" G
par(mfrow=c(2,2))2 m7 I. l" I; @" C, {( ^: q
plot(lm3,which=c(1:4))    #回归诊断
' b. O& Q: O8 Y* l4 f/ D8 d
( a" `- `& B, b0 s8 G3 [

9 W+ H- ~0 G+ C- c: z6 c##变量选择, M7 w* R0 t4 ]

7 c2 E0 a. c) k2 ]5 F3 w

* m" }% `5 e0 [9 G7 F4 t##AIC准则下的变量选择; ~- j2 W- \' b' _0 k9 E
lm4.aic=step(lm3,trace=F)       #根据AIC准则选出最优模型,并赋值给lm.aic
1 o1 u' P) ?% c8 d( Osummary(lm4.aic)                #给出模型lm.aic中系数估计值、P值等细节
, G$ @5 A2 Z5 z) T, P##BIC准则下的变量选择
9 w5 ~* P$ P  {+ b! I" u/ _lm5.bic=step(lm3,k=log(length(a[,1])),trace=F)     #根据BIC准则选出最优模型,并赋值给lm.bic  w7 e3 ^4 }, n* C, M* |0 }0 [
summary(lm5.bic)         #给出模型lm.bic中系数估计值、P值等细节8 c5 J, {3 u0 ]! K" U8 z& V
4 i, b, Z# R( B8 _
  ^% x0 w8 h, h
#选用AIC准则下的模型进行回归诊断
: _, E$ V* w2 O' _6 i; Bwindows()
3 L9 l, K$ X5 l3 z7 `& wpar(mfrow=c(2,2))* V# B/ u4 L! @5 i! m+ D
plot(lm4.aic,which=c(1:4))  
% C$ W; M# x  W8 g: b6 x3 u3 I& |% @, h) u, ?

( M8 Y% ]+ p1 `! ~
. s; U4 b$ \) _/ `" |
# C8 L. S. D$ b: Q
##数据变换- r9 f  e* X" N+ W: }/ G: T

, h# w" u1 n, G

& [( B3 G# [. u# z3 y' _#box-cox变换
% `5 U6 Y, _$ K; i0 I: u7 N( W" Mlibrary(MASS)0 O) D, u% I" K. t- d' T$ c. L
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))4 `( R8 o8 ^9 {8 b* A: h# N
I=which(b$y==max(b$y))  #定位似然函数最大的位置2 l7 }6 J. b; `+ f
lambda = b$x[I] #精确的λ值
$ v) O6 l+ Z4 `; Y. G. X2 y: g#λ接近于0,为模型简洁性,可以直接进行对数变换
* X( k% k5 Y3 J. A2 _$ [' ?logprice <- log(price)
% I7 d$ q+ h- Whist(logprice); q4 J" g( x1 l# M- y+ D) Q9 C
9 S: E4 D0 h6 ]. i
- r4 y+ ]* x) O$ Z& T- N. l
##最终模型与诊断2 k) p. j: g. n9 q3 P1 T2 ?0 J
4 s. d7 H, Q; v
. V" G  u5 r6 k' l
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)( ?: C2 W0 @- X1 p) H1 }
windows()
4 S, H, L4 G  {3 B3 t  {: ^par(mfrow=c(2,2))% f" \5 ~9 c$ N% G! E+ Y
plot(lm6,which=c(1:4))
! Q  }. a7 w$ t7 C. h) `0 s8 _anova(lm6)$ o  k# L9 u. _
summary(lm6)1 D2 t' D7 v" ]. g
4 J0 m! O3 m9 O# j6 |! q
' |, O5 X" m& S; s
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
+ r4 v+ x+ x% o" F0 z
! e" ~" E1 m$ X9 n3 y) F/ o4 [

/ j9 [8 h3 O' ~( K
8 l4 H4 L/ }5 l
. j0 t) [; d) H6 s6 C
作者: fgfroom214    时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有
% N* W$ Z" g+ u, O% A
+ |0 j% p7 g: S2 K7 T( H
作者: sjlxdn    时间: 2021-10-27 19:55
111111111111111$ R& X4 t" d( m. J, a( m. d: i; r

作者: fgfroom214    时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
+ @5 L8 \3 H2 u" X, f6 g6 s- P6 j; {

作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18 ) c) Z( _8 e& X1 _
太好了,又认真的看了一次,发现自已差太多了

/ A( \7 p9 b8 k( s' ]3 n1 g我每天会发一些好资源的
4 n8 @: G9 k" R7 E' x8 n) K
作者: 1047521767    时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 - j* q4 [. p; z- i
一定会认真的看看,发现这是R的,有python的分析没有

3 N6 ?9 Y# Z' o' o( Z5 o9 Z3 V$ E有啊
. d/ w* Z* x7 p$ @




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5