- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40352 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12817
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
" A6 k9 }! \# C/ S8 _3 z这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
1 A6 [7 N6 |# V1 W9 d这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: . x- V' l3 q f9 r2 g2 b" f
行描述性统计分析,各连续型变量之间的相关关系如下:. f% w8 }2 I2 E* j: z4 E
![]()
* L j k, v2 k1 V6 \名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 ; A' g3 B9 a$ E2 W- @, R' C* E
$ e; L% h# f# ~
![]()
! w ]9 a$ J! M$ K) J+ D3 ?2 \( M最终模型残差图:
" T5 o1 n8 w% V n) V. \) S$ U% B
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有: \( L$ Q, e+ T
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比
% J! c! C6 ^. Z+ n- F属性变量的具体影响在此处分析略去。
! P2 T4 i- q% h% Q: |! w3 B% d连续型变量的影响主要为:( R8 G2 t+ D) c8 T
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;
5 I. k7 R3 M* m% L: ]9 S 停车位住户比:有较显著的影响,停车位住户比越高,价格越高;3 W3 Y" P7 } h7 [9 |0 G. p2 c
同时,原本为连续型变量的容积率经过离散化变为属性变量后:
+ F! R1 l! m) M3 f; F2 ^0 {- e 容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;0 m7 M1 N$ e3 _& p$ g
容积率与环线之间存在着交互效应。
& H8 M; T; M, C8 q" K/ K7 orm(list=ls()) #清空当前工作空间9 j6 @! o" k; u8 a5 W1 y8 \
setwd("D:/回归分析"), G2 w3 L- j2 I* Q3 X' X
a=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a
1 ] m& y8 j4 u3 t, PView(a)
8 Z/ t7 s& L; g7 Kattach(a)
0 ~; q* y+ `* M" Y( N% g! h% \names(a)
7 A6 q9 w+ t5 _4 l- L+ v
W2 B9 o+ |0 `+ {4 i, I' n6 b5 O: }3 z% d
##描述性统计2 T- J4 u( q, K2 `3 d% u
4 t- a9 U( f3 `8 u& q$ x
# {- v; ]; x' v }#未做处理的响应变量分布情况8 v7 W; X0 E( D8 P8 T3 Y# x
par(mfrow=c(1,1))
7 s3 \3 P9 ?8 i# N5 Jhist(price)
6 b& l& D9 m2 `summary(price) #查看响应变量的描述统计量
, [% ^* g) {8 r r+ \- K#连续型变量描述性统计2 f0 J, v7 e2 g' ^7 _ K
windows()3 T, e5 \% @* l% o9 f
pairs(a[,c(6:10)]) #所有连续型变量间的散点图' i) G# P- A4 e" ]- j3 }! E8 a
par(mfrow=c(2,2))
3 O% k$ `, }9 C/ `' mplot(rong,price) #每个连续型因变量与响应变量间的散点图
[# J; S1 ^) Kplot(lv,price)1 I% a- n( N1 |0 s
plot(area,price)" J+ c. ?4 b8 [
plot(ratio,price)2 h3 {% B- m+ |5 h8 t
summary(a[,c(6:10)]) #查看连续型变量的描述统计量1 R* @ ^0 w' I( L* Z. K
cor(a[,c(6:10)]) #查看连续型变量的相关系数
h3 } w5 `" V0 Q+ C0 o: E#属性变量描述性统计- ?2 ]3 w% f _" R6 h3 w; E
windows()
$ J" d2 y2 B3 t; r. opar(mfrow=c(2,3))
$ }+ v; L# [/ O8 S, A* }8 Nboxplot(price~dis) #每个属性变量关于响应变量的箱型图9 h/ G8 R+ l) c6 g1 ^) Q
boxplot(price~wuye) ) t% E. s4 }3 z& H: y
boxplot(price~fitment) ! h2 ]9 P) t7 p9 S
boxplot(price~ring)
6 |- ^! r: I7 o# ^* e) y3 jboxplot(price~contype)
' H7 C, L/ N7 Y. P2 |( T9 w% e* o! y6 q- m7 |% W
$ v! o" l" ]. I% N' l l! E
4 \: [ `1 z; @' N) c! W" d
0 N1 e; \8 C" N- S4 d9 Z! X9 f4 [1 v) u4 b##模型建立
8 [' @3 m' D$ I5 J9 M5 E8 y" a3 @- W
* p Y0 K6 r( h1 R; T5 \' _ y
#在方差分析模型基础上加入连续型变量
9 R0 Q$ _( y9 Z# C9 Q; J1 F3 rlm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
3 c6 L" K' b+ h5 U4 d0 H$ oanova(lm1) #方差分析
- O0 K) |' I1 Lsummary(lm1) #模型参数估计等详细结果" S8 u: l7 @( L R" y# C
windows()9 h n% u+ e& w- q" K( b/ u
par(mfrow=c(2,2))2 U! w3 P6 U; H
plot(lm1,which=c(1:4)) #回归诊断做残差图2 I/ ^9 \9 Q* I# D& y
% n8 X) g" R8 |- H( s! r
# _ x- Y( ?8 D7 A; R. n. \' |" x* y6 V, X9 N
8 a' p: r. ^! R4 L##变量处理
! }" p2 k/ W) y( J$ N
, L7 L; @7 G C/ w7 Z. C" H7 w" R
3 I% @% R9 @2 W/ O0 L###对不显著的变量采用分组的方式希望能达到显著的效果+ P& {' i9 o5 ~' W3 r, [# C
##对容积率的处理
( ?$ @& ~+ F q+ d$ J. jwindows()
, r9 c- ~9 a0 c: K2 yn = 4
- q& S; o) T% R% D1 O mboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图
4 G7 ^: }+ ] @, C" f/ ftable(ceiling(rong/n)) #容积率各分组下的样本数9 Q# M9 C2 _ Y7 q) J
ronggrp=1*(rong>n) #进行二分类6 c/ {& P* p0 ?
#ronggrp=ceiling(rong/n) $ c0 z* d- Y! p: r
table(ceiling(ronggrp)) #容积率二分类下的样本数
$ G! H( L# E/ W4 Rwindows()
! m! ~- l3 h6 J' c" h) _# Wboxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
4 v& v. [- x9 x0 pwindows(). X" K$ {+ u `3 m& I" }* s
par(mfrow=c(1,2))2 B( j: s- a7 Z. h7 g; z: E
boxplot(rong~ring) #容积率与环线箱型图4 e, D$ d* f' k& b; N8 r; e
boxplot(price~ring) #房价与环线箱型图 5 o6 J8 `- c5 L
#加入容积率分组和容积率分组*所在环线交互因子的模型: C* r. y+ n3 M3 H# W6 J( x
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)2 s: z9 e6 u' Z2 H5 y9 w
anova(lm2) #方差分析8 n9 U. X! \/ h# U
summary(lm2) #模型参数估计等详细结果1 }8 c; X1 P2 A: F T w9 z+ ?
windows()% c7 K1 Z# T- m- |! {5 I O
par(mfrow=c(2,2))
t# K* @9 B7 h5 Oplot(lm1,which=c(1:4)) #回归诊断
. k4 B. |0 J; h8 x8 \5 G1 U C3 W& b! y0 O7 t
\0 e$ c2 m) q/ R2 m
##对小区面积的处理# o2 U+ b4 h9 R' H3 W1 N
summary(area)
& c+ s! _ Q4 T. q# Cplot(area,price)2 H4 s8 C* M4 c ~
windows()% W$ x1 C9 `7 _' a9 _3 Y
n = 150000
- A, h, D- E% I$ h/ w% v) Kboxplot(price~ceiling(area/n))
6 e' c0 w/ _, j& |) [+ { W5 Ttable(ceiling(area/n))
2 G \' Q0 h- U- }& hareagrp=1*(area>n)
; `$ R7 O8 t! V' a+ E/ g7 otable(ceiling(areagrp))
1 H# ?5 N7 Z+ @) Wboxplot(price~ceiling(areagrp))& K2 m5 T1 l8 L
#加入小区面积分组的模型
" I- S# L3 R" o- C- Dlm3=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)
' o% c" ]/ n, G. d7 V; p; F+ Wanova(lm3) #方差分析
' S1 J3 d7 o4 I" |7 H0 C* P- o8 vsummary(lm3) #模型参数估计等详细结果& d- Y0 i& \. `. C, y' ^2 F
windows()
! b8 u! K6 h* U6 Opar(mfrow=c(2,2))
2 ~5 {" M- q7 jplot(lm3,which=c(1:4)) #回归诊断: |, ^' f2 m3 X' C9 K' w
+ g- h7 @5 ^8 u4 S
0 [' x4 y. h/ H) [* l# e/ G##变量选择1 u* J+ c2 E2 ]) E- S" y
. ]; C4 t u5 D9 A1 C
" t8 m% m9 Q) Z. a; s##AIC准则下的变量选择/ w& t% `7 C. _8 d2 V3 Z& O
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic& r7 w! r: q* ?/ L4 i- ]
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节
' C, c1 H( J* E4 j5 O##BIC准则下的变量选择; I9 ?3 T, C4 a' }: D+ e
lm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
2 I2 Z2 v1 U3 @- z; T% s vsummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
: L* F+ ~; @ T4 c% Z/ }
2 y) W5 U! K- i
6 R0 |! K9 Q/ ?8 J#选用AIC准则下的模型进行回归诊断
. q& {, y0 a' x* z0 B% C6 o7 c- {windows()
3 b5 [- J1 P7 M" C r4 ~par(mfrow=c(2,2))$ z" [* A2 S6 Z8 t% J7 n+ P
plot(lm4.aic,which=c(1:4))
0 u+ A: s3 k, D, c& y% b9 [9 r, K+ z V/ {# |
; h* F' O1 _# b
/ ]6 Z8 B3 p6 }) K' b
5 s( x) t* O% Q$ o##数据变换( |9 v, W/ y% t, b6 }. J& Z0 ^' o
5 c2 a8 a/ L1 {
- O& S8 S) o3 w2 Z& P. Y#box-cox变换7 \; `% u4 D/ F. }; x1 f/ W
library(MASS)/ P* q$ d0 @8 K/ F D. E
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 B. i! @3 W6 c5 dI=which(b$y==max(b$y)) #定位似然函数最大的位置
9 _6 h/ b. O. Q. n8 V( h4 alambda = b$x[I] #精确的λ值
' ^ l4 j0 S3 V7 }9 @* j#λ接近于0,为模型简洁性,可以直接进行对数变换
! q, V+ f2 X* F, {6 K4 \logprice <- log(price)
3 i _/ B8 \& L" `% E" ~hist(logprice)
0 Z3 M* V8 {9 A/ s: o6 M3 F7 Q s \
9 t% v t0 V8 B# p4 x t7 w9 o& v2 q* v) e! l* s9 ?" U8 M
##最终模型与诊断
1 K Z9 g6 d& b3 S5 [1 A: g, U$ L# b6 e
2 Q6 e4 h; |9 [4 ]( wlm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)3 r6 s6 w! W" L: i4 v
windows()
. `2 C$ Q9 Y3 e f' j! P! vpar(mfrow=c(2,2))
& E5 Y/ ]9 P+ W- Rplot(lm6,which=c(1:4))
5 }7 N' N# T: j$ V! R3 uanova(lm6); a: m% G3 ?1 \6 i
summary(lm6)) R8 V! K7 j6 [2 ^" j( L- ]( ^
& S% g" g, J* E: l7 y* M0 m* f
, j( b$ r$ h# O+ P2 J; \7 W# `请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
3 r5 v, _9 G/ T3 Q) Q8 l+ ~4 ~- }' P6 B% F( q7 ~6 N
+ P& }& X. B$ v4 L$ k7 D) G
. V. D- \: ~5 a# U( N b/ m5 c; M5 }/ s$ k- q5 `) f
|
zan
|