楼主: tmdxyz
3663 2

[程序分享] 请教boxcox回归时 expr did not evaluate to an object of length n [推广有奖]

  • 9关注
  • 95粉丝

已卖:3143份资源

院士

87%

还不是VIP/贵宾

-

威望
1
论坛币
164611 个
通用积分
179.1740
学术水平
256 点
热心指数
332 点
信用等级
224 点
经验
11291 点
帖子
4768
精华
0
在线时间
4133 小时
注册时间
2008-1-10
最后登录
2025-12-30

楼主
tmdxyz 发表于 2017-6-12 20:57:09 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
进行boxcox回归时,开始一切正常。直到画转换后的回归图时提示出错

dat<-read.csv("e:/p078.csv")
#View(dat)
lm.sol<-lm(y~x,data=dat)
summary(lm.sol)

library(MASS)
op<-par(mfrow=c(2,2),mar=.4+c(4,4,1,1),oma=c(0,0,2,0))

plot(fitted(lm.sol),resid(lm.sol),cex=1.2,pch=21,col='red',bg='orange',xlab='fitted value',ylab='residuals')#第一张图,预测值与残差散点图

boxcox(lm.sol,lambda=seq(0,1,len=10))#第二张图,确定lambda
lambda=0.55
ylam<-(dat$y^lambda-1)/lambda
lm.lam<-lm(ylam~dat$x)
summary(lm.lam)

plot(fitted(lm.lam),resid(lm.lam),cex=1.2,pch=21,col='red',bg='orange',xlab='fitted value',ylab='residuals')#第三张图,预测值与变换后进行回归的残差之间的散点图

beta0<-lm.lam$coefficients[1]
beta1<-lm.lam$coefficients[2]

curve((1+lambda*(beta0+beta1*dat$x))^(1/lambda),from=min(dat$x),to=max(dat$x),col='blue',lwd=2,xlab='x',ylab='y')#第四张图,回归曲线和相应是散点

就是这一步发生错误,说“expr did not evaluate to an object of length n

points(dat$x,dat$y,cex=1.2,pch=21,col='red',bg='orange')
mtext('box-cox transfoemation',outer=TRUE,cex=1.5)
par(op)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:evaluate length boxcox object leng

p078.rar
下载链接: https://bbs.pinggu.org/a-2270034.html

372 Bytes

本附件包括:

  • p078.csv

code.rar

651 Bytes

本附件包括:

  • code.txt

回帖推荐

cheetahfly 发表于2楼  查看完整内容

改成: curve((1 + lambda * (beta0 + beta1 * x)) ^ (1 / lambda), from = min(dat$x), to = max(dat$x), col = 'blue', lwd = 2, xlab = 'x', ylab = 'y') 即可。 curve函数中的第一个参数是个表达式,一般要求含有"x"字符,而不是具体的数据,因此把"dat$x"改成"x"就可以了。

沙发
cheetahfly 在职认证  发表于 2017-6-13 13:29:41
改成:
curve((1 + lambda * (beta0 + beta1 * x)) ^ (1 / lambda), from = min(dat$x), to = max(dat$x), col = 'blue', lwd = 2, xlab = 'x', ylab = 'y')
即可。
curve函数中的第一个参数是个表达式,一般要求含有"x"字符,而不是具体的数据,因此把"dat$x"改成"x"就可以了。

藤椅
tmdxyz 发表于 2017-6-13 13:45:50
cheetahfly 发表于 2017-6-13 13:29
改成:
curve((1 + lambda * (beta0 + beta1 * x)) ^ (1 / lambda), from = min(dat$x), to = max(dat$x), ...
谢谢您。

这是我昨天刚看到的我们图书馆的最近新书:多元统计分析_从数据到结论_韩明2016,p76-81,中的内容。我看到其中的boxcox,觉得好玩,就拿来试了试。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 09:58