大家好。因此,我決定嘗試寫一個簡單的自定義函數,對某些產生的迴歸估計量進行t檢驗(例如H_0:Beta_j =「某些常量」與H_1:Beta_j <「某些常量」)。 這是我第一次創建自己的代碼,但我一直與R一起工作了幾個月,我想我對它有一個體面的理解,所以我不明白爲什麼我不斷收到「下標越界」運行它。「下標越界」錯誤對我的自定義函數?
我的代碼:
custom_test<-function(data,coeff,alt,alternative=c("two.sided","greater","less"),clevel=.95){
dof<-data$df.residual
top<-data$coefficients["coeff"]-alt
bottom=coef(summary(data))["coeff","Std. Error"]
stat<-abs(top/bottom)
if (alternative=="two.sided") {
tstat<-qt(clevel/2,dof)
pstat<-2*pt(tstat,dof)
return(pstat)
} else if (alternative=="greater") {
tstat<-qt(clevel/2,dof)
pstat<-pt(tstat,dof)
return(pstat)
} else if (alternative=="less") {
tstat<-qt(clevel/2,dof)
pstat<-pt(tstat,dof)
return(pstat)
} else {
return("Error")
}
}
我嘗試用標準lm()
結果運行此,hrsemp
是一個變種,並且得到錯誤:
custom_test(fit9,hrsemp,0,alternative="less")
Error in coef(summary(data))["coeff", "Std. Error"] :
subscript out of bounds
但每次我運行有問題的代碼手動自己,我確實得到一個答案:
> coef(fit9)
(Intercept) hrsemp log(sales) log(employ)
12.45837237 -0.02926893 -0.96202698 0.76147045
> coef(summary(fit9))["hrsemp", "Std. Error"]
[1] 0.02280484
其他關於這個錯誤的堆棧交換問題似乎有微妙的不同,而且迄今爲止我還沒有能夠將他們的經驗總結爲我的代碼。
有人請解釋我要去哪裏嗎?
你應該確保你提供了一個[可重現的例子](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),所以我們也可以運行和測試功能。現在我們不確定你實際傳遞給函數的是什麼。 – MrFlick
錯誤提示「coeff」不是rowname,或者「Std。Error」不是要編入索引的對象中的列名稱。閱讀'?Extract' - 你傳遞了一個無效索引,就像任何其他SO海報誰打這個錯誤。 – Frank
我編輯了我的問題上面。我看着你說的話,但是如果我手動輸入我的代碼的有問題的部分,我沒有遇到問題,但由於某種原因,在我的代碼中它確實給了我那個錯誤。爲什麼會這樣呢? – Coolio2654