循环线性回归时出错

时间:2015-06-15 07:50:18

标签: r loops dataframe regression

我想运行一个循环,它将根据其中一个变量的每个类别运行,并根据每个回归产生一个预测,以便预测变量的总和将从目标变量中推导出来。这是我的玩具数据和代码:

df <- read.table(text = "target birds    wolfs     snakes
                     3        9         7 a
                     3        8         4 b
                     1        2         8 c
                     1        2         3 a
                     1        8         3 a
                     6        1         2 a
                     6        7         1 b
                     6        1         5 c
                     5        9         7 c
                     3        8         7 c
                     4        2         7 b
                     1        2         3 b
                     7        6         3 c
                     6        1         1 a
                     6        3         9 a
                     6        1         1 b ",header = TRUE)

我写了这个代码(下面),它的目的是得到上面写的计算结果,但我得到了一个错误:

以下是代码:

b <- list()
   for(i in c("a","b",'c')){
     lmModel <- lm(target ~ birds+wolfs, data = subset(df, snakes == i) )
     b[i] <- sum(predict(lmModel,newdata=subset(df, snakes == i)))  - sum(df$target[which(df$snakes=='a'),])

}
 b <- as.numeric(b)
 b

我收到了这个错误:

  Error in df$target[which(df$snakes == "a"), ] : 
  incorrect number of dimensions

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题来自于您在此处混合使用子集类型:// Update the orientation on the movie file output video connection before starting recording. [[[self movieFileOutput] connectionWithMediaType:AVMediaTypeVideo] setVideoOrientation:(AVCaptureVideoOrientation)[UIDevice currentDevice].orientation];

使用df$target[which(df$snakes=='a'),]后,输出不再是data.frame,并且两个参数$子集不再有效。最好将其压缩为:

[

至于你的模型,你可以创建一个sum(df[df$snakes=="a","target"]) [1] 23 作为协变量的模型,并使用其中的预测来对蛇群进行求和:

snakes

获取lm(target~birds+wolfs+snakes+0,df) Call: lm(formula = target ~ birds + wolfs + snakes + 0, data = df) Coefficients: birds wolfs snakesa snakesb snakesc -0.08593 -0.23461 5.15458 5.09446 6.25448 tapply(predict(lm(target~birds+wolfs+snakes+0,df)),df$snakes,sum) a b c 23 20 22 变量的最终输出

b

但请注意,a值存在小的数字差异。

或者,要检查,您可以通过tapply(predict(lm(target~birds+wolfs+snakes+0,df)),df$snakes,sum) - sum(df[df$snakes=="a","target"]) a b c 1.776357e-14 -3.000000e+00 -1.000000e+00 的参数指定数据子集:

lm