我正在尝试使用启动包中的函数cv.glm()来验证线性模型。 首先我运行模型,它工作正常:
> linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
然后,我想进行验证:
cv.glm(red_wine_data,linear_model_red)
这就是错误:
Error in model.frame.default(formula = red_wine_data$quality ~ ., data = list( :
variable lengths differ (found for 'fixed acidity')
我没有任何遗漏数据,我查了一下。而且我的所有变量都是相同的长度:
sapply(red_wine_data,function(x) length(x))
fixed acidity volatile acidity
1599 1599
citric acid residual sugar
1599 1599
chlorides free sulfur dioxide
1599 1599
total sulfur dioxide density
1599 1599
pH sulphates
1599 1599
alcohol quality
1599 1599
volatile acidity*citric acid volatile acidity*sulphates
1599 1599
volatile acidity*alcohol citric acid*sulphates
1599 1599
citric acid*alcohol sulphates*alcohol
1599 1599
请帮忙!
答案 0 :(得分:2)
请勿在公式中使用$
运算符:
linear_model_red<-glm(red_wine_data$quality~.,data=red_wine_data)
相反,这样做:
linear_model_red<-glm(quality~.,data=red_wine_data)
原因是通过使用$
,您告诉R您的模型应该使用固定的数字向量作为响应。在这种情况下,这是quality
数据框中的red_wine_data
列。
当你适合初始模型时,没关系,因为所有其他变量也来自该数据框。但是,当您致电cv.glm
进行交叉验证时,R 仍会尝试使用相同的固定向量进行回复。这不再有效,因为交叉验证的目的是使用数据的子集来拟合模型,然后在不同的子集上测试它。通过删除$
(及其左侧的red_wine_data
),您可以告诉R在quality
参数指定的数据集中查找data
变量 - { {1}}将设置为其功能的一部分。这意味着响应将与模型中的其他变量匹配。