数学建模社区-数学中国
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]
作者: 1047521767 时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析0 k8 D9 [7 G! z# x- o7 \
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
# ]0 k5 r/ x! K这里将连续型变量也加进来,进行协方差分析,建立完整的模型。
首先对房价进行对数变换,解决异方差问题:
& W. m8 B; ~8 m
行描述性统计分析,各连续型变量之间的相关关系如下:3 f& d/ q1 [0 r+ u( b

0 v/ J% F9 O# [2 q1 f1 H! g- Z名义变量的EDA一般做箱型图。
模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
0 O0 Q. p" h6 E" ]8 L8 p

- s5 {2 w; b! g9 U
$ Q& ` ?! S. m" a4 k最终模型残差图:- y" u1 `& a5 o9 X5 H/ v8 F

4 b a8 x9 P- a' E2 ~+ @; Y, e通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:/ m8 Z! m, J" Z. h. _0 K
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比; a/ t9 o( R- g$ W6 _" v- h
属性变量的具体影响在此处分析略去。% U3 x1 ]* s) W, m4 `/ S2 m
连续型变量的影响主要为:6 }8 b, k7 F; N
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;% q4 h: I1 j7 {
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
- d) ~' P2 J* U' j同时,原本为连续型变量的容积率经过离散化变为属性变量后:
$ h8 m5 O7 R$ r0 V" S% A2 d% ?& R% p 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;2 S$ f( @ Z8 n0 y, A
容积率与环线之间存在着交互效应。
! c# c1 r B! X' I$ o" k* |rm(list=ls()) #清空当前工作空间8 F8 i$ o% |4 s; q
setwd("D:/回归分析") P* D3 C6 f9 x4 W3 h6 N
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a1 w7 p5 [. r& r$ n* N: K
View(a)& B% n J5 D& A6 L' N ^9 a l% s
attach(a)+ X6 B0 v+ j, p! @2 j8 u7 J. k5 w2 A
names(a)$ u# y% @' `( E5 U
) k* B( D; i( A3 w& ~
! e! X9 i1 O& t' T1 Q) Q6 K) i##描述性统计* G2 f7 {- g4 J7 e5 v) g
! k! n$ I& j& } v
( L5 B C$ u2 G& O+ q9 M#未做处理的响应变量分布情况
; [( \9 E* i7 I; b% ?' J5 Rpar(mfrow=c(1,1))
* Z1 B. B; G6 G3 Xhist(price)
; Q7 L/ |5 X0 lsummary(price) #查看响应变量的描述统计量# ?' N B1 F: r8 V0 @
#连续型变量描述性统计* l8 }' R& v g8 t: }! P v8 a
windows()
- q1 O6 v# i, g% `pairs(a[,c(6:10)]) #所有连续型变量间的散点图
4 o! x8 e: S$ p& E! d" c5 ^% vpar(mfrow=c(2,2)) ; R0 f6 c; O F, T: t* ]9 g/ B
plot(rong,price) #每个连续型因变量与响应变量间的散点图. T9 E1 P$ t$ U0 A( P2 I& j$ s
plot(lv,price)4 R6 k, f9 {/ T7 m E
plot(area,price)
1 S, F; @# O5 m$ j4 T1 q5 uplot(ratio,price)
3 j; b; A7 u( m/ j9 {1 }summary(a[,c(6:10)]) #查看连续型变量的描述统计量
+ H# L% ]6 |' N9 V- mcor(a[,c(6:10)]) #查看连续型变量的相关系数
& \( }8 W) M$ h* ~3 X/ v#属性变量描述性统计
5 X% v8 [6 [1 J4 l+ R. hwindows()
- s; ~" }+ \4 Hpar(mfrow=c(2,3))
- C: b5 L4 l( G8 g9 |6 bboxplot(price~dis) #每个属性变量关于响应变量的箱型图
$ l1 P+ e# }+ W* Pboxplot(price~wuye) 8 G& C; D( u- a6 V5 R4 _
boxplot(price~fitment) ) F% g5 ]* T( D- S; {5 W; n6 O7 z
boxplot(price~ring)
5 F$ w5 \4 p$ w/ J) a$ m9 Sboxplot(price~contype)
9 v, ?+ z( Z- U9 F& a' l* w1 A
# O0 b2 v/ y+ L( C7 ]' z F1 p, m- h, X
* x' V+ ^1 f9 ~; T& Z- t: y) ~9 s/ h7 I
##模型建立
; R6 i `/ n# G- l; B& M0 k# m( Z3 j
3 T$ l, {4 [6 B+ ^6 j' q5 [+ n: v
#在方差分析模型基础上加入连续型变量
: I+ U, ^8 R7 W" |( Olm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio), |; P% m( v) ?% B q# z
anova(lm1) #方差分析7 L0 ]1 k/ c, Y6 e1 ]1 p& _& \
summary(lm1) #模型参数估计等详细结果4 W4 N! ]. R" {* W
windows()
0 Z7 a( w. ~5 N/ [" K" J7 bpar(mfrow=c(2,2))* N3 \ q2 j2 H$ Y( F
plot(lm1,which=c(1:4)) #回归诊断做残差图
! c$ F+ J" n2 h U% M( c2 h
4 o0 M% j" Q/ w( `: y1 ~0 \, _
& | S% ?1 s$ n% o. n% a4 X
' n5 @) T- Z1 M
+ g* ]& x4 `2 o##变量处理
4 U9 ?" v1 ]/ q" H1 \
0 T$ H2 ]+ W" w" J4 J- R$ Q2 j7 g6 d' t( y7 n K
###对不显著的变量采用分组的方式希望能达到显著的效果
V7 N# m& {( K, `0 j/ }1 {##对容积率的处理
/ J m l S( c1 j# w, o0 Gwindows()0 g# ~6 u) W$ n' u) M
n = 4: h1 a9 p6 O: r1 \5 p S
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 ' B6 ^8 @" x5 ?( S& Z1 R
table(ceiling(rong/n)) #容积率各分组下的样本数9 v( Q) M8 U* c) j5 m- v Q
ronggrp=1*(rong>n) #进行二分类' Z* D6 q! O3 }# ]9 X& T
#ronggrp=ceiling(rong/n) , o6 H4 p1 q( M! H! J3 u
table(ceiling(ronggrp)) #容积率二分类下的样本数% [7 {* F2 i/ Q1 t( j$ f$ d/ W/ t
windows(): b- ]. N4 \( ^! J7 Y* K
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图$ a, I, {* V5 ^, b7 A3 s
windows()
8 y* A7 q* O: e j" Apar(mfrow=c(1,2))% w0 U) j# Z7 G
boxplot(rong~ring) #容积率与环线箱型图
4 O" G! a4 |$ U$ j& l, `* z' rboxplot(price~ring) #房价与环线箱型图
; _: W, G: B! R) A9 U4 e; i4 a#加入容积率分组和容积率分组*所在环线交互因子的模型5 m9 P7 T$ B- |% K
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)8 a, b/ h, U2 ?$ B( y" F! S5 e
anova(lm2) #方差分析
8 D3 {; b+ A. `; H1 p6 Bsummary(lm2) #模型参数估计等详细结果
% g# A( k% H# h3 Y8 \# hwindows()
?1 v. F. R! i I) _: ?par(mfrow=c(2,2))+ }/ s! h; ?) g
plot(lm1,which=c(1:4)) #回归诊断% b! i( \- z1 \; P8 ?; i: w ^5 l
3 `1 z/ K* c2 L; _
2 n9 Q' m& ^/ ?##对小区面积的处理
2 i J* c* E5 P4 |4 isummary(area)9 g# l3 r: z* o/ h+ {
plot(area,price)
' |* x4 a& j8 \) [, m2 dwindows()" X: Z8 k! F! x' d4 q4 f
n = 150000
% `! D8 v; a4 @% O1 H, y4 h" \: Xboxplot(price~ceiling(area/n))
8 J& @; i9 ]9 t. L& s8 Wtable(ceiling(area/n)) 5 ^) k% n! ^& v, ~, N
areagrp=1*(area>n)
+ Q- K O+ O; rtable(ceiling(areagrp))+ ]8 e+ }5 g# g6 V1 j% K% J$ w
boxplot(price~ceiling(areagrp))
8 ^+ L9 L) L# |) A& ?' ]$ U I#加入小区面积分组的模型
6 n! k5 k* {9 L; O6 f6 D( H) `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)5 a4 T+ o$ s. b u" h/ H2 [
anova(lm3) #方差分析
* g/ U4 y2 B" v( b% ~: G* |summary(lm3) #模型参数估计等详细结果/ N: ~* L! z- a% J; G0 e$ J. K
windows()
- t* \4 g) y- b& `6 C( tpar(mfrow=c(2,2))7 e' G; e" \; W* Z) G* _2 H4 ]
plot(lm3,which=c(1:4)) #回归诊断
) g+ o' ?2 a; v' E
0 f+ N$ C0 A. n+ `% i
$ a) b4 r2 j& V) s##变量选择
$ y( o5 x1 u2 i
7 v- R! e# A, O( Q, }; ]) k4 G' m1 \8 I2 d1 p1 B; f2 g5 s
##AIC准则下的变量选择
* ]) K5 A! X; p& ilm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
3 {2 ^- [$ J" L8 z. I3 zsummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
2 B) ~$ L0 Z/ T- c; Z9 i, o##BIC准则下的变量选择
+ t( q. O% ]3 t# }lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
" q8 E! f5 D: D3 w+ H( [- q# esummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
0 c& g1 K: t& }. |; Q, Z6 {7 e# D$ q( d- R# \! t
, R! ]1 _" O( s$ y8 a( W' J
#选用AIC准则下的模型进行回归诊断1 L; D+ r( _! W! c. c8 l4 W1 |5 m
windows(), {5 a+ d5 X& ~ G$ Q! u
par(mfrow=c(2,2))1 q7 A% ~/ [$ E9 x/ _' K. m
plot(lm4.aic,which=c(1:4)) 5 C5 P5 F2 }& y' t7 g" K
5 {! M* \ q6 u
* { k* t" A) m T
! G# b# Y& s+ t# [/ O T; p3 k! K' H2 E0 ?+ r q
##数据变换
2 M" i; A. C# T. x" R* K
0 E' W0 F3 O9 D" B3 D# w/ I# ~* W2 y& W0 S- @$ E+ g
#box-cox变换9 U, f3 `& W% n' ^$ N) D+ U+ I! @
library(MASS)
* r5 t0 u3 `: i% P& Bb=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))
: Y, J( [8 o+ z; t \I=which(b$y==max(b$y)) #定位似然函数最大的位置
, V$ r2 H7 n' `1 r; K6 I M# Slambda = b$x[I] #精确的λ值
! d* n+ U/ O8 L4 F#λ接近于0,为模型简洁性,可以直接进行对数变换 r0 ^8 U, \8 ?# o" g
logprice <- log(price)& k, e5 I- r# R2 c6 [* a. P* m% G
hist(logprice)
. ~2 r$ Q; N1 T. Q+ O- }( O1 g! t+ A
) B0 p1 S6 n1 M. q( q, u; \
##最终模型与诊断
m4 y/ {' T& V2 H Q" x% y$ y Q% d" S* l/ m1 N) \+ l
7 z9 l& _4 I; p, E/ b& |3 k9 V7 Rlm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
/ r% g) B' t6 }6 o0 P( Kwindows()+ H6 Z7 p( W4 A( Y4 L+ @
par(mfrow=c(2,2))
2 p8 {/ [+ c7 t# N2 T+ bplot(lm6,which=c(1:4))
7 W' I1 }, R* ]. a! k/ [# Danova(lm6)
+ j8 I. \' i0 F6 {1 N) Bsummary(lm6)
1 I' T1 D9 B ~' s; s4 j+ I) N- j2 h
4 i' }0 e$ c: q: g4 e$ p# e
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560: C; K0 ?& _, A* M% q
' Y# Q( w0 E2 M" e
7 G( i# ?% B0 t* Y
' O6 J7 h; k8 y, r
+ S" E1 Z! M) F, @, p
作者: fgfroom214 时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有: J0 \# Z6 k. o0 g% v3 i U
5 E* Z3 I; X$ ~% o8 l* F: i, D
作者: sjlxdn 时间: 2021-10-27 19:55
111111111111111
& e, ?5 o/ X5 E' v5 i; h/ D" }1 H
作者: fgfroom214 时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
' ^* U9 M. M( \' M1 j g" D3 e2 F8 k
) [9 z; ?; G2 N2 K
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18 
6 w/ F% h4 a* E$ @" r6 t太好了,又认真的看了一次,发现自已差太多了
" K8 X1 I) }# O" m( \1 V1 s/ J/ f我每天会发一些好资源的9 V+ S% L- S7 r
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32
- b$ I2 [; G* d2 V! p; B! a
一定会认真的看看,发现这是R的,有python的分析没有
3 O1 q- }( N8 u
有啊
6 ~/ [) G; j: Z+ i! B$ M& S
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |