- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40293 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12799
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析! m: [3 p0 _1 M$ m; D
这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
& M8 k+ c v4 o0 }+ `这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
. E* e+ b8 D% e. ^行描述性统计分析,各连续型变量之间的相关关系如下:4 O( G( K4 }6 t4 x5 F
/ ]( Q$ b* w% s$ V* V
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ) n: k) @$ e' v% M' \
- G! i6 }/ j4 K* L
![]()
0 {9 q V* V. O6 n, `/ l( K0 P最终模型残差图:) p% {7 D t0 z& E/ G0 s
3 U# t, w5 z$ x$ R& G- W1 D
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:
- f- l' F u0 U1 J7 k7 O属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
, Y2 K0 g9 g' s! u$ n. k4 N' C属性变量的具体影响在此处分析略去。
9 j* |0 K3 t, j3 I0 l9 R连续型变量的影响主要为:, @4 V3 L- a9 L s( }. }5 B
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
4 Y! x, u; A1 B1 f& Q5 K; q1 H 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
, C: W% O/ \8 e同时,原本为连续型变量的容积率经过离散化变为属性变量后:
) I, D. n4 @. h0 ?% I/ N 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;3 z3 N9 Q4 [9 I# y
容积率与环线之间存在着交互效应。$ `2 M8 C( r% x( x
rm(list=ls()) #清空当前工作空间' `% I6 T. a0 Q# V: F! l/ e$ ~9 }
setwd("D:/回归分析")4 t" M2 V+ _" M2 ~# h) E
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a9 X. V* B9 b/ @5 `* G
View(a)
+ ?% l* @# V' i: B* ~' N% lattach(a)
3 g2 j) d) N% mnames(a)( W% w, p! _3 f* R" S
? A7 ]. J+ i1 Y C/ z
/ S( U& O [; o; E/ [##描述性统计; y* Q) E9 _! B" u& p
2 ?2 w; a0 S9 U: k4 [, R6 z% h3 Z' V; w# K2 g2 N9 E/ M7 |
#未做处理的响应变量分布情况; j& B2 O4 |/ d
par(mfrow=c(1,1))
; t3 w+ q& J5 Ahist(price)
( j7 j( }+ \4 R3 o9 D/ \: ]/ o r' U" gsummary(price) #查看响应变量的描述统计量0 w' J5 S2 L3 j m* W
#连续型变量描述性统计+ R f' C d) F& _) {
windows()
/ p# A: s4 C9 x) D- U) T# |pairs(a[,c(6:10)]) #所有连续型变量间的散点图: u% J! |7 ~; h5 x( z
par(mfrow=c(2,2)) 0 z9 q% W, g% M. Y, x
plot(rong,price) #每个连续型因变量与响应变量间的散点图
# A9 p/ g( [$ {; S/ _, j# {! H6 K4 Oplot(lv,price)% ~; |% d+ y& A5 k5 n1 r
plot(area,price)
: W% h& [; a/ |+ l* L: iplot(ratio,price)' {' I( E `! s9 O/ F/ m
summary(a[,c(6:10)]) #查看连续型变量的描述统计量
+ L$ J4 R. }9 s y5 l+ dcor(a[,c(6:10)]) #查看连续型变量的相关系数
n/ p4 ~* `7 Z) \#属性变量描述性统计
# T$ R8 |; ?8 Y: Q* J5 ^ ]windows()
! e# a# ], i9 ~: Lpar(mfrow=c(2,3)) 9 x1 Y! n1 g! V) `6 M# `" a
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
" j) c8 y! I8 j) ?6 j7 X+ b% l" eboxplot(price~wuye)
0 t- Q: ?' h; b- V+ o: cboxplot(price~fitment)
. D& z! H! Q" R( \- D; W8 W Oboxplot(price~ring)
: `( t2 q1 f- B& D& K) g/ b# y( vboxplot(price~contype) Q4 K9 P& E; |7 y+ a) S" M
& _* `! Y5 a4 v l
- s( } I9 A7 H2 _- R8 _8 L! y% Y; @) s/ ?8 T' i, a
: r' `, ~( [1 F) j) x# `* E+ t##模型建立
+ f$ D9 H+ g5 [/ U3 C( O% b! J( ~" ^( ]
' X! R2 A6 N" p& E0 n; O. S
#在方差分析模型基础上加入连续型变量! @1 y) y1 ]( d: l
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
% Y% Y' `. i6 b5 K) T+ x8 eanova(lm1) #方差分析
1 Q, p3 R- G; \8 u1 v, }7 Zsummary(lm1) #模型参数估计等详细结果% G( a1 U: d1 [; C
windows(). b1 n3 _! b% _
par(mfrow=c(2,2))& m( G/ ?. X! E1 n3 {
plot(lm1,which=c(1:4)) #回归诊断做残差图 K! M+ {' A& T/ J6 [% m
0 Q$ }7 X4 m6 e0 O+ w
. t# ?& v- U9 z3 `6 g# _
% c3 ~1 s$ w* m6 R/ t$ u5 N. ~0 P
* q6 N; w. Q% I; Q/ B4 a##变量处理
: `# A6 B% S/ `; J' \; \+ k' f! a
- }1 {6 D6 h. f###对不显著的变量采用分组的方式希望能达到显著的效果9 G5 Y$ C1 U8 z( H
##对容积率的处理. F; V* b5 |6 j5 d
windows()) R/ Q" i& `% v
n = 40 M; K5 e& {* k$ K# x. M, H' V
boxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
, J) g# m+ M) ^2 T/ N# _9 ntable(ceiling(rong/n)) #容积率各分组下的样本数
* ]7 i2 }8 @3 Y. Dronggrp=1*(rong>n) #进行二分类: q. v! A! P$ {6 b
#ronggrp=ceiling(rong/n) ! n% l/ k& ~5 N, a; t
table(ceiling(ronggrp)) #容积率二分类下的样本数
/ e6 R- S% E# q& w; h s# q( r, swindows()
L# k* u U* w+ g/ x0 jboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
4 k( C- D5 g5 p% {, M* Rwindows()& i6 }/ n% M. c3 o% G# B
par(mfrow=c(1,2))
! E# U/ ?& X( G) M7 hboxplot(rong~ring) #容积率与环线箱型图- O0 l% n! b+ {5 z( L
boxplot(price~ring) #房价与环线箱型图
) D5 x) v" C& m9 Z#加入容积率分组和容积率分组*所在环线交互因子的模型
( |' ?; @8 n, F) o1 ]5 Blm2=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)
0 `1 |9 y8 B5 ?; W. G! Danova(lm2) #方差分析, [6 M, g4 Y! X
summary(lm2) #模型参数估计等详细结果
# ] D9 h, i- |6 N9 Zwindows()7 Q$ o! e; D- w. n8 X
par(mfrow=c(2,2))* o" B2 _0 q- M; Y' [/ ^
plot(lm1,which=c(1:4)) #回归诊断/ C/ |) C! V% G5 ]3 O$ @
2 h$ h& X3 |& q) V& s: H$ n2 h5 h1 ]
3 E7 T% X$ Y2 h8 m##对小区面积的处理1 u; i% U) C, B4 u
summary(area)
/ A* f5 F( @& N6 ~) eplot(area,price)
. n! E, e4 E6 Gwindows()
' S. r. `: |% O8 i' S, t! wn = 150000# W9 {# x# V" P9 E* Z8 Q
boxplot(price~ceiling(area/n))
1 o- I! C7 O: J- ~6 n% Vtable(ceiling(area/n))
1 \# F3 j' K" _5 V# `2 Qareagrp=1*(area>n): v8 a. ~8 C( A0 `3 S7 s
table(ceiling(areagrp))
7 j5 `( V& ~3 [: k3 ?, w! aboxplot(price~ceiling(areagrp))/ A. K9 @0 _8 Z1 g. T/ s9 \. C
#加入小区面积分组的模型' ]2 y) t; {# \ g" K8 L% ^
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) g/ W) N, `" E6 `5 V" l
anova(lm3) #方差分析
0 Q6 _7 p) e1 Y# isummary(lm3) #模型参数估计等详细结果# u% `) V6 k7 e
windows()
5 T/ W, w" V7 I' v& ppar(mfrow=c(2,2))
+ D3 b( s. q; J+ d3 v. p) dplot(lm3,which=c(1:4)) #回归诊断
1 n/ k5 c9 g$ m. Y2 X0 F) R" q# S( H3 s
0 E2 S$ M& C; o' ^& [
##变量选择0 ^- o, E3 Y% C: {" T4 ]9 V! V
# \4 _; I* D/ @9 x- J) K$ G7 |, q
* _& Z* _$ I- a6 M9 {6 O- Q5 V##AIC准则下的变量选择7 m5 i: S; f8 f8 p
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic
6 n: w: ?8 [) ~! C& g0 k+ Ssummary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
) g; X+ V1 i- J! w# t' R; }! Q##BIC准则下的变量选择
6 g! u4 o; ?# D4 U% B! }; Klm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic* R4 m0 i& A; ]( g8 a" P
summary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
7 S0 V( w# U' E+ f% u: o3 f" K- r/ U
- x2 I; @, H; d) I Y
#选用AIC准则下的模型进行回归诊断" J' c0 ]7 V k' E
windows()
" J# _; v- b, v' Y E7 y7 opar(mfrow=c(2,2))7 e3 z0 }, F7 _1 [
plot(lm4.aic,which=c(1:4))
1 l: x0 v: S0 y+ ^* _% T W# t& ^/ |$ F! D% j
' u, v) B$ C/ I; e- h5 a6 f3 i. b$ j+ Z; W. d( B/ U
7 {& r( N1 ~6 N+ r0 E `7 m2 b- v" o##数据变换 ] A: y( ~- d( T
& W- G$ P* `& R5 }& X7 h, y
) Z5 U/ C4 F4 \$ c$ g) i/ }# i
#box-cox变换0 e3 S1 t8 U! c6 {5 G& L1 Z/ m
library(MASS)1 ^0 i- P# Z* g; C3 }+ m/ K1 i
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))
" U; R- L+ }2 W! J8 fI=which(b$y==max(b$y)) #定位似然函数最大的位置- L- i" u0 D- u# C* z
lambda = b$x[I] #精确的λ值' A4 s8 _$ N3 [6 V6 Y2 ?& E& S1 ^
#λ接近于0,为模型简洁性,可以直接进行对数变换
$ r( R$ r8 a9 ]1 _0 D2 Nlogprice <- log(price)% ` b2 y1 P0 ^+ U# T2 x
hist(logprice)
' i E$ {& _7 N! s& ^* O
* t2 p" ]) p& T& |( V
; K @2 W- e- Y1 w/ L) ?3 h4 u' J##最终模型与诊断
, z' f' J9 I& r
4 u5 g' P6 W0 l" \, w- K! ~6 \
- o* C% V4 Y1 k, `* u# t4 s' alm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)& Q# B0 Y4 s0 F, b- M. T- o
windows()
! y7 q( F* l$ ~* T' J. Xpar(mfrow=c(2,2))
8 w+ }, Y: b. }, s W- |7 w& D( Qplot(lm6,which=c(1:4))
3 s! g- ]! i( `/ ~! P8 fanova(lm6)
( A$ E3 `& ]% \+ S2 i$ gsummary(lm6). U" L: X7 c% ~8 q. Q7 u
5 T. y! P2 T' r2 w$ A4 @
( Q- I9 {; P4 k5 q请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
~' W% }$ y0 S. J
7 u' q5 J# R; F$ Y G L5 L, K- A1 m( \- j- b; k5 d! \ L
$ I6 _, X* S: |: y& H5 b
$ t0 W* E d H3 Z9 _% J- ~# ~8 w |
zan
|