Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我使用矩阵变量拟合和预测模型时,predic.lm给出了错误的预测值数量_R_Regression_Linear Regression_Prediction_Lm - Fatal编程技术网

当我使用矩阵变量拟合和预测模型时,predic.lm给出了错误的预测值数量

当我使用矩阵变量拟合和预测模型时,predic.lm给出了错误的预测值数量,r,regression,linear-regression,prediction,lm,R,Regression,Linear Regression,Prediction,Lm,在过去,我将lm函数与matrix-type数据和data.frame-type一起使用。但是我想这是我第一次尝试使用predict使用一个没有data.frame的模型。我不知道该怎么做 我读了一些其他的问题(比如),我很确定我的问题与我在拟合模型后得到的系数名称有关。由于某些原因,系数名称是矩阵名称与列名的粘贴。。。我还没找到解决办法 library(tidyverse) library(MASS) set.seed(1) label <- sample(c(T,F), nrow(B

在过去,我将
lm
函数与
matrix
-type数据和
data.frame
-type一起使用。但是我想这是我第一次尝试使用
predict
使用一个没有
data.frame的模型。我不知道该怎么做

我读了一些其他的问题(比如),我很确定我的问题与我在拟合模型后得到的系数名称有关。由于某些原因,系数名称是矩阵名称与列名的粘贴。。。我还没找到解决办法

library(tidyverse)
library(MASS)

set.seed(1)
label <- sample(c(T,F), nrow(Boston), replace = T, prob = c(.6,.4))

x.train <- Boston %>% dplyr::filter(., label) %>%
  dplyr::select(-medv) %>% as.matrix()
y.train <- Boston %>% dplyr::filter(., label) %>%
  dplyr::select(medv) %>% as.matrix()
x.test <- Boston %>% dplyr::filter(., !label) %>%
  dplyr::select(-medv) %>% as.matrix()
y.test <- Boston %>% dplyr::filter(., !label) %>%
  dplyr::select(medv) %>% as.matrix()

fit_lm <- lm(y.train ~ x.train)
fit_lm2 <- lm(medv ~ ., data = Boston, subset = label)
predict(object = fit_lm, newdata = x.test %>% as.data.frame()) %>% length() 
predict(object = fit_lm2, newdata = x.test %>% as.data.frame()) %>% length()
# they get different numbers of predicted data
# the first one gets a number a results consistent with x.train
库(tidyverse)
图书馆(弥撒)
种子(1)
标签%
dplyr::选择(-medv)%>%as.matrix()
y、 序列%dplyr::过滤器(,标签)%%>%
dplyr::选择(medv)%>%as.matrix()
x、 测试%dplyr::筛选器(,!label)%%>%
dplyr::选择(-medv)%>%as.matrix()
y、 测试%dplyr::筛选器(,!label)%%>%
dplyr::选择(medv)%>%as.matrix()
配合长度百分比()
预测(object=fit_lm2,newdata=x.test%>%as.data.frame())%%>%length()
#他们得到不同数量的预测数据
#第一个得到一个与x一致的数字a结果

欢迎提供任何帮助。

我无法修复您的
tidyverse
代码,因为我不使用此软件包。但是我能够解释为什么
predict
在第一种情况下失败

让我使用内置数据集
进行演示:

head(trees, 2)
#  Girth Height Volume
#1   8.3     70   10.3
#2   8.6     65   10.3
使用
lm
的正常方法是

fit <- lm(Girth ~ ., trees)
使用
predict
时,需要在
newdata
中提供这些变量

predict(fit, newdata = data.frame(Height = 1, Volume = 2))
#       1 
#11.16125 
现在,如果使用矩阵拟合模型:

X <- as.matrix(trees[2:3])
y <- trees[[1]]
fit2 <- lm(y ~ X)
attr(terms(fit2), "term.labels")
#[1] "X"
cbind(1,2)
没有列名并不重要。重要的是,该矩阵在
newdat
中命名为
X

X <- as.matrix(trees[2:3])
y <- trees[[1]]
fit2 <- lm(y ~ X)
attr(terms(fit2), "term.labels")
#[1] "X"
newdat <- data.frame(X = I(cbind(1, 2)))
str(newdat)
#'data.frame':  1 obs. of  1 variable:
# $ X: AsIs [1, 1:2] 1 2

predict(fit2, newdat)
#       1 
#11.16125