- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40345 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12815
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
【R语言】回归分析案例:北京市商品房价格影响因素分析
\1 a3 \% N, g/ [这一案例是王汉生老师《应用商务统计分析》方差分析章节的案例,主要对离散型变量进行了处理。
: G+ j Q8 u5 z3 ~1 k这里将连续型变量也加进来,进行协方差分析,建立完整的模型。 首先对房价进行对数变换,解决异方差问题: ![]()
- R3 P; |6 X o, x+ v行描述性统计分析,各连续型变量之间的相关关系如下:) W& M. B* m" W
" P k" L5 {9 i( z. r" o
名义变量的EDA一般做箱型图。 模型按照全模型-变量处理(分箱等)-变量选择-回归诊断等步骤建立。 + w6 t$ P9 ~& B; E }5 H0 [
![]()
% W1 K5 v" B) j- q) U0 S* g3 | ( k2 g+ u) f1 ]6 h7 D- J& E
最终模型残差图:
' ~, h f$ Z7 C ?5 k: w# x$ ^0 U 2 E' f% B( T' y4 e) C
通过模型分析结果可知,影响北京市商品房平均销售价格的主要因素有:0 V2 x8 S W4 H
属性变量:所在辖区、所在环线、物业类别、装修状况、容积率大小(新引入);连续变量:绿化率、停车位住户比/ G! i! H' k& Z! D4 M& _
属性变量的具体影响在此处分析略去。, X4 i) q5 E* k# j
连续型变量的影响主要为:" O6 \: P; R/ r8 F
绿化率:绿化率的影响十分显著,由系数估计值为正,说明对房价有正向影响,绿化率越高的楼盘房价越高;* N+ m0 w' U0 |/ T- e; k0 R
停车位住户比:有较显著的影响,停车位住户比越高,价格越高;
7 `# W6 ?4 }1 h4 L( n8 l0 g同时,原本为连续型变量的容积率经过离散化变为属性变量后:- f+ C2 e- n( U2 k6 f2 s! r& ~( J
容积率大小:容积率分组有较显著的影响,高容积率的小区商品房价格更贵;# a- r* {9 T# o
容积率与环线之间存在着交互效应。6 F; ]5 M- w3 ]
rm(list=ls()) #清空当前工作空间) \5 s% j5 y4 z, T/ z
setwd("D:/回归分析")
! a0 q2 Q! d0 ua=read.csv("real.csv",header=T) #读入csv格式的数据,赋值为a) I& k6 e3 j# d. g6 u
View(a)5 l# f* g3 y3 ~; a6 W
attach(a)
' u4 d9 g2 X4 W1 X! F+ d- Q" Anames(a)2 \6 M* N5 W& Y6 D! C! W
. e4 y% \3 m! N4 _
/ A$ |( B! u! E# @& Y
##描述性统计
* Z% t/ x: }$ ?& K. T. @0 d
/ r* a+ F( n0 S7 F4 o, K2 j
) g; M+ T5 U6 V( l- j#未做处理的响应变量分布情况3 I2 S7 a8 O5 i
par(mfrow=c(1,1))
1 _& O ]% `& M, Khist(price)
1 y% v( g& N3 j( A3 Nsummary(price) #查看响应变量的描述统计量3 k, d& X# r+ S/ s4 A. S
#连续型变量描述性统计2 ^& T; u) L" Q& H/ b- G
windows()
_' O% C1 v$ B+ n' o3 D1 _pairs(a[,c(6:10)]) #所有连续型变量间的散点图1 N7 p+ Z7 C! e+ p
par(mfrow=c(2,2))
4 @: e7 r1 s/ `plot(rong,price) #每个连续型因变量与响应变量间的散点图* j1 k9 \; s! v4 y7 t/ N
plot(lv,price)- }' H) c2 v+ ^. l0 V" U
plot(area,price)
) D$ s* I( I# [" A/ `* q% [6 B9 pplot(ratio,price)
2 a3 N' d# a: I$ n! R2 W$ z1 L3 T7 ksummary(a[,c(6:10)]) #查看连续型变量的描述统计量
/ S( h: |& y8 N1 i7 ?cor(a[,c(6:10)]) #查看连续型变量的相关系数: ~. U, a( Y7 j3 X, k8 ~: v9 w4 [
#属性变量描述性统计
2 x$ X o- b3 P) J, l/ O* Ywindows()6 F3 L: K w: ^3 L& l
par(mfrow=c(2,3)) 2 z3 Y+ _9 E3 ~
boxplot(price~dis) #每个属性变量关于响应变量的箱型图
4 }+ I. j9 _+ W6 E$ sboxplot(price~wuye)
" {( \3 N, T; Y/ y) g8 p cboxplot(price~fitment)
# `$ w' P* |, ?6 |6 L. y! tboxplot(price~ring)
* c: J' s$ t1 O" A4 W& s3 s: Z8 i7 Xboxplot(price~contype)
& r; t, f. \. w) ^8 N4 Q, s8 U1 n i+ W1 }6 f4 `- c* W
# K. H6 J" q8 M$ ?( L
) O2 {$ ~$ q4 J; ~7 |* K, d
- d1 ^; p m& y- d, Q; }; {: [& [##模型建立8 ]( W% Z" x$ n
# B$ G. U5 f% H. V4 |
) a" k( [. E2 j( A' Z Y- x/ K
#在方差分析模型基础上加入连续型变量3 k6 _, S) n3 r: g/ j1 Z
lm1=lm(price~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(contype)+rong+lv+area+ratio)
6 n" J* K: e4 l( o5 W, u# a. e- D. R- Manova(lm1) #方差分析) o" d6 l( j' \' U [& T
summary(lm1) #模型参数估计等详细结果
# S0 \5 f# Z6 l! @8 B% z1 ~% \" vwindows()" p( `! N; ^9 ^0 G
par(mfrow=c(2,2))! n! d* e$ p' }0 x
plot(lm1,which=c(1:4)) #回归诊断做残差图, t+ C7 F( m* z) S2 i- a2 z
o9 ~- a" k, U0 {% A! z: T& j: x. g2 B* k6 U+ ~
c A9 O, K3 ?( M% z9 L5 o1 p' m* {8 \% K
##变量处理
; M z- `3 k! J) q+ j I6 W* T D
; I9 ^* ]+ D9 Z; p# E: Y###对不显著的变量采用分组的方式希望能达到显著的效果
8 `$ M! \6 U% _$ k7 X8 I4 w; z) }##对容积率的处理
3 `) c' ~1 j r4 x: a. h' {windows()- p5 W( Z: Q6 J- ] E
n = 4
- X( n3 T4 R4 t1 Zboxplot(price~ceiling(rong/n)) #容积率多分组下的箱型图 / d( ^/ n/ B: t6 e
table(ceiling(rong/n)) #容积率各分组下的样本数: i5 d$ ~8 S9 K% u# e R! O' Z
ronggrp=1*(rong>n) #进行二分类
# ~) h) k% J; M3 m% e#ronggrp=ceiling(rong/n) 7 K3 n) K0 N0 ~8 Y* o- N
table(ceiling(ronggrp)) #容积率二分类下的样本数
$ y _4 n& j- |1 s; ewindows()+ v3 I" L( c' @; {, u1 K
boxplot(price~ceiling(ronggrp)) #容积率二分类下的房价箱型图
( J8 H4 c" f! O* }windows()
# q5 f+ N( C' R4 G( p' y& [1 lpar(mfrow=c(1,2))
% U0 u- e& A- j1 K/ E& @boxplot(rong~ring) #容积率与环线箱型图2 J' n5 H, m+ Y. l/ A g6 o5 C
boxplot(price~ring) #房价与环线箱型图 ( G/ A% P7 l9 @7 D. R5 j
#加入容积率分组和容积率分组*所在环线交互因子的模型
. T$ j; `' l: Wlm2=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) Z8 m4 y9 q/ o
anova(lm2) #方差分析
) U) D/ x# w$ `% ~3 [: h6 V9 p+ W) T: nsummary(lm2) #模型参数估计等详细结果
" s5 _2 \/ H& S" `8 kwindows()
' D2 A0 z$ H" L6 Wpar(mfrow=c(2,2))* `4 d* Y9 u" y! w- |
plot(lm1,which=c(1:4)) #回归诊断
W+ l' A# E$ \* F+ \' i2 k/ |; F) R! _& d* \
2 `' {4 s9 h) E. |+ F/ X$ R##对小区面积的处理
% r) J$ B8 L b) x1 u3 lsummary(area)
- e6 o% ^& r! O. c0 Z oplot(area,price); `/ x8 i. I; ?, r6 b+ @* |7 A( k% O
windows()
7 s2 R& m6 `4 t# B' r% ln = 1500008 Z5 A0 v2 o" @. _
boxplot(price~ceiling(area/n))
+ o) m/ c- ~. Q& M+ v1 }table(ceiling(area/n)) % d4 S# D2 y; a6 s
areagrp=1*(area>n)2 d2 j" K5 c, n( y& A
table(ceiling(areagrp)): \+ l6 m" i m8 A1 |! s
boxplot(price~ceiling(areagrp))
3 ^1 T; n7 o: G. Z) r% k) ^' I#加入小区面积分组的模型/ t! C) h, u$ H$ Q$ j
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)0 s0 |! {) Q; [1 t1 s- S- x
anova(lm3) #方差分析3 t! O# h4 s% a' `- D e
summary(lm3) #模型参数估计等详细结果
$ t% d3 g0 q5 o4 w! xwindows(): L/ s u3 W, B2 c
par(mfrow=c(2,2))) h/ s; X5 _8 G g! l
plot(lm3,which=c(1:4)) #回归诊断+ K$ j& G+ K! h. \$ r
' h3 C% p8 x4 h/ Z' m+ Q
5 X( u# M+ F0 M. R$ E, k9 [##变量选择
" Y) ]2 {4 M6 r9 o" d# N2 m
! h7 D G) U. ]! ^
/ k- u( c! S3 a, ~##AIC准则下的变量选择) H# x/ O7 j2 u. r7 I
lm4.aic=step(lm3,trace=F) #根据AIC准则选出最优模型,并赋值给lm.aic6 V: [4 m! |6 |* y7 p
summary(lm4.aic) #给出模型lm.aic中系数估计值、P值等细节9 j2 s' r' v1 Z! ~6 z+ [; [: A
##BIC准则下的变量选择
+ |, Y' n# W% [: Jlm5.bic=step(lm3,k=log(length(a[,1])),trace=F) #根据BIC准则选出最优模型,并赋值给lm.bic
$ D4 s/ V; f& }* r. K+ Usummary(lm5.bic) #给出模型lm.bic中系数估计值、P值等细节
: D9 D# I0 V# D' N) v
6 M5 X$ F, D6 v$ U) j' W+ w/ f$ j }. U* f
#选用AIC准则下的模型进行回归诊断
* i! r8 G$ K7 M8 H0 K1 y$ `windows()5 t: I N' U) r1 K# h
par(mfrow=c(2,2))
$ a( t4 n6 u! g/ `# A5 Qplot(lm4.aic,which=c(1:4))
6 E3 m% y& c6 Z( K8 f0 @" Z' z3 e2 U$ ]' A/ |: F
: e. M4 L( C/ P2 o& D; U
5 V% {3 `" ^- t- R/ E- s! K( T+ }3 U; _9 ^- ^0 t
##数据变换6 b( s/ U' G5 m1 b7 P7 e
/ ?" o& @9 @8 u8 H) L# x$ |
* D; N$ e. \& E; @; X5 ] y/ y#box-cox变换$ l. t( ~9 E9 C/ b$ \% E
library(MASS)$ @& ~9 ~3 |* f9 ?
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))* l1 V0 N0 w$ g A
I=which(b$y==max(b$y)) #定位似然函数最大的位置
5 D* C( |* B& v3 Rlambda = b$x[I] #精确的λ值# S# u& w! N5 I
#λ接近于0,为模型简洁性,可以直接进行对数变换
( I3 N6 ]2 L4 w8 o& wlogprice <- log(price)$ @6 ^5 y7 m( _6 G' l* w6 f
hist(logprice)
, Y# g" N4 M0 f+ |% h; A
/ N) z3 Y' r/ B v `6 A: g3 `5 O7 q% t
##最终模型与诊断
$ l$ y& {, z, K0 q
2 T2 X) H! ?, p5 L7 F2 C' x# l3 ?7 v; u" _) w, M( F& L K4 i
lm6=lm(logprice ~as.factor(dis)*as.factor(ring)+as.factor(wuye)+as.factor(fitment)+as.factor(ring)*as.factor(ronggrp)+lv+ratio)
' P3 r& d {* r |% ]) v# k2 kwindows()
/ y6 \8 U7 u5 Q0 j e7 [par(mfrow=c(2,2))/ ?$ a, n8 t" z7 x) [3 I
plot(lm6,which=c(1:4))
- L* s( }6 X: O& `: ?7 Fanova(lm6)1 @! w" g8 l! m" M z
summary(lm6)
' X' n4 `) i# I# l c0 H- s
% t. J" x, S1 x) O: M8 }7 O- f6 O/ A% h! j) v2 ]
请关注数学中国网微博和数学中国公众号,联系QQ 3243710560
+ r3 W$ w' e0 s- L M1 M1 | c( [# `/ Q( T+ T2 i: m3 y
5 g- m) U/ ^7 \) L+ F8 K
4 ^1 j' V5 h8 i, `: v
, G- X2 {" P. m" ]" ~% O |
zan
|