数学建模社区-数学中国
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析 [打印本页]
作者: 1047521767 时间: 2021-10-27 14:50
标题: 【R语言】回归分析案例:北京市商品房价格影响因素分析
【R语言】回归分析案例:北京市商品房价格影响因素分析4 q8 w+ r5 Q \4 E% W& A7 ^% _
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。, I, O9 b8 t: B
这里将连续型变量也加进来,进行协方差分析,建立完整的模型。
首先对房价进行对数变换,解决异方差问题:

! C g/ |! k1 D' ?2 q. W8 e5 e% ?2 Z行描述性统计分析,各连续型变量之间的相关关系如下:" {$ P% O* @; i7 {7 d- ]1 |

' W6 |4 u+ q T名义变量的EDA一般做箱型图。
模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。
9 ]8 y3 Q; p9 L" V
$ a+ _! h# `" \* S
5 c( S4 a2 C* P' F$ {. n+ @- V' X
最终模型残差图:. Q* u+ F1 W3 J. q6 b4 K& E) w# n

4 m! R n5 Q7 y. C' [: A通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
9 N0 A, Y4 g) L0 V, u+ \% ~属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
6 K3 O+ m p7 c! N; R; y属性变量的具体影响在此处分析略去。& _9 w. g* s3 S, Y- w
连续型变量的影响主要为:
& x* |# |% z; p! o, @. x- x 绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;' k( B! W7 @, }# h+ Z) ~
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
% J: h9 u! w7 [7 }/ C! j. S同时,原本为连续型变量的容积率经过离散化变为属性变量后:
T. R0 Z( ]9 f8 s' }( t. P 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;+ S0 P5 P# z' z: F* ~
容积率与环线之间存在着交互效应。% B- J1 T# P) n& x N" V+ @; ]
rm(list=ls()) #清空当前工作空间
& a d' t# ^0 N* r1 b% B. s* {$ gsetwd("D:/回归分析")2 [$ U3 I( g( B; ^/ y% s! J: [& x. l
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a4 A7 p- i# `& d& Q: S
View(a)4 c' X! j6 d$ k: W+ \8 O
attach(a)
T X9 V! o2 d( A' Tnames(a)2 W$ [* \' o& |! S. r
+ U$ c3 k4 ~1 J! ]- H
1 h& ~5 \ C* u8 [
##描述性统计
: U" ~& h+ x4 G; G, m
7 D) s! a L) z. n7 f: {/ ~) I. O/ U) M
#未做处理的响应变量分布情况+ C ^- R$ C/ i; U& y7 }# l
par(mfrow=c(1,1))
x6 `, ^6 R+ [1 K5 Z" ]hist(price)6 J8 Q& |7 y" U& @* B9 x8 w
summary(price) #查看响应变量的描述统计量" c$ }. c) Y1 o P$ i: E
#连续型变量描述性统计
- A! t: p+ e8 U0 w9 hwindows()5 }- \4 J( U' q2 H4 Y6 m
pairs(a[,c(6:10)]) #所有连续型变量间的散点图
5 G5 m8 \0 C3 o9 m# P. g- V+ N: Epar(mfrow=c(2,2))
8 h- l" B* N2 S9 a1 e; f/ V& w @! |plot(rong,price) #每个连续型因变量与响应变量间的散点图 {& Z6 @* I8 Z/ m% o1 Y+ S( Z
plot(lv,price)
. Z7 Z" f6 t8 B. |9 Y3 M1 J( lplot(area,price)5 E. f. B) k) F
plot(ratio,price)8 |1 g, R8 C8 m8 x0 Z7 a
summary(a[,c(6:10)]) #查看连续型变量的描述统计量. e; Y8 _. r9 i1 P
cor(a[,c(6:10)]) #查看连续型变量的相关系数
% j1 m6 k) F5 p% L% P#属性变量描述性统计6 \0 V; L8 c7 m$ ~& {- ~8 {$ C2 k0 U
windows()9 T; }' y6 I: q$ _! G- J
par(mfrow=c(2,3)) " X7 y7 W8 j" S9 {( K
boxplot(price~dis) #每个属性变量关于响应变量的箱型图; z! L: T1 C8 g0 N+ b5 e
boxplot(price~wuye) 8 p9 s/ Q) m! o% V- u8 Q, }
boxplot(price~fitment) 5 q2 K! @( k+ L5 X7 J
boxplot(price~ring) $ U# Q/ x/ @* R; V1 B! a
boxplot(price~contype)7 b+ h7 J- ?0 V5 T7 i
0 n' i2 ]: z0 j
8 m1 [7 S' Z. a1 P6 f
! ?6 B+ f. Y( ]' M6 F" |! X- z1 M/ x- W1 V2 C0 j" f
##模型建立
3 W/ X3 P( B5 U/ f5 D/ s3 ~9 c9 `
3 L s9 G# n9 \$ Z* [
#在方差分析模型基础上加入连续型变量
) g* K$ h5 O6 }; ?( slm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio), L6 V( u6 K/ j5 r l/ h6 }7 J- L
anova(lm1) #方差分析! ^( a: w0 J* I( q2 m
summary(lm1) #模型参数估计等详细结果# w. x0 R$ P2 O7 ~/ _0 x
windows()* W/ Q& x' i& Q$ B/ F% `% k
par(mfrow=c(2,2))
. T$ w( `3 f w3 aplot(lm1,which=c(1:4)) #回归诊断做残差图
0 z/ K8 r. u4 G5 z4 @
. a" o# T% ^+ ^. T- a
4 v& \, z) H1 a( E n4 b# T2 x1 i2 J% z# f/ r# R( X
0 Q6 X; K4 y' Q' H##变量处理& {) K, l* T' H) J' R
/ @- C" j9 {- |. P
$ T" ~% b! I& j6 b###对不显著的变量采用分组的方式希望能达到显著的效果
% r) t" O1 p! S% Z6 J* Z6 f) M##对容积率的处理
# R8 S: I% L; s9 Owindows()
; h) @6 v4 F1 G2 `1 O: d9 Fn = 4: {. w; h( C2 [' u
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 8 A7 B- ?* p6 c
table(ceiling(rong/n)) #容积率各分组下的样本数! ?. N3 \" q; f+ b
ronggrp=1*(rong>n) #进行二分类" U% y6 Z, s" N3 k, `, j4 D" ]
#ronggrp=ceiling(rong/n) $ l4 S+ E6 G, t% j; Y7 Z h: V# L
table(ceiling(ronggrp)) #容积率二分类下的样本数
+ Q9 |! A5 S& Z# H( xwindows()
0 l# m+ T/ {# I f5 ~" Uboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图- K& T: w7 G5 r
windows()
# f8 O% c+ g1 V; T3 k' ~par(mfrow=c(1,2))
7 j1 i$ c) C2 j+ ?/ Vboxplot(rong~ring) #容积率与环线箱型图: H) K9 t3 v$ B$ t/ n
boxplot(price~ring) #房价与环线箱型图 2 I0 _& D& W$ o5 v
#加入容积率分组和容积率分组*所在环线交互因子的模型 [4 Y* t z' c/ I# j M8 z! @
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)# A5 T2 d& t, q1 d6 L$ h0 X
anova(lm2) #方差分析
3 C% Z0 a6 G7 U- k0 Msummary(lm2) #模型参数估计等详细结果
) C8 a' z5 S: ~% d" u# E0 v [% Iwindows()
/ T# f9 i8 U h0 U% lpar(mfrow=c(2,2))
: u% ]. b P. b$ Gplot(lm1,which=c(1:4)) #回归诊断
4 H0 v" R, D, W3 }! I3 W7 u p+ C+ w# h! l1 O
7 j: n, R% N- R7 r# [##对小区面积的处理
$ s3 l5 r; L$ {summary(area)
! q! B* q u( [plot(area,price)
9 j; U" E3 Z: H9 L; xwindows()% W7 b E: t; x. l
n = 150000: ~( \6 Y, }3 c `6 H
boxplot(price~ceiling(area/n))
' a! m4 V; Q4 y$ M: o" R6 W: ltable(ceiling(area/n)) 6 _6 \. P$ X- G) b$ O7 \; S
areagrp=1*(area>n)
$ N# q- [, I' ?# ^table(ceiling(areagrp))& ~4 Z: | j1 f9 b' L' N
boxplot(price~ceiling(areagrp))8 @3 e$ l% [0 V) S+ H# k5 C- k! e. V4 {
#加入小区面积分组的模型
9 Z( d3 ~9 u' l- k# T' Clm3=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)- G4 U; O9 ^) Y1 x
anova(lm3) #方差分析
; i0 w+ |9 q1 h: m7 Jsummary(lm3) #模型参数估计等详细结果& n/ {6 y% i8 T4 Q5 H9 z* q
windows()
3 T( J! ^0 P7 I2 k* }par(mfrow=c(2,2))
. G6 a g+ z8 P3 r- \plot(lm3,which=c(1:4)) #回归诊断' q' M5 a9 R+ C5 g0 T, Y; }# ?
7 N6 j9 b) C- J# ]$ d# f/ O* |3 M1 o& C' F/ r
##变量选择! l+ Q1 `! p: [8 ]& R1 L' B! L( J
( Z l2 d' i$ s
2 n1 N& R" F, F& A2 {4 o8 s##AIC准则下的变量选择' \; x- e: [; M2 y, d9 M8 h
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
# k" K' Q/ b% ^! M2 `summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
" f+ B/ \& V* @% s##BIC准则下的变量选择0 U' [0 Y% V+ Z$ M5 Y! d
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
1 j D. ~8 D0 n# t Ksummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
% R3 J* v2 ~: ?& D0 U2 y+ Z6 V Z4 d" P: w- E4 |
0 `, d1 R' a9 D5 \3 g5 s#选用AIC准则下的模型进行回归诊断& K) F2 U+ _$ x* U+ B5 o2 g
windows()
, \! p( ]/ a! b6 h) ], S- xpar(mfrow=c(2,2))# T( e4 f7 @' g; j! R7 I2 S7 V
plot(lm4.aic,which=c(1:4)) 1 N: j, O; C; ^" {! Y$ C
& r% |" f! E) z/ v" }7 g- a
. R0 m+ `% |) M
/ U: ~- L* v6 H
: {% `. K& b) [7 z9 a##数据变换
8 O# _6 `. `: Y- f. B) l
8 x, X) O7 G8 ^
0 D' w* ?) y# N. }: l# x3 ]( N$ Q#box-cox变换
% s3 e! _; K5 _ Llibrary(MASS)
' o }2 t2 E/ n6 j5 D; B- Db=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))% a( | i( K) w" b. a- e& a
I=which(b$y==max(b$y)) #定位似然函数最大的位置* g$ Y7 b8 R1 R8 Z
lambda = b$x[I] #精确的λ值6 I: M" o+ |6 U" d5 E
#λ接近于0,为模型简洁性,可以直接进行对数变换
7 j, n, m4 r0 Z! p' k' Ilogprice <- log(price)+ C5 Y& d- g0 J) x
hist(logprice)9 m1 C! d3 Q U# t) Z& h
5 a2 i3 _; |! z8 \4 {0 P
! N+ M4 L* r9 q: N. m9 G
##最终模型与诊断) q( R' m' l: N- u7 ^2 ~$ l$ k
* l7 d! n7 J. M$ ~$ s* S9 w
- R/ {' t2 `9 k% N- B
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
8 R: ~5 Z( t/ T2 F0 E; @5 @, ewindows()4 y9 |' ]7 b. D; Y
par(mfrow=c(2,2))" Y; H/ Y0 y1 p2 M0 h* u3 {
plot(lm6,which=c(1:4)); h$ ^4 r, ^- X
anova(lm6)
6 ^' c/ R# L$ W: wsummary(lm6)9 Q/ T& b% s, H' [9 d& ?
4 r. ^' ^4 {; L0 j) A2 y
9 e) m* T# k! F; L请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
" |/ y5 t2 {, I1 U( Y1 q* s$ D2 G! d7 a$ W* Q
) }8 g& S0 }) X( R% G5 R [- Z- M4 I: Q
+ x' |( \0 l. x, ]
作者: fgfroom214 时间: 2021-10-27 16:32
一定会认真的看看,发现这是R的,有python的分析没有
- Q) @ |5 B* I& p% N5 i8 }2 i( H9 X a9 S5 h+ W, r. h
作者: sjlxdn 时间: 2021-10-27 19:55
111111111111111; f8 j6 |& W7 x9 h4 Q8 ]
作者: fgfroom214 时间: 2021-10-27 23:18
太好了,又认真的看了一次,发现自已差太多了
$ P0 |% o* E8 \4 r6 e/ V6 N0 [7 a5 v4 x
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 23:18
! e9 b; V# B! }( q0 {+ u
太好了,又认真的看了一次,发现自已差太多了
' I6 a4 m8 _+ p$ n! Z" ?7 v
我每天会发一些好资源的
% H1 g& ^1 _% `; h6 t: M: {
作者: 1047521767 时间: 2021-10-28 11:01
fgfroom214 发表于 2021-10-27 16:32 
$ Z, d: v+ p0 X9 X, n一定会认真的看看,发现这是R的,有python的分析没有
( S( O( o' Q$ p x: r7 `& ^有啊
$ z! S( r2 a. }2 q
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |